De Wikipedia, la enciclopedia libre
Saltar a navegación Saltar a búsqueda

CLU es un lenguaje de programación creado en el Instituto Tecnológico de Massachusetts (MIT) por Barbara Liskov y sus estudiantes entre 1974 y 1975. Si bien no encontró un uso extenso, introdujo muchas características que se usan ampliamente ahora y se considera un paso en el desarrollo de programación orientada a objetos (POO).

Las contribuciones clave incluyen tipos de datos abstractos , [6] call-by-sharing , iteradores , múltiples valores de retorno (una forma de asignación paralela ), tipos parametrizados con seguridad de tipos y tipos de variantes con seguridad de tipos . También se destaca por el uso de clases con constructores y métodos, pero sin herencia .

Clústeres [ editar ]

La sintaxis de CLU se basó en ALGOL , entonces el punto de partida para la mayoría de los nuevos diseños de lenguajes. La adición clave fue el concepto de un clúster , el sistema de extensión de tipos de CLU y la raíz del nombre del lenguaje (CLUster). [7] Los clústeres corresponden generalmente al concepto de una "clase" en un lenguaje OO. Por ejemplo, aquí está la sintaxis de CLU para un clúster que implementa números complejos :

 complex_number = cluster es sumar, restar, multiplicar, ... rep = record [real_part: real, imag_part: real] add = proc ... end add; restar = proc ... end restar; multiplicar = proc ... end multiplicar; ... end complex_number;

Un clúster es un módulo que encapsula todos sus componentes excepto los que se mencionan explícitamente en la cláusula "es". Corresponden a los componentes públicos de una clase en lenguajes orientados a objetos recientes. Un clúster también define un tipo que se puede nombrar fuera del clúster (en este caso, "complex_number"), pero su tipo de representación (rep) está oculto para los clientes externos.

Los nombres de los clústeres son globales y no se proporcionó ningún mecanismo de espacio de nombres para agrupar clústeres o permitir que se creen "localmente" dentro de otros clústeres.

CLU no realiza conversiones de tipo implícitas . En un clúster, las conversiones de tipo explícito hacia arriba y hacia abajo cambian entre el tipo abstracto y la representación. Hay un tipo universal any , y un procedimiento fuerza [] para comprobar que un objeto es de un tipo determinado. Los objetos pueden ser mutables o inmutables, siendo estos últimos tipos base como enteros, booleanos, caracteres y cadenas. [7]

Otras características [ editar ]

Otra característica clave del sistema de tipos CLU son los iteradores , que devuelven objetos de una colección en serie, uno tras otro. [7] Los iteradores ofrecen una interfaz de programación de aplicaciones (API) idéntica sin importar con qué datos se estén utilizando. Por lo tanto, el iterador para una colección de complex_numbers se puede usar indistintamente con el de una matriz de integers. Una característica distintiva de los iteradores CLU es que se implementan como corrutinas, y cada valor se proporciona a la persona que llama a través de una declaración de rendimiento . Los iteradores como los de CLU son ahora una característica común de muchos lenguajes modernos, como C #, Ruby y Python, aunque recientemente se los conoce como generadores.

CLU también incluye manejo de excepciones , basado en varios intentos en otros idiomas; las excepciones se generan signaly se manejan con except. A diferencia de la mayoría de los otros lenguajes con manejo de excepciones, las excepciones no se resignan implícitamente en la cadena de llamadas. Además, a diferencia de la mayoría de los otros lenguajes que proporcionan manejo de excepciones, las excepciones en CLU se consideran parte del flujo de ejecución ordinario y se consideran una forma "normal" y eficiente con seguridad de tipos de salir de bucles o regresar de funciones; esto permite la asignación directa de valores de retorno "excepto cuando" se aplican otras condiciones. Las excepciones que no se detectan ni se cancelan explícitamente se convierten inmediatamente en una excepción de error especial que normalmente finaliza el programa.

CLU a menudo se acredita como el primer idioma con tipos de variantes con seguridad de tipos , llamados oneofs , antes de que el lenguaje ML los tuviera.

Una característica distintiva final en CLU es la asignación en paralelo ( asignación múltiple), donde más de una variable puede aparecer en el lado izquierdo de un operador de asignación . Por ejemplo, la escritura x,y := y,xintercambiaría valores de xy y. De la misma manera, las funciones podrían devolver varios valores, como x,y,z := f(t). La asignación paralela (aunque no múltiples valores de retorno) es anterior a CLU, que aparece en CPL (1963), denominada asignación simultánea , [8] pero CLU la popularizó y a menudo se acredita como la influencia directa que conduce a la asignación paralela en idiomas posteriores.

Todos los objetos de un programa CLU viven en el montón y la gestión de la memoria es automática.

CLU admite abstracciones de datos definidas por el usuario con parámetros de tipo . Fue el primer lenguaje en ofrecer tipos parametrizados delimitados con seguridad de tipos, utilizando cláusulas de estructura where para expresar restricciones sobre argumentos de tipo reales.

Influencia [ editar ]

CLU y Ada fueron grandes inspiraciones para las plantillas de C ++ . [ cita requerida ]

Los mecanismos de manejo de excepciones de CLU influyeron en lenguajes posteriores como C ++ y Java . [ cita requerida ]

Sather , Python y C # incluyen iteradores , que aparecieron por primera vez en CLU. [ cita requerida ]

Perl y Lua tomaron asignaciones múltiples y retornos múltiples de llamadas a funciones de CLU. [9]

Python y Ruby tomaron prestada la llamada al compartir , la declaración de rendimiento [10] y la asignación múltiple. [11]

Referencias [ editar ]

  1. ↑ a b Curtis, Dorothy (6 de noviembre de 2009). "Página de inicio de CLU" . Grupo de Metodología de Programación, Laboratorio de Informática e Inteligencia Artificial . Instituto de Tecnología de Massachusetts . Consultado el 26 de mayo de 2016 .
  2. ↑ a b Curtis, Dorothy (6 de noviembre de 2009). "Índice de / pub / pclu" . Grupo de Metodología de Programación, Laboratorio de Informática e Inteligencia Artificial . Instituto de Tecnología de Massachusetts . Consultado el 26 de mayo de 2016 .
  3. ^ Ushijima, Tetsu. "clu2c" . clu2c . woodsheep.jp . Consultado el 26 de mayo de 2016 .
  4. ^ Lundh, Fredrik. "Llamar por objeto" . effbot.org . Consultado el 21 de noviembre de 2017 . reemplace "CLU" con "Python", "registro" con "instancia" y "procedimiento" con "función o método", y obtendrá una descripción bastante precisa del modelo de objetos de Python.
  5. Lattner, Chris (3 de junio de 2014). "Página de inicio de Chris Lattner" . Chris Lattner . Consultado el 3 de junio de 2014 . El lenguaje Swift es el producto del esfuerzo incansable de un equipo de expertos en lenguaje, gurús de la documentación, ninjas de optimización de compiladores y un grupo interno de prueba interna increíblemente importante que brindó comentarios para ayudar a refinar y probar ideas. Por supuesto, también se benefició enormemente de las experiencias ganadas con esfuerzo por muchos otros lenguajes en el campo, extrayendo ideas de Objective-C, Rust, Haskell, Ruby, Python, C #, CLU y demasiados otros para enumerarlos.
  6. ^ Liskov, Barbara ; Zilles, Stephen (1974). "Programación con tipos de datos abstractos". Actas del simposio ACM SIGPLAN sobre idiomas de muy alto nivel . págs. 50–59. CiteSeerX 10.1.1.136.3043 . doi : 10.1145 / 800233.807045 . 
  7. ↑ a b c Liskov, B .; Snyder, A .; Atkinson, R .; Schaffert, C. (agosto de 1977). "Mecanismos de abstracción en CLU". Comunicaciones de la ACM . 20 (8): 564–576. CiteSeerX 10.1.1.112.656 . doi : 10.1145 / 359763.359789 . S2CID 17343380 .  
  8. ^ Barron, DW; Buxton, JN; Hartley, DF; Nixon, E .; Strachey, C. (1963). "Las principales características de CPL" . Revista informática . 6 (2): 134-143. doi : 10.1093 / comjnl / 6.2.134 .
  9. ^ Ierusalimschy, R .; De Figueiredo, LH; Celes, W. (2007). "La evolución de Lua" (PDF) . Actas de la tercera conferencia ACM SIGPLAN sobre Historia de los lenguajes de programación - HOPL III . págs. 2-1–2-26. doi : 10.1145 / 1238844.1238846 . ISBN  978-1-59593-766-7.
  10. ^ "Las raíces de Ruby y el liderazgo de Matz" . Ingeniería de cartera . 2019-11-08 . Consultado el 15 de noviembre de 2019 . Matz siente que los bloques son el mayor invento de Ruby (estoy de acuerdo). Obtuvo la idea de un lenguaje de la década de 1970 llamado CLU del MIT, que los llamó 'iteradores' ...
  11. ^ "CÓMO de programación funcional - documentación de Python 3.8.3" . docs.python.org . Consultado el 25 de mayo de 2020 .

Enlaces externos [ editar ]

  • Página web oficial
  • Una historia de CLU (pdf)
  • clu2c : un programa para compilar código CLU en C
  • Diccionario de lenguajes de programación
  • Comparación de CLU en el sitio de algoritmo de demostración en varios idiomas de '99 botellas de cerveza '