type programming examples data programming-languages types terminology primitive-types scalar

programming-languages - examples - data types programming



Tipo de datos escalar vs. primitivo: ¿son lo mismo? (5)

En varios artículos que he leído, a veces hay referencias a tipos de datos primitivos y, a veces, hay referencias a escalares.

Mi comprensión de cada uno es que son tipos de datos de algo simple como int, boolean, char, etc.

¿Hay algo que me falta que significa que debe usar terminología particular o son términos simplemente intercambiables? Las páginas de Wikipedia para cada uno no muestran nada obvio.

Si los términos son simplemente intercambiables, ¿cuál es el preferido?


En C, los tipos de enumeración, los caracteres y las diversas representaciones de los enteros forman una clase de tipo más general denominada tipos escalares. Por lo tanto, las operaciones que puede realizar en valores de cualquier tipo escalar son las mismas que para los enteros.


En pocas palabras, parece que un tipo ''escalar'' se refiere a un solo elemento, en contraposición a un compuesto o colección. Entonces los escalares incluyen tanto valores primitivos como cosas como un valor enum.

http://ee.hawaii.edu/~tep/EE160/Book/chap5/section2.1.3.html

Tal vez el término ''escalar'' pueda ser un retroceso a C:

donde los escalares son objetos primitivos que contienen un solo valor y no están compuestos de otros objetos de C ++

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/1995/N0774.pdf

Tengo curiosidad acerca de si esto se refiere a si estos artículos tendrían un valor de ''escala''. - Como contar números.


Hay mucha confusión y mal uso de estos términos. A menudo, uno se usa para significar otro. Esto es lo que esos términos realmente significan.

"Nativo" se refiere a los tipos que están integrados en el idioma, en lugar de ser proporcionados por una biblioteca (incluso una biblioteca estándar), independientemente de cómo se implementen. Las cadenas Perl son parte del lenguaje Perl, por lo que son nativas en Perl. C proporciona semántica de cadena sobre punteros a caracteres mediante una biblioteca, por lo que el puntero a char es nativo, pero las cadenas no lo son.

"Atómico" se refiere a un tipo que ya no se puede descomponer. Es lo opuesto a "compuesto" . Los compuestos pueden descomponerse en una combinación de valores atómicos u otros materiales compuestos. Los enteros nativos y los números de coma flotante son atómicos. Las fracciones, los números complejos, los contenedores / colecciones y las cadenas son compuestos.

"Escalar" - y este es el que confunde a la mayoría de la gente - se refiere a valores que pueden expresar escala (de ahí el nombre), como tamaño, volumen, recuentos, etc. Los enteros, números flotantes y fracciones son escalares. Los números complejos, booleanos y cadenas NO son escalares. Algo que es atómico no es necesariamente escalar y algo que es escalar no es necesariamente atómico. Los escalares pueden ser nativos o proporcionados por bibliotecas.

Algunos tipos tienen clasificaciones impares. Los tipos de BigNumber, generalmente implementados como una matriz de dígitos o enteros, son escalares, pero técnicamente no son atómicos. Pueden parecer atómicos si la implementación está oculta y no puede acceder a los componentes internos. Pero los componentes solo están ocultos, por lo que la atomicidad es una ilusión. Casi siempre se proporcionan en bibliotecas, por lo que no son nativas, pero podrían serlo. En el lenguaje de programación de Mathematica, por ejemplo, los números grandes son nativos y, dado que no hay forma de que un programa de Mathematica los descomponga en sus componentes básicos, también son atómicos en ese contexto, a pesar de que son compuestos bajo el covers (donde ya no estás en el mundo del lenguaje Mathematica).

Estas definiciones son independientes del idioma que se usa.


Me gusta la respuesta de Scott Langeberg porque es concisa y está respaldada por enlaces autorizados. Volvería a votar la respuesta de Scott si pudiera.

Supongo que ese tipo de datos "primitivos" podría considerarse tipo de datos primarios, de modo que los tipos de datos secundarios se derivan de tipos de datos primarios. La derivación es a través de la combinación, como una estructura C ++. Una estructura se puede usar para combinar tipos de datos (como, int y a char) para obtener un tipo de datos secundario. El tipo de datos definido por la estructura siempre es un tipo de datos secundario. Los tipos de datos primarios no se derivan de nada, sino que están dados en el lenguaje de programación.

Tengo un paralelo con el ser primitivo, la nomenclatura es primaria. Ese paralelo es "expresión regular". Creo que la nomenclatura "regular" puede entenderse como "regular". Por lo tanto, tienes una expresión que regula la búsqueda.

La etimología escalar ( http://www.etymonline.com/index.php?allowed_in_frame=0&search=scalar&searchmode=none ) significa escalera. Creo que la forma en que esto se relaciona con la programación es que una escalera tiene una sola dimensión: ¿cuántos peldaños del final de la escalera? Un tipo de datos escalar tiene solo una dimensión, representada por un solo valor.

Creo que en uso, primitivo y escalar son intercambiables. ¿Hay algún ejemplo de una primitiva que no sea escalar, o de un escalar que no sea primitivo?

Aunque es intercambiable, primitiva se refiere a que el tipo de datos es un bloque de construcción básico de otros tipos de datos, y una primitiva no está compuesta por otros tipos de datos.

Scalar se refiere a que tiene un solo valor. Scalar contrasta con el vector matemático. Un vector no está representado por un solo valor porque (usando un tipo de vector como ejemplo) se necesita un valor para representar la dirección del vector y otro valor necesario para representar la magnitud del vector.

Enlaces de referencia: http://whatis.techtarget.com/definition/primitive http://en.wikipedia.org/wiki/Primitive_data_type


No creo que sean intercambiables. Con frecuencia son similares, pero la diferencia existe, y parece ser principalmente en lo que se contrasta y lo que es relevante en contexto.

Los escalares generalmente se contrastan con compuestos , como matrices, mapas, conjuntos, estructuras, etc. Un escalar es un valor "único" - entero, booleano, tal vez una cadena - mientras que un compuesto se compone de múltiples escalares (y posiblemente referencias a otros compuestos). "Escalar" se usa en contextos donde la distinción relevante es entre valores simples / simples / atómicos y valores compuestos.

Sin embargo, los tipos primitivos se contrastan con tipos de referencia , y se usan cuando la distinción relevante es "¿Es esto directamente un valor, o es una referencia a algo que contiene el valor real?", Como en los tipos primitivos de Java vs. referencias . Veo esto como una distinción de un nivel un poco más bajo que escalar / compuesto, pero no del todo.

Realmente depende del contexto (y frecuentemente de qué idioma se habla de la familia). Para tomar uno, posiblemente patológico, ejemplo: cadenas. En C, una cuerda es un compuesto (una matriz de caracteres), mientras que en Perl, una cuerda es un escalar. En Java, una cadena es un objeto (o tipo de referencia). En Python, todo es (conceptualmente) un tipo de objeto / referencia, que incluye cadenas (y números).