Il y a beaucoup de confusion et d'abus de ces termes. Souvent, l'un est utilisé pour signifier un autre. Voici ce que ces termes signifient réellement.
«Native» fait référence aux types qui sont intégrés au langage, par opposition à être fournis par une bibliothèque (même une bibliothèque standard), quelle que soit la façon dont ils sont implémentés. Les chaînes Perl font partie du langage Perl, elles sont donc natives en Perl. C fournit une sémantique de chaîne sur des pointeurs vers des caractères à l'aide d'une bibliothèque, le pointeur vers char est donc natif, mais les chaînes ne le sont pas.
"Atomic" fait référence à un type qui ne peut plus être décomposé. C'est l'opposé de «composite» . Les composites peuvent être décomposés en une combinaison de valeurs atomiques ou d'autres composites. Les entiers natifs et les nombres à virgule flottante sont atomiques. Les fractions, les nombres complexes, les conteneurs / collections et les chaînes sont composites.
«Scalaire» - et c'est celui qui déroute la plupart des gens - fait référence à des valeurs qui peuvent exprimer l'échelle (d'où le nom), telles que la taille, le volume, les nombres, etc. Les entiers, les nombres à virgule flottante et les fractions sont des scalaires. Les nombres complexes, les booléens et les chaînes ne sont PAS des scalaires. Quelque chose qui est atomique n'est pas nécessairement scalaire et quelque chose qui est scalaire n'est pas nécessairement atomique. Les scalaires peuvent être natifs ou fournis par des bibliothèques.
Certains types ont des classifications étranges. Les types BigNumber, généralement implémentés sous forme de tableau de chiffres ou d'entiers, sont des scalaires, mais ils ne sont techniquement pas atomiques. Ils peuvent sembler atomiques si l'implémentation est masquée et que vous ne pouvez pas accéder aux composants internes. Mais les composants ne sont que cachés, donc l'atomicité est une illusion. Ils sont presque toujours fournis dans les bibliothèques, ils ne sont donc pas natifs, mais ils pourraient l'être. Dans le langage de programmation Mathematica, par exemple, les grands nombres sont natifs et, comme il n'y a aucun moyen pour un programme Mathematica de les décomposer en leurs blocs de construction, ils sont également atomiques dans ce contexte, malgré le fait qu'ils soient composites sous le couvertures (où vous n'êtes plus dans le monde du langage Mathematica).
Ces définitions sont indépendantes de la langue utilisée.