История языка программирования Scheme

редактировать

История языка программирования Схема началась с развития более ранних членов семейства языков Лисп во второй половине двадцатого века. В период проектирования и разработки Scheme языковые дизайнеры Гай Л. Стил и Джеральд Джей Сассман выпустили влиятельную серию статей Массачусетского технологического института (MIT) Записки AI, известные как Лямбда-документы (1975–1980). Это привело к росту популярности языка и наступлению эры стандартизации с 1990 года. Большая часть истории Scheme задокументирована самими разработчиками.

Содержание
  • 1 Предыстория
    • 1.1 Лисп
    • 1.2 АЛГОЛ
  • 2 Карл Хьюитт, модель Актера, и рождение Scheme
  • 3 Лямбда-документы
    • 3.1 Список статей
  • 4 Влияние
  • 5 Стандартизация
  • 6 Хронология
  • 7 Ссылки
Предыстория

На разработку схемы сильно повлияли двумя предшественниками, которые сильно отличались друг от друга: Lisp предоставлял свою общую семантику и синтаксис, а ALGOL предоставлял свою лексическую область видимости и блочную структуру. Схема - это диалект Лиспа, но Лисп эволюционировал; диалекты Lisp, из которых произошла Scheme, - хотя в то время они были мейнстримом - сильно отличаются от любого современного Lisp.

Лисп

Лисп был изобретен Джоном Маккарти в 1958 году, когда он работал в Массачусетском технологическом институте (MIT). Маккарти опубликовал свой проект в статье Communications of the ACM в 1960 году, озаглавленной «Рекурсивные функции символьных выражений и их машинное вычисление, часть I» (часть II так и не была опубликована). Он показал, что с помощью нескольких простых операторов и обозначения функций можно построить полный по Тьюрингу язык для алгоритмов.

Использование s-выражений, которые характеризуют синтаксис Lisp, изначально планировалось как временная мера в ожидании разработки языка, использующего то, что Маккарти назвал «m-выражениями ". Например, m-выражение car [cons [A, B]]эквивалентно s-выражению (car (cons A B)). Однако S-выражения оказались популярными, и многие попытки реализовать m-выражения не увенчались успехом.

Первая реализация Lisp была на IBM 704 от Стива Рассела, который прочитал статью Маккарти и закодировал описанную им функцию eval в машинном коде. Знакомые (но озадачивающие новичков) имена CAR и CDR, используемые в Лиспе для описания головного элемента списка и его хвоста, произошли от двух команд языка ассемблера IBM 704 : Регистр адреса и содержимое регистра декремента, каждый из которых возвращал содержимое 15-битного регистра, соответствующего сегментам 36-битного инструкции IBM 704 слова.

Первый полный компилятор Lisp, написанный на Лиспе, был реализован в 1962 году Тимом Хартом и Майком Левиным из Массачусетского технологического института. Этот компилятор представил Lisp-модель инкрементальной компиляции, в которой скомпилированные и интерпретируемые функции могут свободно смешиваться.

Два варианта Lisp, наиболее значимые для разработки Scheme, были разработаны в MIT: LISP 1.5, разработанный Маккарти и другими, и Maclisp, разработанный для Project MAC, прямой потомок LISP 1.5. который работал в системах PDP-10 и Multics.

С момента своего создания Lisp был тесно связан с сообществом исследователей искусственного интеллекта (AI), особенно по PDP-10. На размер 36-битного слова PDP-6 и PDP-10 повлияла полезность наличия двух Lisp 18-битных указателей в одном слове.

АЛГОЛ

АЛГОЛ 58, первоначально называвшийся IAL для «Международного алгоритмического языка», был разработан совместно комитетом европейских и американских компьютерных ученых на встрече в 1958 году в ETH Цюрих. АЛГОЛ 60, более поздняя версия, разработанная на собрании ALGOL 60 в Париже и теперь обычно называемая АЛГОЛ, стал стандартом для публикации алгоритмов и оказал глубокое влияние на развитие языков в будущем. несмотря на отсутствие коммерческого успеха языка и его ограничения. Тони Хоар заметил: «Это язык, настолько опередивший свое время, что он стал не только улучшением своих предшественников, но и почти всех его преемников».

АЛГОЛ представил использование блочной структуры и лексической области. Он также был известен своим сложным вызовом по имени механизм передачи параметров по умолчанию, который был определен таким образом, чтобы требовать текстовой замены выражения, представляющего рабочий параметр, вместо формального параметра во время выполнения процедуры или функции., заставляя его повторно оценивать каждый раз, когда на него ссылаются во время выполнения. Разработчики ALGOL разработали механизм, который они назвали преобразователем, который захватывает контекст рабочего параметра, позволяя оценивать его во время выполнения процедуры или функции.

Карл Хьюитт, модель Актера и рождение Схемы

В 1971 году Сассман, Дрю Макдермотт и Юджин Чарняк разработали систему называется Micro-Planner, которая была частичной и несколько неудовлетворительной реализацией амбициозного проекта Planner Карла Хьюитта. Сассман и Хьюитт вместе с другими работали над Muddle, позже переименованным в MDL, расширенным Lisp, который составлял компонент проекта Хьюитта. Дрю Макдермотт и Сассман в 1972 году разработали язык Conniver на основе Lisp, который пересмотрел использование автоматического поиска с возвратом в Planner, которое, по их мнению, было непродуктивным. Хьюитт сомневался, что "волосатая структура управления" в Conniver была решением проблем с Planner. Пэт Хейс заметил: «Их решение [Суссмана и Макдермотта], чтобы предоставить пользователю доступ к примитивам реализации Planner, тем не менее, является чем-то вроде ретроградного шага (какова семантика Conniver?)»

В ноябре 1972 года Хьюитт и его ученики изобрели Актерскую модель вычислений как решение проблем с Planner. Была разработана частичная реализация Актеров под названием Planner-73 (позже названная PLASMA). Стил, тогда аспирант Массачусетского технологического института, следил за этими разработками, и он и Сассман решили реализовать версию модели Actor в своем собственном «маленьком Лиспе», разработанном на Maclisp, чтобы лучше понять модель.. Используя эту основу, они затем начали разрабатывать механизмы для создания акторов и отправки сообщений.

Использование лексической области в PLASMA было похоже на лямбда-исчисление. Суссман и Стил решили попытаться смоделировать актеров с помощью лямбда-исчисления. Они назвали свою систему моделирования Schemer, в конечном итоге изменив ее на Scheme, чтобы соответствовать шестизначному ограничению для файловой системы ITS в их DEC PDP-10. Вскоре они пришли к выводу, что Актеры - это, по сути, замыкания, которые никогда не возвращаются, а вместо этого вызывают продолжение, и поэтому они решили, что закрытие и Актер были для целей их расследования по существу идентичными концепциями. Они устранили то, что они считали избыточным кодом, и в этот момент обнаружили, что они написали очень маленький и способный диалект Лиспа. Хьюитт по-прежнему критически относился к «сложной структуре управления» в схеме и считал используемые примитивы (например, START! PROCESS, STOP! PROCESSи EVALUATE! UNINTERRUPTIBLY) в реализации Scheme - шаг назад.

25 лет спустя, в 1998 году, Сассман и Стил подумали, что минимализм Scheme не является сознательной целью дизайна, а скорее непреднамеренным результатом процесса проектирования. «Мы на самом деле пытались построить что-то сложное и случайно обнаружили, что случайно разработали что-то, что соответствовало всем нашим целям, но было намного проще, чем мы планировали... мы поняли, что лямбда-исчисление - небольшой простой формализм - может служат ядром мощного и выразительного языка программирования ».

С другой стороны, Хьюитт оставался критичным по отношению к лямбда-исчислению как к основе для написания вычислений« Фактическая ситуация такова, что λ-исчисление способно выражая некоторые виды последовательных и параллельных управляющих структур, но, в целом, не параллелизм, выраженный в модели акторов. С другой стороны, модель акторов способна выразить все в λ-исчислении и многом другом ». Он также критически относился к аспектам схемы, вытекающим из лямбда-исчисления, таким как использование функций продолжения и отсутствие исключений.

Лямбда-документы

Между 1975 и 1980 годами работали Сассман и Стил. по развитию своих идей об использовании лямбда-исчисления, продолжений и других передовых концепций программирования, таких как оптимизация хвостовой рекурсии, и опубликовали их в серии AI Memos, которые вместе стали называть Lambda Papers.

Список статей

  • 1975: Схема: Интерпретатор для расширенного лямбда-исчисления
  • 1976: Lambda: The Ultimate Imperative
  • 1976: Lambda: The Ultimate Декларативный
  • 1977: развенчание мифа о «дорогостоящем вызове процедур» или реализациях вызовов процедур, признанных вредными, или Lambda: The Ultimate GOTO
  • 1978: искусство интерпретатора или модульность Комплекс (части ноль, один и два)
  • 1978: RABBIT: компилятор для SCHEME
  • 1979: разработка LISP-ориентированного Pro cessors, или СХЕМА: диалект LISP, или конечные воспоминания, считающиеся вредными, или LAMBDA: окончательный код операции
  • 1980: Оптимизация компилятора на основе просмотра LAMBDA как RENAME + GOTO
  • 1980: Дизайн Процессор на основе Лиспа
Influence

Схема была первым диалектом Лиспа, который выбрал лексическую область видимости. Это был также один из первых языков программирования после определения языка Рейнольда, который поддерживал первый класс продолжения. Он оказал большое влияние на усилия, приведшие к разработке родственного ему языка Common Lisp, участником которого был Гай Стил.

Стандартизация

Язык схемы стандартизирован в официальном стандарте Института инженеров по электротехнике и электронике (IEEE) и стандарте де-факто, который называется Пересмотренный отчет по схеме алгоритмического языка (RnRS). Наиболее широко применяемым стандартом является R5RS (1998), а в 2007 году был ратифицирован новый стандарт R6RS.

Timeline
Ссылки
Последняя правка сделана 2021-05-23 03:06:02
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте