ECL programming language

ECL programming language

The ECL programming language and system was an extensible high-level programming language and 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 entire system and 'EL/1' (Extensible Language) for the language itself.

ECL was an interactive system where programs were represented within the system; there was a compatible compiler and interpreter. It had an ALGOL-like syntax and an extensible data type system, with data types as first-class citizens. Data objects were values, not references, and the calling conventions gave a choice between call by value and call by reference for each argument.

ECL was primarily used for research and teaching in programming language design, programming methodology (in particular programming by transformational refinement), and programming environments at Harvard, though it was said to be used at some government agencies as well. Its only implementation was 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 parameter is to be passed by reference. Bind-class LIKE causes a parameter to be passed by reference if possible and by value if not (e.g., if the actual parameter is a pure value, or a variable to which a type conversion must be applied). Bind-class UNEVAL specifies that an abstract syntax tree for the actual parameter is to be passed to the formal parameter; this provides extraordinary flexibility for programmers to invent their own notations, with their own evaluation semantics, for certain procedure parameters. Bind-class LISTED is similar to UNEVAL, but provides a capability similar to that of 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.

ee also

* Fexpr

References

PISEL = "Proceedings of the international symposium on Extensible languages", Grenoble, France, 1971, published in "ACM SIGPLAN Notices" 6:12, December 1971.
* Benjamin M. Brosgol, "An implementation of ECL data types", PISEL, pp. 87–95.
* Thomas E. Cheatham, Jr., Glenn H. Holloway, Judy A. Townley, "Program refinement by transformation", "Proceedings of the 5th international conference on Software engineering", 1981, pp. 430–437. ISBN 0-89791-146-6
* Glenn H. Holloway, "Interpreter/compiler integration in ECL", PISEL, pp. 129–134.
* Charles J. Prenner, "The control structure facilities of ECL", PISEL, pp. 104–112.
* Ben Wegbreit, "An overview of the ECL programming system", PISEL, pp. 26–28.
* Ben Wegbreit, "Studies in extensible programming languages." Technical Report ESD-TR-70-297. Harvard University, Cambridge, Massachusetts, May 1970.
* Glenn Holloway, Judy Townley, Jay Spitzen, Ben Wegbreit, "ECL Programmer's Manual", Report 23-74, Center for Research in Computing Technology, Harvard University, December 1974.


Wikimedia Foundation. 2010.

Игры ⚽ Нужна курсовая?

Look at other dictionaries:

  • Data-centric programming language — defines a category of programming languages where the primary function is the management and manipulation of data. A data centric programming language includes built in processing primitives for accessing data stored in sets, tables, lists, and… …   Wikipedia

  • ECL — may stand for: *ECL programming language, an extensible programming language developed at Harvard *Eastern Counties League, a football league in East Anglia, England *Ecole Centrale de Lyon, an engineering Grande École (university) in Lyon,… …   Wikipedia

  • Common Lisp the Language — is an influential book by Guy L. Steele about Common Lisp. Contents 1 History 1.1 Before standardization 1.2 During standardization 1.3 A …   Wikipedia

  • Object-Oriented Programming in Common Lisp: A Programmer's Guide to CLOS — (1988, Addison Wesley, ISBN 0 201 17589 4) is a book by Sonya Keene on the Common Lisp Object System. Published first in 1988, the book starts out with the elements of CLOS and develops through the concepts of data abstraction with classes and… …   Wikipedia

  • Paradigms of AI Programming: Case Studies in Common Lisp — (ISBN 1 55860 191 0) is a book by Peter Norvig about artificial intelligence programming using Common Lisp. References book homepage …   Wikipedia

  • Data Intensive Computing — is a class of parallel computing applications which use a data parallel approach to processing large volumes of data typically terabytes or petabytes in size and typically referred to as Big Data. Computing applications which devote most of their …   Wikipedia

  • Fexpr — In Lisp programming languages, a fexpr is a function whose operands are passed to it without being evaluated. When a fexpr is called, only the body of the fexpr is evaluated; no other evaluations take place except when explicitly initiated by the …   Wikipedia

  • Common Lisp — Paradigm(s) Multi paradigm: procedural, functional, object oriented, meta, reflective, generic Appeared in 1984, 1994 for ANSI Common Lisp Developer ANSI X3J13 committee Typing discipline …   Wikipedia

  • Tandem Computers — A Tandem Computers promotional mug Tandem Computers, Inc. was the dominant manufacturer of fault tolerant computer systems for ATM networks, banks, stock exchanges, telephone switching centers, and other similar commercial transaction processing… …   Wikipedia

  • Common Lisp Object System — For other uses, see Clos (disambiguation). The Common Lisp Object System (CLOS) is the facility for object oriented programming which is part of ANSI Common Lisp. CLOS is a powerful dynamic object system which differs radically from the OOP… …   Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”