CLU es un lenguaje de programación basado en clases creado en el Instituto Tecnológico de Massachusetts (MIT) por Barbara Liskov y sus estudiantes a partir de 1973. [ 8 ] Si bien no tuvo un uso generalizado, introdujo muchas características que ahora se utilizan ampliamente y se considera un paso en el desarrollo de la programación orientada a objetos (POO).
Entre las contribuciones clave se incluyen los tipos de datos abstractos , [ 9 ] la llamada por compartición , los iteradores , los valores de retorno múltiples (una forma de asignación paralela ), los tipos parametrizados con seguridad de tipos y los tipos variantes con seguridad de tipos . También es notable por su uso de clases con constructores y métodos, pero sin herencia .
Clústeres
La sintaxis de CLU se basó en ALGOL , que entonces era el punto de partida para la mayoría de los nuevos diseños de lenguajes. La adición clave fue el concepto de clúster , el sistema de extensión de tipos de CLU y la raíz del nombre del lenguaje (CLUster). [ 10 ] Los clústeres corresponden generalmente al concepto de "clase" en un lenguaje orientado a objetos. Por ejemplo, aquí está la sintaxis de CLU para un clúster que implementa números complejos :
número_complejo = el clúster es sumar, restar, multiplicar, ... rep = registro [ parte_real: real, parte_imagen: real ] agregar = proc ... fin agregar; restar = proc ... fin restar; multiplicar = proc ... fin multiplicar; ... fin del número complejo; Un clúster implementa una abstracción de datos, que consiste en un conjunto de objetos y un conjunto de operaciones primitivas para crear y manipular dichos objetos. [ 11 ] : 1.3 Estos corresponden a los componentes públicos de una clase en lenguajes de programación orientados a objetos recientes. Un clúster también define un tipo que puede ser nombrado 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 crearan "localmente" dentro de otros clústeres.
En un clúster, las conversiones de tipo explícitas ascendentes y descendentes cambian entre el tipo abstracto y la representación; las conversiones implícitas entre estos tipos se indican mediante el tipo especial cvt . CLU no realiza conversiones de tipo implícitas de otra manera . Existe un tipo universal any y un procedimiento force[] para comprobar que un objeto es de un tipo determinado. Los objetos pueden ser mutables o inmutables; estos últimos son tipos base como enteros, booleanos, caracteres y cadenas. [ 10 ]
Otras características
Otra característica clave del sistema de tipos CLU son los iteradores , que devuelven objetos de una colección de forma secuencial, uno tras otro. [ 10 ] Los iteradores ofrecen una interfaz de programación de aplicaciones (API) idéntica, independientemente de los datos con los que se utilicen. Por lo tanto, el iterador para una colección de complex_numberse puede usar indistintamente con el de una matriz de integer. Una característica distintiva de los iteradores CLU es que se implementan como corrutinas, y cada valor se proporciona al llamador mediante una instrucción yield . 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 les suele llamar generadores.
CLU también incluye manejo de excepciones , basado en varios intentos en otros lenguajes; las excepciones se generan usando signaly se manejan con except. A diferencia de la mayoría de los demás lenguajes con manejo de excepciones, las excepciones no se vuelven a marcar implícitamente en la cadena de llamadas. También a diferencia de la mayoría de los demás 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 de seguridad de tipos para salir de bucles o regresar de funciones; esto permite la asignación directa de valores de retorno "excepto cuando" se cumplen otras condiciones. Las excepciones que no se capturan ni se vuelven a marcar explícitamente se convierten inmediatamente en una excepción de fallo especial que normalmente termina el programa.
A menudo se considera que CLU fue el primer lenguaje con tipos variantes seguros , llamados oneofs , antes de que el lenguaje ML los tuviera.
Una característica distintiva final en CLU es la asignación paralela (asignación múltiple), donde puede aparecer más de una variable en el lado izquierdo de un operador de asignaciónx,y := y,x . Por ejemplo, escribir intercambiaría los 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 los valores de retorno múltiples) es anterior a CLU, apareciendo en CPL (1963), llamada asignación simultánea , [ 12 ] pero CLU la popularizó y a menudo se le atribuye como la influencia directa que condujo a la asignación paralela en lenguajes posteriores.
Todos los objetos de un programa CLU residen en el montón, y la gestión de la memoria es automática.
CLU admite abstracciones de datos definidas por el usuario y parametrizadas por tipo . Fue el primer lenguaje en ofrecer tipos parametrizados acotados y seguros en cuanto a tipos, utilizando cláusulas `where` para expresar restricciones en los argumentos de tipo reales. A diferencia de los lenguajes con genéricos basados en plantillas, el uso de dicha abstracción de datos puede verificarse sin necesidad de acceder a su implementación.
Influencia
CLU y Ada fueron fuentes de inspiración importantes para las plantillas de C++ . [ 5 ]
Los mecanismos de manejo de excepciones de CLU influyeron en lenguajes posteriores como C++, [ 5 ] Java y muchos otros. [ 13 ]
Sather , Python y C# incluyen iteradores , que aparecieron por primera vez en CLU. [ 8 ]
Perl y Lua tomaban múltiples asignaciones y múltiples retornos de las llamadas a funciones de CLU. [ 14 ]
Python y Ruby tomaron prestados call by sharing , la instrucción yield , [ 15 ] y la asignación múltiple. [ 16 ]
Referencias
- ^ a b Curtis, Dorothy (2009-11-06). "Página principal de CLU" . Grupo de Metodología de Programación, Laboratorio de Ciencias de la Computación e Inteligencia Artificial . Instituto Tecnológico de Massachusetts . Recuperado el 26 de mayo de 2016 .
- ^ a b Curtis, Dorothy (2009-11-06). "Índice de /pub/pclu" . Grupo de Metodología de Programación, Laboratorio de Ciencias de la Computación e Inteligencia Artificial . Instituto Tecnológico de Massachusetts. Archivado del original el 21-06-2021 . Recuperado el 26-05-2016 .
- ^ "Archivos CLU, 1976–1989" . Colección de cintas de Tech Square (ToTS), MC-0741 . Departamento de Colecciones Distintivas, Instituto Tecnológico de Massachusetts. swh:1:dir:5dc935d1c236b15a99b0750cf236b2d89ec951d0 .
- ^ Ushijima, Tetsu. "clu2c" . clu2c . woodsheep.jp . Consultado el 26 de mayo de 2016 .
- ^ a b c Stroustrup, Bjarne (1996). A History of C++: 1979--1991 . Nueva York, NY, EE. UU.: Association for Computing Machinery. pp. 699– 769. doi : 10.1145/234286.1057836 . Recuperado el 25 de marzo de 2022 .
- ^ Lundh, Fredrik. "Call By Object" . effbot.org . Archivado del original el 23 de noviembre de 2019. Recuperado el 21 de noviembre de 2017.
Reemplace "CLU" por "Python", "record" por "instance" y "procedure" por "function or method", y obtendrá una descripción bastante precisa del modelo de objetos de Python.
- ^ Lattner, Chris (2014-06-03). "Página web de Chris Lattner" . Chris Lattner . Recuperado el 3 de junio de 2014.
El lenguaje Swift es el producto del esfuerzo incansable de un equipo de expertos en lenguajes, gurús de la documentación, ninjas de la optimización de compiladores y un grupo interno de pruebas increíblemente importante que proporcionó retroalimentación 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, tomando ideas de Objective-C, Rust, Haskell, Ruby, Python, C#, CLU y demasiados otros para enumerar.
- ^ a b Liskov, Barbara (1992). "Una historia de CLU". La segunda conferencia ACM SIGPLAN sobre la historia de los lenguajes de programación.
- ^ Liskov, Barbara ; Zilles, Stephen (1974). "Programación con tipos de datos abstractos". Actas del simposio ACM SIGPLAN sobre lenguajes de muy alto nivel . págs. 50–59 . CiteSeerX 10.1.1.136.3043 . doi : 10.1145/800233.807045 .
- ^ a b c Liskov, B. ; Snyder, A.; Atkinson, R.; Schaffert, C. (agosto de 1977). "Mecanismos de abstracción en CLU". Communications of the ACM . 20 (8): 564– 576. CiteSeerX 10.1.1.112.656 . doi : 10.1145/359763.359789 . S2CID 17343380 .
- ^ Liskov, B.; Atkinson, R.; Bloom, T.; Moss, E.; Schaffert, JC; Scheifler, R.; Snyder, A. (1981). Manual de referencia de CLU . Apuntes de conferencias sobre informática. vol. 114. Saltador. doi : 10.1007/BFb0035014 . ISBN 9783540108368. S2CID 27382594 .
- ^ Barron, DW; Buxton, JN; Hartley, DF; Nixon, E.; Strachey, C. (1963). "Las principales características de CPL" . Computer Journal . 6 (2): 134– 143. doi : 10.1093/comjnl/6.2.134 .
- ^ "CLU surgió en una época en la que los desarrolladores de software se enfrentaban a crecientes desafíos para gestionar la complejidad y garantizar la fiabilidad en sistemas grandes. Barbara Liskov, junto con su equipo en el MIT" . Zactra Technologies Inc. 2024-12-02 . Consultado el 2025-06-23 .
- ^ 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 . pp. 2-1 – 2-26 . doi : 10.1145/1238844.1238846 . ISBN 978-1-59593-766-7Archivado (PDF) del original el 3 de julio de 2010 .
- ^ "Los orígenes de Ruby y el liderazgo de Matz" . Appfolio Engineering . 8 de noviembre de 2019. Consultado el 15 de noviembre de 2019.
Matz considera que los bloques son el mayor invento de Ruby (estoy de acuerdo). La idea la obtuvo de un lenguaje de la década de 1970 llamado CLU del MIT, que los denominaba "iteradores"...
- ^ "Programación funcional HOWTO — Documentación de Python 3.8.3" . docs.python.org . Consultado el 25 de mayo de 2020 .
Enlaces externos
- Sitio web oficial
- Liskov, Barbara (abril de 1992). "Historia de CLU" (PDF) . MIT-LCS-TR-561. Archivado del original (PDF) el 17 de septiembre de 2003.
- clu2c : un programa para compilar código CLU a C.
- Diccionario de lenguajes de programación
- Comparación de CLU en el sitio web de demostración del algoritmo multilingüe '99 botellas de cerveza'
- Artículos con código CLU de ejemplo
- Lenguajes de programación académica
- Lenguajes de programación basados en clases
- Software del Instituto Tecnológico de Massachusetts
- Lenguajes de programación procedimental
- Lenguajes de programación creados en 1975
- Lenguajes de programación creados por mujeres
