ECL programming language

Source: Wikipedia, the free encyclopedia.

The ECL programming language and system were an

development environment developed at Harvard University
in the 1970s. The name 'ECL' stood for 'Extensible Computer Language' or 'EClectic Language'. Some publications used the name 'ECL' for the system as a whole and EL/1 (Extensible Language) for the language.

ECL was an interactive system where programs were represented within the system; there was a compatible

call by reference
for each argument.

ECL was primarily used for research and teaching in

programming environments at Harvard, though it was said to be used at some government agencies as well. It was first implemented on the PDP-10, with a later (interpreted-only) implementation on the PDP-11 written in BLISS
-11 and cross-compiled on the PDP-10.

Procedures and bind-classes

An ECL procedure for computing the greatest common divisor of two integers according to the Euclidean algorithm could be defined as follows:

 gcd <-
   EXPR(m:INT BYVAL, n: INT BYVAL; INT)
   BEGIN
     DECL r:INT;
     REPEAT
       r <- rem(m, n);
       r = 0 => n;
       m <- n;
       n <- r;
     END;
   END

This is an assignment of a procedure constant to the variable gcd. The line

EXPR(m:INT BYVAL, n: INT BYVAL; INT)

indicates that the procedure takes two parameters, of type INT, named m and n, and returns a result of type INT. (Data types are called modes in ECL.) The bind-class BYVAL in each parameter declaration indicates that that parameter is passed

by value
. The computational components of an ECL program are called forms. Some forms resemble the expressions of other programming languages and others resemble statements. The execution of a form always yields a value. The REPEAT ... END construct is a loop form. Execution of the construct

r = 0 => n

when the form r = 0 evaluates to TRUE causes execution of the loop to terminate with the value n. The value of the last statement in a block (BEGIN ... END) form becomes the value of the block form. The value of the form in a procedure declaration becomes the result of the procedure call.

In addition to the bind-class BYVAL, ECL has bind-classes SHARED, LIKE, UNEVAL, and LISTED. Bind-class SHARED indicates that a

varargs in C: the LISTED bind-class can only appear in the last formal parameter of the procedure, and that formal parameter is bound to a list of abstract syntax tree representations, one for each remaining actual parameter. ECL has an EVAL built-in function for evaluating an abstract syntax tree; alternatively, there are functions by which programmers can explore the nodes of the abstract syntax tree
and process them according to their own logic.

See also

References

PISEL = Proceedings of the international symposium on Extensible languages, Grenoble, France, 1971, published in ACM SIGPLAN Notices 6:12, December 1971.