stringtranslate.com

Ciudadano de primera clase

En un diseño de lenguaje de programación determinado , un ciudadano de primera clase [a] es una entidad que admite todas las operaciones que generalmente están disponibles para otras entidades. Estas operaciones suelen incluir ser pasadas como argumento , devueltas desde una función y asignadas a una variable . [1]

Historia

El concepto de objetos de primera y segunda clase fue introducido por Christopher Strachey en la década de 1960. [2] [3] En realidad, no definió el término estrictamente, pero contrastó los números reales y los procedimientos en ALGOL :

Objetos de primera y segunda clase. En ALGOL, un número real puede aparecer en una expresión o ser asignado a una variable, y cualquiera de ellos puede aparecer como un parámetro real en una llamada a un procedimiento. Un procedimiento, por otra parte, sólo puede aparecer en otra llamada a un procedimiento como operador (el caso más común) o como uno de los parámetros reales. No existen otras expresiones que involucren procedimientos o cuyos resultados sean procedimientos. Por lo tanto, en cierto sentido, los procedimientos en ALGOL son ciudadanos de segunda clase: siempre tienen que aparecer en persona y nunca pueden ser representados por una variable o expresión (excepto en el caso de un parámetro formal)... [4]

Robin Popplestone dio la siguiente definición: Todos los artículos tienen ciertos derechos fundamentales.

  1. Todos los elementos pueden ser los parámetros reales de las funciones.
  2. Todos los elementos pueden devolverse como resultados de funciones.
  3. Todos los artículos pueden ser objeto de declaraciones de asignación.
  4. Todos los elementos pueden probarse para comprobar su igualdad. [5]

Durante la década de 1990, Raphael Finkel [6] propuso definiciones de valores de segunda y tercera clase, pero estas definiciones no han sido ampliamente adoptadas. [7] [ se necesita una mejor fuente ]

Ejemplos

Los tipos de datos escalares más simples , como los números enteros y de punto flotante, casi siempre son de primera clase.

En muchos lenguajes antiguos, las matrices y las cadenas no son de primera clase: no se pueden asignar como objetos ni pasar como parámetros a una subrutina. Por ejemplo, ni Fortran IV ni C admiten la asignación de matrices, y cuando se pasan como parámetros, solo se pasa realmente la posición de su primer elemento; se pierde su tamaño. C parece admitir la asignación de punteros de matriz , pero de hecho estos son simplemente punteros al primer elemento de la matriz y, nuevamente, no llevan el tamaño de la matriz. [ cita requerida ]

En la mayoría de los lenguajes, los tipos de datos no son objetos de primera clase, aunque en algunos lenguajes orientados a objetos, las clases son objetos de primera clase y son instancias de metaclases . Los lenguajes de la familia de programación funcional a menudo también presentan tipos de primera clase, en forma de, por ejemplo, tipos de datos algebraicos generalizados u otras comodidades de metalenguaje que permiten a los programas implementar extensiones a su propio lenguaje de implementación.

Pocos lenguajes admiten continuaciones y etiquetas GOTO como objetos, y mucho menos como objetos de primera clase.

Funciones

Muchos lenguajes de programación admiten el paso y la devolución de valores de funciones, que se pueden aplicar a los argumentos. No se sabe si esto es suficiente para llamar a los valores de funciones de primera clase.

Algunos autores exigen que sea posible crear nuevas funciones en tiempo de ejecución para llamarlas "de primera clase". [ cita requerida ] Según esta definición, las funciones en C no son objetos de primera clase; en cambio, a veces se las llama objetos de segunda clase , porque aún se pueden manipular en la mayoría de las formas anteriores (a través de punteros de función ).

En Smalltalk , las funciones (métodos) son objetos de primera clase, al igual que las clases de Smalltalk. Como los operadores (+, -, etc.) de Smalltalk son métodos, también son objetos de primera clase.

Reflexión

Algunos lenguajes, como Java y PHP , tienen un subsistema de reflexión explícito que permite el acceso a estructuras de implementación internas aunque no sean accesibles ni manipulables de la misma manera que los objetos ordinarios.

En otros lenguajes, como los de la familia Lisp , la reflexión es una característica central del lenguaje, en lugar de un subsistema especial. Normalmente, esto adopta la forma de un conjunto de las siguientes características:

Estos permiten diversas formas de acceso de primera clase a la implementación del lenguaje y, en general, se pueden manipular de la misma manera que los objetos del lenguaje ordinario y son totalmente indistinguibles de ellos. Por este motivo, su uso suele ir acompañado de algunas estipulaciones y consejos (culturales), ya que las modificaciones no probadas del sistema de programación central por parte de los usuarios pueden socavar fácilmente las optimizaciones de rendimiento realizadas por los implementadores del lenguaje.

Véase también

Notas

  1. ^ También conocido como tipo de primera clase , objeto de primera clase , entidad de primera clase o valor de primera clase .

Referencias

  1. ^ Scott, Michael (2006). Pragmática de lenguajes de programación . San Francisco, CA: Morgan Kaufmann Publishers. pág. 140. ISBN 9780126339512.
  2. ^ Rod Burstall, "Christopher Strachey: comprensión de los lenguajes de programación", Computación simbólica y de orden superior 13:52 (2000)
  3. ^ Harold Abelson y Gerald Jay Sussman, Estructura e interpretación de programas informáticos , 2.ª edición, sección 1.3.4, nota al pie 64 Archivado el 9 de marzo de 2015 en Wayback Machine.
  4. ^ Christopher Strachey, "Conceptos fundamentales en lenguajes de programación" en Higher-Order and Symbolic Computation 13 :11 (2000); aunque se publicaron en 2000, son notas de conferencias que Strachey dictó en agosto de 1967
  5. ^ RJ Popplestone: La filosofía de diseño de POP-2 . en: D. Michie: Machine Intelligence 3, Edimburgo en University Press, 1968
  6. ^ Finkel, R. Diseño de lenguaje de programación avanzado , pág. 73
  7. ^ Norman Ramsey. "Acerca del valor de primera, segunda y tercera clase". stackoverflow.com . Consultado el 14 de septiembre de 2013 .
  8. ^ de Paritosh Shroff, Scott F. Smith. Inferencia de tipos para mensajes de primera clase con funciones de coincidencia
  9. ^ Bove, Ana; Dybjer, Peter (2009). "Tipos dependientes en acción" (PDF) . Ingeniería del lenguaje y desarrollo riguroso de software . Apuntes de clase en informática. Vol. 5520. págs. 57–99. doi :10.1007/978-3-642-03153-3_2. ISBN 978-3-642-03152-6. Archivado (PDF) del original el 2 de abril de 2014 . Consultado el 8 de junio de 2015 . (también archivado)