El lenguaje y el sistema de programación ECL eran un lenguaje de programación extensible de alto nivel y un entorno de desarrollo desarrollado en la Universidad de Harvard en la década de 1970. El nombre "ECL" significa "Lenguaje informático extensible" o "Lenguaje EClectic". Algunas publicaciones utilizaron el nombre 'ECL' para todo el sistema y 'EL / 1' (Lenguaje extensible) para el lenguaje en sí.
ECL era un sistema interactivo donde los programas estaban representados dentro del sistema; había un compilador e intérprete compatibles . Tenía una sintaxis similar a ALGOL y un sistema de tipos de datos extensible , con tipos de datos como ciudadanos de primera clase . Los objetos de datos eran valores, no referencias, y las convenciones de llamada permitían elegir entre llamada por valor y llamada por referencia para cada argumento.
ECL se usó principalmente para la investigación y la enseñanza en el diseño de lenguajes de programación , metodología de programación (en particular, programación por refinamiento transformacional ) y entornos de programación en Harvard, aunque se decía que también se usaba en algunas agencias gubernamentales. Se implementó por primera vez en el PDP-10 , con una implementación posterior (solo interpretada) en el PDP-11 escrita en BLISS -11 y compilada de forma cruzada en el PDP-10.
Procedimientos y clases de vinculación
Un procedimiento ECL para calcular el máximo común divisor de dos enteros según el algoritmo euclidiano se podría definir de la siguiente manera:
gcd <- EXPR ( m : INT BYVAL , n : INT BYVAL ; INT ) EMPEZAR DECL r : INT ; REPETIR r <- rem ( m , n ); r = 0 => n ; m <- n ; n <- r ; FINAL; FINAL
Esta es una asignación de una constante de procedimiento a la variable gcd
. La línea
EXPR (m: INT BYVAL, n: INT BYVAL; INT)
indica que el procedimiento toma dos parámetros, de tipo INT
, con nombre m
y n
, y devuelve un resultado de tipo INT
. (Los tipos de datos se denominan modos en ECL). La clase de vinculación BYVAL
en cada declaración de parámetro indica que ese parámetro se pasa por valor . Los componentes computacionales de un programa ECL se denominan formularios . Algunas formas se asemejan a las expresiones de otros lenguajes de programación y otras se asemejan a declaraciones. La ejecución de un formulario siempre arroja un valor. La REPEAT
... END
construcción es una forma de bucle. Ejecución del constructo
r = 0 => n
cuando el formulario se r = 0
evalúa TRUE
provoca que la ejecución del bucle termine con el valor n
. El valor de la última instrucción en una forma de bloque ( BEGIN
... END
) se convierte en el valor de la forma de bloque. El valor del formulario en una declaración de procedimiento se convierte en el resultado de la llamada al procedimiento.
Además de la clase bind BYVAL
, ECL tiene bind-clases SHARED
, LIKE
, UNEVAL
, y LISTED
. Bind-class SHARED
indica que un parámetro debe pasarse por referencia . Bind-class LIKE
hace que un parámetro se pase por referencia si es posible y por valor si no (por ejemplo, si el parámetro real es un valor puro, o una variable a la que se debe aplicar una conversión de tipo). Bind-class UNEVAL
especifica que un árbol de sintaxis abstracta para el parámetro real debe pasarse al parámetro formal; esto proporciona una flexibilidad extraordinaria para que los programadores inventen sus propias notaciones, con su propia semántica de evaluación, para ciertos parámetros de procedimiento. Bind-class LISTED
es similar a UNEVAL
, pero proporciona una capacidad similar a la de varargs en C : la LISTED
bind-class solo puede aparecer en el último parámetro formal del procedimiento, y ese parámetro formal está vinculado a una lista de representaciones de árbol de sintaxis abstracta , uno por cada parámetro real restante. ECL tiene una EVAL
función incorporada para evaluar un árbol de sintaxis abstracto ; alternativamente, hay funciones mediante las cuales los programadores pueden explorar los nodos del árbol de sintaxis abstracta y procesarlos de acuerdo con su propia lógica.
Ver también
Referencias
PISEL = Actas del simposio internacional sobre lenguas extensibles , Grenoble, Francia, 1971, publicado en ACM SIGPLAN Notices 6 : 12, diciembre de 1971.
- Benjamin M. Brosgol, "Una implementación de tipos de datos ECL", PISEL, págs. 87–95.
- Thomas E. Cheatham, Jr. , Glenn H. Holloway, Judy A. Townley, "Refinamiento del programa por transformación", Actas de la 5ª conferencia internacional sobre ingeniería de software , 1981, págs. 430–437. ISBN 0-89791-146-6
- Glenn H. Holloway, "Integración de intérprete / compilador en ECL", PISEL, págs. 129-134.
- Charles J. Prenner, "Las instalaciones de la estructura de control de ECL", PISEL, págs. 104-112.
- Ben Wegbreit, "Una descripción general del sistema de programación ECL", PISEL, págs. 26-28.
- Ben Wegbreit, "Estudios en lenguajes de programación extensibles". Informe técnico ESD-TR-70-297. Universidad de Harvard, Cambridge, Massachusetts, mayo de 1970.
- Glenn Holloway, Judy Townley, Jay Spitzen, Ben Wegbreit, "ECL Programmer's Manual", Informe 23-74, Centro de Investigación en Tecnología Informática, Universidad de Harvard, diciembre de 1974.
- Larry Denenberg, "The deployment of PDP-11 ECL", Technical Report 29-77, Center for Research in Computing Technology, Harvard University, junio de 1977.