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