Існує багато плутанини та неправильного використання цих термінів. Часто один використовується для означання іншого. Ось що насправді означають ці терміни.
"Рідний" позначає типи, вбудовані в мову, на відміну від надання бібліотекою (навіть стандартною бібліотекою), незалежно від того, як вони реалізовані. Рядки Perl є частиною мови Perl, тому вони є рідною мовою Perl. C забезпечує семантику рядків над покажчиками на символи з використанням бібліотеки, тому вказівник на char є рідним, але рядки - ні.
"Атомний" відноситься до типу, який вже не можна розкласти. Це протилежність "композиту" . Композити можна розкласти на комбінацію атомних значень або інших композитів. Рідні цілі числа та числа з плаваючою комою є атомними. Дроби, складні числа, контейнери / колекції та рядки є складовими.
"Скаляр" - і це те, що бентежить більшість людей - відноситься до значень, які можуть виражати масштаб (звідси і назва), наприклад, розмір, об'єм, кількість тощо. Цілі, числа з плаваючою комою та дроби - це скаляри. Складні числа, булеві та рядки НЕ є скалами. Те, що є атомним, не обов'язково є скалярним, а те, що є скалярним, не обов'язково є атомним. Скаляри можуть бути власними або надаватися бібліотеками.
Деякі типи мають непарні класифікації. Типи BigNumber, які зазвичай реалізуються як масив цифр або цілих чисел, є скалярами, але технічно вони не атомні. Вони можуть бути атомними, якщо реалізація прихована і ви не можете отримати доступ до внутрішніх компонентів. Але компоненти лише приховані, тому атомність - це ілюзія. Вони майже незмінно надаються в бібліотеках, тому вони не є рідними, але вони можуть бути. Наприклад, в мові програмування Mathematica великі числа є рідними, і оскільки програма Mathematica не може розкласти їх у свої будівельні блоки, вони також є атомними в цьому контексті, незважаючи на те, що вони композити під обкладинки (де ви більше не в світі мови Mathematica).
Ці визначення не залежать від мови, що використовується.