Язык программирования и система ECL были расширяемым языком программирования высокого уровня и средой разработки, разработанной в Гарвардском университете в 1970-х годах. Название «ECL» расшифровывалось как «Extensible Computer Language» или «EClectic Language». Некоторые публикации использовали название «ECL» для всей системы и «EL / 1» (расширяемый язык) для самого языка.
ECL была интерактивной системой, в которой программы были представлены внутри системы; был совместимый компилятор и интерпретатор . Он имел ALGOL -like синтаксис и расширяемый тип данных системы, с типами данных в качестве граждан первого класса . Объектами данных были значения, а не ссылки, и соглашения о вызовах давали выбор между вызовом по значению и вызовом по ссылке для каждого аргумента.
ЭСЛО в основном используются для научных исследований и обучения в разработке языков программирования , программирование методологии (в частности , пути программирования трансформационного уточнения ), и среды программирование в Гарварде, хотя это было сказано для использования в некоторых правительственных учреждениях , а также. Впервые он был реализован на PDP-10 , а более поздняя (только интерпретируемая) реализация на PDP-11 была написана на BLISS- 11 и кросс-скомпилирована на PDP-10.
Процедуры и bind-классы
Процедура ECL для вычисления наибольшего общего делителя двух целых чисел в соответствии с алгоритмом Евклида может быть определена следующим образом:
gcd <- EXPR ( м : INT ByVal , п : INT ByVal ; INT ) НАЧИНАТЬ DECL r : INT ; ПОВТОРИТЬ г <- rem ( m , n ); г = 0 => п ; т <- п ; п <- г ; КОНЕЦ; КОНЕЦ
Это присвоение переменной процедуры константыgcd
. Линия
ВЫРАЖЕНИЕ (m: ЦЕЛОЕ ПОБЫВНОЕ; n: ЦЕЛОЕ ПОИСК; ЦЕЛОЕ)
указывает, что процедура принимает два параметра типа с INT
именем m
и n
и возвращает результат типа INT
. (Типы данных в ECL называются режимами .) Bind-class BYVAL
в каждом объявлении параметра указывает, что этот параметр передается по значению . Вычислительные компоненты программы ECL называются формами . Некоторые формы напоминают выражения других языков программирования, а другие - утверждения. Выполнение формы всегда дает значение. Конструкция REPEAT
... END
представляет собой форму цикла. Исполнение конструкции
г = 0 => п
когда форма r = 0
оценивает значение, TRUE
приводит к завершению выполнения цикла со значением n
. Значение последнего оператора в форме блока ( BEGIN
... END
) становится значением формы блока. Значение формы в объявлении процедуры становится результатом вызова процедуры.
В дополнение к связывания класса BYVAL
, ECL имеет Bind-классы SHARED
, LIKE
, UNEVAL
, и LISTED
. Bind-class SHARED
указывает, что параметр должен передаваться по ссылке . Bind-class LIKE
вызывает передачу параметра по ссылке, если это возможно, и по значению, если нет (например, если фактический параметр является чистым значением или переменной, к которой должно быть применено преобразование типа). Bind-class UNEVAL
указывает, что абстрактное синтаксическое дерево для фактического параметра должно быть передано формальному параметру; это дает программистам исключительную гибкость при изобретении собственных нотаций со своей собственной семантикой оценки для определенных параметров процедуры. Bind-class LISTED
аналогичен UNEVAL
, но предоставляет возможности, аналогичные varargs в C : LISTED
bind-class может появляться только в последнем формальном параметре процедуры, и этот формальный параметр привязан к списку представлений абстрактного синтаксического дерева , по одному для каждого оставшегося фактического параметра. ECL имеет EVAL
встроенную функцию для оценки абстрактного синтаксического дерева ; в качестве альтернативы существуют функции, с помощью которых программисты могут исследовать узлы абстрактного синтаксического дерева и обрабатывать их в соответствии со своей собственной логикой.
Смотрите также
Рекомендации
PISEL = Материалы международного симпозиума по расширяемым языкам , Гренобль, Франция, 1971 г., опубликовано в ACM SIGPLAN Notices 6 : 12, декабрь 1971 г.
- Бенджамин М. Бросгол, "Реализация типов данных ECL", PISEL, стр. 87–95.
- Томас Э. Читам младший , Гленн Х. Холлоуэй, Джуди А. Таунли, «Уточнение программ путем преобразования», Труды 5-й международной конференции по программной инженерии , 1981, стр. 430–437. ISBN 0-89791-146-6
- Гленн Х. Холлоуэй, «Интеграция интерпретатора / компилятора в ECL», PISEL, стр. 129–134.
- Чарльз Дж. Преннер, "Средства управления структурой ECL", PISEL, стр. 104–112.
- Бен Вегбрайт, "Обзор системы программирования ECL", PISEL, стр. 26–28.
- Бен Вегбрайт, «Исследования расширяемых языков программирования». Технический отчет ESD-TR-70-297. Гарвардский университет, Кембридж, Массачусетс, май 1970 г.
- Гленн Холлоуэй, Джуди Таунли, Джей Спитцен, Бен Вегбрайт, «Руководство программиста ECL», отчет 23-74, Центр исследований в области компьютерных технологий, Гарвардский университет, декабрь 1974 г.
- Ларри Дененберг, «Реализация PDP-11 ECL», Технический отчет 29-77, Центр исследований в области компьютерных технологий, Гарвардский университет, июнь 1977 г.