язык программирования ECL
![]() | Эта статья включает список литературы , связанную литературу или внешние ссылки , но ее источники остаются неясными, поскольку в ней отсутствуют встроенные цитаты . ( сентябрь 2017 г. ) |
Язык ECL и система программирования представляли собой расширяемый высокого уровня язык программирования и среду разработки , разработанные в Гарвардском университете в 1970-х годах. Название «ECL» расшифровывалось как «Расширяемый компьютерный язык» или «ЭКлектический язык». В некоторых публикациях использовалось название ECL для системы в целом и EL/1 (Расширяемый язык) для языка.
ECL представляла собой интерактивную систему, в которой были представлены программы; существовал совместимый компилятор и интерпретатор . Он имел синтаксис, подобный Алголу , и расширяемую систему типов данных , причем типы данных были первоклассными гражданами . Объекты данных были значениями, а не ссылками, и соглашения о вызовах давали выбор между вызовом по значению и вызовом по ссылке для каждого аргумента.
ECL в основном использовался для исследований и преподавания в области разработки языков программирования , методологии программирования (в частности, программирования путем трансформационного уточнения ) и сред программирования в Гарварде, хотя, как сообщается, он также использовался в некоторых правительственных учреждениях. Впервые он был реализован на PDP-10 , а более поздняя (только для интерпретации) реализация на PDP-11 была написана на BLISS -11 и кросс-компилирована на PDP-10.
Процедуры и связывающие классы
[ редактировать ]Процедура ECL для вычисления наибольшего общего делителя двух целых чисел в соответствии с алгоритмом Евклида может быть определена следующим образом:
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
Это присвоение процедурной константы переменной gcd
. Линия
EXPR(m:INT BYVAL, n: INT BYVAL; INT)
указывает, что процедура принимает два параметра типа INT
, по имени m
и n
и возвращает результат типа INT
. (Типы данных называются режимами в ECL.) Класс связывания BYVAL
в каждом объявлении параметра указывает, что этот параметр передается по значению . Вычислительные компоненты программы ECL называются формами . Некоторые формы напоминают выражения других языков программирования, а другие — операторы. Выполнение формы всегда дает значение. REPEAT
... END
конструкция представляет собой форму цикла. Исполнение конструкции
r = 0 => n
когда форма r = 0
оценивается как TRUE
приводит к завершению выполнения цикла со значением n
. Значение последнего оператора в блоке ( BEGIN
... END
) form становится значением формы блока. Значение формы в объявлении процедуры становится результатом вызова процедуры.
В дополнение к классу привязки BYVAL
, в ECL есть классы привязки SHARED
, LIKE
, UNEVAL
, и LISTED
. Bind-класс SHARED
указывает, что параметр должен передаваться по ссылке . Bind-класс LIKE
вызывает передачу параметра по ссылке, если это возможно, и по значению, если нет (например, если фактический параметр является чистым значением или переменной, к которой необходимо применить преобразование типа). Bind-класс UNEVAL
указывает, что абстрактное синтаксическое дерево для фактического параметра должно быть передано формальному параметру; это дает программистам исключительную гибкость в создании собственных обозначений со своей собственной семантикой оценки для определенных параметров процедуры. Bind-класс LISTED
похоже на UNEVAL
, но предоставляет возможности, аналогичные возможности varargs в C : LISTED
класс связывания может появляться только в последнем формальном параметре процедуры, и этот формальный параметр привязан к списку представлений абстрактного синтаксического дерева , по одному для каждого оставшегося фактического параметра. ECL имеет EVAL
встроенная функция для оценки абстрактного синтаксического дерева ; альтернативно существуют функции, с помощью которых программисты могут исследовать узлы абстрактного синтаксического дерева и обрабатывать их в соответствии со своей собственной логикой.
См. также
[ редактировать ]Ссылки
[ редактировать ]PISEL = Материалы международного симпозиума по расширяемым языкам , Гренобль, Франция, 1971 г., опубликовано в журнале ACM SIGPLAN Notes 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 г.