Depende da linguagem.
Por exemplo, em linguagens como C e C ++, você tem vários tipos escalares internos - int
, float
, double
, char
, etc. Eles são "primitivos" no sentido que eles não podem ser decompostos em componentes mais simples. A partir desses tipos básicos, você pode definir novos tipos - tipos de ponteiro, tipos de matriz, tipos de estrutura, tipos de união, etc.
Então você tem uma linguagem como a antiga Lisp, onde tudo é um átomo ou uma lista . Novamente, pela definição acima, um átomo é "primitivo" no sentido de que não pode ser decomposto em algo mais simples.
Editar
Tanto quanto eu estou preocupado, os termos "primitivo", "básico" e "embutido" são praticamente intercambiáveis. Se você quiser realmente pedante, é possível distinguir entre os tipos "internos" (aqueles explicitamente fornecidos pela definição da linguagem) e os tipos derivados dos tipos internos que ainda são "primitivo" ou "básico", pois não podem ser decompostos em elementos mais simples. O recurso typedef
do C permite criar novos nomes de tipos para tipos existentes. Ada permite que você crie novos tipos escalares que tenham restrições sobre eles. Por exemplo, você pode derivar um tipo de Latitude a partir do tipo flutuante integrado, com a restrição de não aceitar valores fora do intervalo [-90.0, 90.0]. Ainda é um tipo básico ou primitivo, pois não pode ser dividido em nenhum componente mais simples, mas como é definido pelo usuário, não é considerado um tipo "interno".
Mais uma vez, esses conceitos são um pouco confusos e realmente dependem do contexto. Por exemplo, a noção de um tipo "embutido" não tem sentido para uma linguagem sem tipo, como BLISS.