Парадигма | Мультипарадигма : функциональная , императивная , логическая , мета , модульная , объектно-ориентированная , рефлексивная. |
---|---|
Семья | Лисп |
Разработано | PLT Inc. |
Разработчик | PLT Inc. |
Впервые появился | 1995 |
Стабильный выпуск | 8.0 [1] / 4 февраля 2021 г . |
Печатная дисциплина | Динамичный , статичный , сильный |
Платформа | x86 , PowerPC , SPARC , MIPS , ARM |
Операционные системы | Кроссплатформенность |
Лицензия | MIT или Apache 2.0 [2] |
Расширения имени файла | .rkt [3] |
Веб-сайт | racket-lang |
Диалекты | |
FrTime, Lazy Racket, Scribble, Typed Racket | |
Под влиянием | |
Эйфелева , [4] Схема | |
Под влиянием | |
Clojure , [5] Rust , [6] [7] Схема [8] |
Racket - это универсальный , мультипарадигмальный язык программирования, основанный на диалекте Scheme Lisp . Он разработан как платформа для разработки и реализации языков программирования . [9] В дополнение к основному языку Racket, Racket также используется для обозначения семейства языков программирования [10] и набора инструментов, поддерживающих разработку на Racket и вместе с ним. [11] Racket также используется для написания сценариев , обучения информатике и исследований.
Платформа Racket предоставляет реализацию языка Racket (включая систему времени выполнения , [12] библиотеки и JIT-компилятор ) вместе с интегрированной средой разработки DrRacket (IDE), написанной на Racket. [13] Racket используется информационно-просветительской программой ProgramByDesign , цель которой - превратить информатику в «неотъемлемую часть учебной программы по гуманитарным наукам ». [14] [15]
Основной язык Racket известен своей обширной макросистемой , которая позволяет создавать встроенные и предметно-ориентированные языки , языковые конструкции, такие как классы или модули , и отдельные диалекты Racket с разной семантикой . [16] [17] [18] [19]
Распространение платформы - это бесплатное программное обеспечение с открытым исходным кодом, распространяемое по лицензиям Apache 2.0 и MIT . [20] Расширения и пакеты, написанные сообществом, могут быть загружены в каталог пакетов Racket .
История [ править ]
Развитие [ править ]
Маттиас Фелляйзен основал PLT в середине 1990-х, сначала как исследовательскую группу, а вскоре после этого как проект, посвященный производству педагогических материалов для начинающих программистов (лекции, упражнения / проекты, программное обеспечение). В январе 1995 года группа решила разработать среду педагогического программирования на основе Scheme . Мэтью Флатт сколотил MrEd, оригинальную виртуальную машину для Racket, из libscheme, [21] wxWidgets и нескольких других бесплатных систем. [22] В последующие годы команда, в которую входили Флетт , Робби Финдлер , Шрирам Кришнамурти,, Кормак Фланаган и многие другие разработали DrScheme, среду программирования для начинающих программистов на схемах и среду исследований для мягкой печати . [13] Основной язык разработки, поддерживаемый DrScheme, назывался PLT Scheme.
Параллельно команда начала проводить семинары для учителей старших классов, обучая их дизайну программ и функциональному программированию. Полевые испытания с этими учителями и их учениками дали важные подсказки для направления развития.
В последующие годы PLT добавила в DrScheme языки обучения, алгебраический степпер [23], прозрачный цикл чтения-оценки-печати , принтер на основе конструкторов и многие другие инновации, создав среду разработки педагогических программ прикладного качества. К 2001 году основная команда (Фелляйзен, Финдлер, Флатт, Кришнамурти) также написала и опубликовала свой первый учебник « Как разрабатывать программы» , основанный на их философии преподавания.
В Манифесте Racket [9] подробно описаны принципы, лежащие в основе разработки Racket, представлена структура оценки, лежащая в основе процесса проектирования, и подробно описаны возможности для будущих улучшений.
История версий [ править ]
Первое поколение редакций схемы PLT представило возможности для программирования в целом с модулями и классами . Версия 42 представила модули - первоклассную модульную систему - в дополнение к классам для крупномасштабной разработки. [24] Система классов приобрела функции (например, интерфейсы в стиле Java ), а также потеряла несколько функций (например, множественное наследование ) в этих версиях. [16] Язык развивался на протяжении ряда следующих друг за другом версий и приобрел значительную популярность в версии 53, что привело к обширной работе и следующей версии 100, которая будет эквивалентна выпуску «1.0» в современных популярных системах версий.
Следующая крупная ревизия получила название «Версия 200», в которой была представлена новая модульная система по умолчанию, которая взаимодействует с макросами. [24] В частности, модульная система обеспечивает разделение вычислений во время выполнения и времени компиляции для поддержки «башни языков». [25] В отличие от юнитов, эти модули не являются первоклассными объектами .
Версия 300 представила поддержку Unicode, поддержку сторонних библиотек и усовершенствования системы классов. [24] Позже в 300-й серии улучшена производительность языковой среды исполнения за счет добавления JIT-компилятора и перехода на генеральную сборку мусора по умолчанию .
К следующему основному выпуску проект перешел на более обычную нумерацию версий на основе последовательностей . Версия 4.0 представила #lang
сокращение для указания языка, на котором написан модуль. Кроме того, в новой версии были введены неизменяемые пары и списки, поддержка мелкозернистого параллелизма и статически типизированный диалект. [26]
7 июня 2010 года PLT Scheme была переименована в Racket. [27] Переименование совпало с выпуском версии 5.0. Впоследствии серверная часть графического пользовательского интерфейса (GUI) была переписана в Racket с C ++ в версии 5.1 с использованием собственных наборов инструментов пользовательского интерфейса на всех платформах. [22] Версия 5.2 включала фоновый инструмент проверки синтаксиса , новую библиотеку построения графиков, библиотеку базы данных и новый расширенный REPL. [28] Версия 5.3 включала новую функцию подмодуля для необязательно загружаемых модулей, [29] новые инструменты оптимизации , библиотеку JSON и другие функции. [30]Версия 5.3.1 внесла значительные улучшения в DrRacket: фоновая проверка синтаксиса была включена по умолчанию, и был добавлен новый инструмент предварительного просмотра документации. [31]
В версии 6.0 Racket выпустила систему управления пакетами второго поколения. В рамках этой разработки основной репозиторий DrRacket и Racket был реорганизован и разделен на большой набор небольших пакетов, что позволило установить минимальный рэкет и установить только те пакеты, которые необходимы. [32]
Версия 7 Racket была выпущена с новым расширителем макросов, написанным на Racket, в рамках подготовки к поддержке перехода на систему времени выполнения Chez Scheme и поддержки нескольких систем времени выполнения. [33] [34] 19 ноября 2019 года была выпущена Racket 7.5. Лицензия на Racket 7.5 была менее строгой. Сейчас они используют либо лицензию Apache 2.0, либо лицензию MIT. [35] [36]
13 февраля 2021 года была выпущена Racket 8.0. Racket 8.0 знаменует собой первый выпуск, в котором Racket CS является реализацией по умолчанию. Racket CS быстрее, проще в обслуживании и разработке, имеет обратную совместимость с существующими программами Racket, имеет лучшую параллельную сборку мусора и обычно дает уменьшение размера сгенерированного кода на 10–30%. [37]
Особенности [ править ]
Базовый язык Racket включает макросы , модули , лексические замыкания , хвостовые вызовы , продолжения с разделителями , [38] параметры (переменные переменной), программные контракты , [39] зеленые и потоки ОС , [40] [41] [42] и многое другое. Язык также поставляется с примитивами, такими как пространства событий и хранители, которые контролируют управление ресурсами и позволяют языку действовать как операционная система для загрузки и управления другими программами. [12] Дальнейшие расширения языка создаются с помощью мощной системы макросов, которая вместе с системой модулей и настраиваемыми синтаксическими анализаторами может контролировать все аспекты языка. [43] В отличие от языков программирования, в которых отсутствуют макросистемы, большинство языковых конструкций в Racket написано на базовом языке с использованием макросов. Они включают в себя Mixin систему класса, [16] компонент (или модуль) системы в качестве выразительных как ML в непрозрачном приписывание , [17] и сопоставление с образцом .
Кроме того, в языке есть первая контрактная система для языка программирования более высокого порядка . [44] Контрактная система Racket основана на работе « Дизайн по контракту» для Eiffel и расширяет ее для работы со значениями более высокого порядка, такими как первоклассные функции , объекты, ссылочные ячейки и т. Д. Например, объект, который проверяется контрактом, может быть гарантирован для выполнения проверок контракта, когда его методы в конечном итоге вызываются.
Racket включает в себя компиляторы как байт-кода, так и JIT (JIT). Компилятор байт-кода, который переводит во внутренний формат байт-кода, который запускается виртуальной машиной Racket , с JIT-компилятором, преобразующим байт-код в собственный код на платформах x86 , x86-64 , ARM и PowerPC во время выполнения.
С 2004 года язык также поставляется с PLaneT, менеджером пакетов, который интегрирован в модульную систему, так что сторонние библиотеки можно прозрачно импортировать и использовать. Кроме того, PLaneT имеет встроенную политику управления версиями для предотвращения ада зависимостей . [45]
В конце 2014 года большая часть кода Racket была перенесена в новую систему упаковки, отдельную от основной кодовой базы. Эта новая система упаковки обслуживается клиентской программой raco . Новая система пакетов предоставляет меньше возможностей, чем PLaneT; сообщение Джея Маккарти в блоге Racket объясняет причины изменения и способы дублирования старой системы. [46]
Интегрированная расширяемость языка и макросы [ править ]
Функции , которые наиболее четко отличают ракетки от других языков в семье Лиспа являются его встроенным языком расширяемость функций , которые поддерживают строительство новых предметно-ориентированные и общее назначение языков. Функции расширяемости Racket встроены в модульную систему, чтобы обеспечить контекстно-зависимый и модульный контроль над синтаксисом. [18] Например, #%app
синтаксическая форма может быть переопределена, чтобы изменить семантику применения функции . Точно так же #%module-begin
форма позволяет произвольный статический анализ всего модуля. [18] Поскольку любой модуль может использоваться как язык, через#lang
нотации, это фактически означает, что практически любой аспект языка может быть запрограммирован и контролироваться.
Особенности расширяемости уровня модуля объединены с Схемой -like гигиенических макросистем, которая предоставляет больше возможностей , чем в Lisp система манипуляции с-выражение, [47] [48] Схема 84 - е гигиенических простираться синтаксических макросы или R5RS «s синтаксических правил . Действительно, можно сказать, что макросистема - это тщательно настроенный интерфейс прикладного программирования (API) для расширений компилятора . Используя этот API-интерфейс компилятора, программисты могут добавлять функции и целые предметно-ориентированные языки таким образом, чтобы они были полностью неотличимы от встроенных языковых конструкций.
Макро система в Ракетке была использована для построения целых языковых диалектов . Это включает в себя типизированные ракетки, которая постепенно напечатанный диалект Ракетки , что облегчает миграцию из нетипизированных к типизированному коду, [49] Ленивая Ракетка-говор с ленивой оценкой , [50] и Hackett, который сочетает в себе Haskell и ракетку. [51] Педагогический язык программирования Pyret изначально был реализован в Racket. [52] [53]
Другие диалекты включают FrTime ( функциональное реактивное программирование ), Scribble (язык документации), [54] Slideshow ( язык представления ) [55] и несколько языков для обучения. [56] [57] Основной дистрибутив Racket предоставляет библиотеки для помощи в разработке языков программирования. [18]
Такие языки не ограничиваются синтаксисом на основе s-выражений . В дополнение к обычным расширениям синтаксиса на основе чтения, Racket's #lang
позволяет программисту на языке определять любой произвольный синтаксический анализатор, например, используя библиотеку инструментов синтаксического анализатора. [58] См. Пример такого языка в разделе « Логическое программирование Racket» .
Среда программирования [ править ]
Язык платформа обеспечивает самопринятый IDE [13] назвал DrRacket, продолженной на основе веб - сервер , [59] графический пользовательский интерфейс , [22] и другие инструменты. Как жизнеспособный инструмент сценариев с библиотеками, такими как общие языки сценариев , его можно использовать для написания сценариев оболочки Unix. Он может анализировать аргументы командной строки и запускать внешние инструменты.
DrRacket IDE [ править ]
DrRacket (ранее DrScheme) широко используется среди вводных курсов по информатике, которые преподают Scheme или Racket, и известен своей простотой и привлекательностью для начинающих программистов. IDE изначально создавалась для использования с TeachScheme! проект (теперь ProgramByDesign ), информационно-пропагандистская работа Северо-Восточного университета и ряда аффилированных университетов по привлечению старшеклассников к курсам информатики на уровне колледжа.
Редактор обеспечивает выделение синтаксических ошибок и ошибок времени выполнения, сопоставление скобок, отладчик и алгебраический степпер. Его удобные для студентов функции включают поддержку нескольких «языковых уровней» (начинающий студент, средний студент и т. Д.). Он также имеет встроенную поддержку библиотеки и сложные инструменты анализа для продвинутых программистов. Кроме того, модульно-ориентированное программирование поддерживается браузером модулей, контурным представлением, интегрированным тестированием и измерениями покрытия , а также поддержкой рефакторинга . Он обеспечивает интегрированный контекстно-зависимый доступ к обширной гиперссылочной справочной системе под названием «Help Desk».
DrRacket доступен для Windows , macOS , Unix и Linux с системой X Window, и программы ведут себя одинаково на всех этих платформах.
Примеры кода [ править ]
Вот банальная программа hello world :
#lang ракетка "Hello, World!"
Запуск этой программы дает результат:
- "Привет мир!"
Вот несколько менее тривиальная программа:
#lang racket ( требуется 2htdp / изображение )( let sierpinski ([ n 8 ]) ( if ( zero? n ) ( треугольник 2 ' сплошной ' красный ) ( let ([ t ( sierpinski ( - n 1 ))]) ( заморозить ( над t ( рядом с t t )) ))))
Эта программа, взятая с веб-сайта Racket, рисует треугольник Серпинского , вложенный до глубины 8.
С помощью #lang
директивы исходный файл может быть написан на разных диалектах Racket. Вот пример факториальной программы в Typed Racket, статически типизированном диалекте Racket:
#lang typed / racket( : fact ( Integer -> Integer )) ( define ( fact n ) ( if ( zero? n ) 1 ( * n ( fact ( - n 1 )))))
Применение и практическое использование [ править ]
Помимо основы теории языков программирования , Racket разрабатывался как универсальный язык для производственных систем. Таким образом, в дистрибутиве Racket есть обширная библиотека, которая охватывает системное и сетевое программирование, веб-разработку [59], единый интерфейс для базовой операционной системы, динамический интерфейс внешних функций , [60] несколько разновидностей регулярных выражений , генераторы лексических / парсеров. , [58] логическое программирование и полный графический интерфейс .
Racket имеет несколько функций, полезных для коммерческого языка, в том числе возможность компилировать автономные исполняемые файлы под Windows, macOS и Unix, профилировщик и отладчик, включенные в интегрированную среду разработки (IDE), а также среду модульного тестирования .
Racket использовался для коммерческих проектов и веб-приложений. Ярким примером является веб-сайт Hacker News , который работает на Arc , разработанной на Racket. Naughty Dog использовала его в качестве языка сценариев в нескольких своих видеоиграх. [61]
Racket используется для обучения студентов алгебре через игровой дизайн в программе Bootstrap . [62]
Ссылки [ править ]
- ^ "Выпуск 8.0" . 4 февраля 2021 . Проверено 14 февраля 2021 года .
- ^ Тобин-Хохштадт, Сэм; Джерард, Сейдж; Дук, Джоэл; Флатт, Мэтью ; Software Freedom Conservancy ; Честек, Памела (2019-11-15). «Завершение перелицензирования Racket» . Проверено 27 декабря 2019 .
- ^ "DrRacket Files" . Проверено 21 июля 2019 .
Стандартное расширение файла программы Racket - «.rkt».
Расширения «.ss», «.scm» и «.sch» также исторически популярны.
- ^ Стрикленд, TS; Феллезисен, Маттиас (2010). «DLS 2010: Контракты для первоклассных классов» (PDF) .
- ^ Боннер-сержант, Амвросий (2012). Практическая система дополнительных типов для Clojure (тезис). Университет Западной Австралии.
- ^ "Вопросы Planet2" .
- ^ "Библиография Ржавчины" .
- ^ Спербер, Майкл; Дибвиг, Р. Кент; Флатт, Мэтью; Ван Страатен, Антон; и другие. (Август 2007 г.). «Пересмотренный отчет 6 по алгоритмической языковой схеме (R6RS)» . Руководящий комитет схемы . Проверено 13 сентября 2011 .
- ^ a b Felleisen, M .; Финдлер, РБ; Flatt, M .; Кришнамурти, S .; Barzilay, E .; McCarthy, J .; Тобин-Хохштадт, С. (2015). "Манифест ракетки" (PDF) . Труды Первого саммита по достижениям в языках программирования : 113–128.
- ^ "Диалекты ракетки и схемы" . Проверено 15 августа 2011 .
- ^ «Добро пожаловать в Рэкет» . Проверено 15 мая 2019 .
- ^ a b Flatt; Финдлер; Кришнамурти; Фелляйзен (1999). Языки программирования как операционные системы (или «Месть сына Лисп-машины») . Международная конференция по функциональному программированию.
- ^ а б в Финдлер; Клементс; Фланаган; Flatt; Кришнамурти; Стеклер; Фелляйзен (2001). "DrScheme: среда программирования для схемы" (PDF) . Журнал функционального программирования .
- ^ Felleisen; Финдлер; Flatt; Кришнамурти (2004). Проект TeachScheme!: Вычисления и программирование для каждого студента . Журнал компьютерного образования .
- ^ «Обзор» . Программа по дизайну . Проверено 17 августа 2011 .
- ^ a b c Flatt, M .; Финдлер, РБ; Фелляйзен, М. (2006). «Схема с классами, миксинами и признаками» (PDF) . Азиатский симпозиум по языкам и системам программирования .
- ^ a b Flatt, M .; Фелляйзен, М. (1998). «Юниты: Классные модули для горячих языков» . Разработка и реализация языков программирования .
- ^ a b c d Tobin-Hochstadt, S .; Сен-Амур, В .; Culpepper, R .; Flatt, M .; Фелляйзен, М. (2011). «Языки как библиотеки» (PDF) . Разработка и реализация языков программирования .
- ^ Фелляйзен, Матиас; Финдлер, Роберт Брюс; Флатт, Мэтью; Кришнамурти, Шрирам; Барзилай, Эли; Маккарти, Джей; Тобин-Хохштадт, Сэм (2018). «Программируемый язык программирования» . Коммуникации ACM . 61 (3): 62–71. DOI : 10.1145 / 3127323 . S2CID 3887010 .
- ^ «Ракетка: Лицензия на программное обеспечение» . Проверено 20 октября 2015 .
- Перейти ↑ Benson, Brent W. Jr. (26–28 октября 1994 г.). "libscheme: Схема как библиотека C" . Написано в Санта-Фе, штат Нью-Мексико. Материалы симпозиума USENIX по языкам очень высокого уровня . Беркли, Калифорния: Ассоциация USENIX. С. 7–19. ISBN 978-1880446652. Проверено 7 июля 2013 года .
- ^ a b c «Восстановление графического слоя Racket» . 2010-12-08 . Проверено 11 декабря 2017 .
- ^ Clements, J .; Flatt, M .; Фелляйзен, М. (2001). «Моделирование алгебраического шагового двигателя» (PDF) . Европейский симпозиум по языкам программирования .
- ^ a b c «Примечания к выпуску ядра Racket Core» . Архивировано из оригинала на 2013-05-23 . Проверено 15 апреля 2012 .
- ^ Flatt, М. (2002). «Составные и компилируемые макросы». Международная конференция по функциональному программированию .
- ^ "Версия схемы PLT 4.0" . 2008-06-12. Архивировано из оригинала на 2013-05-23 . Проверено 7 августа 2012 .
- ^ «От схемы PLT к ракетке» . Racket-lang.org . Проверено 17 августа 2011 .
- ^ «Ракетка 5.2» . PLT, Inc. 2011-11-09 . Проверено 16 июня 2012 .
- ^ «Подмодули» . 2012-06-03 . Проверено 7 августа 2012 .
- ^ «Ракетка 5.3» . PLT, Inc. 2012-08-07 . Проверено 7 августа 2012 .
- ^ «Ракетка 5.3.1» . PLT, Inc. 2012-11-07 . Проверено 7 ноября 2012 .
- ^ «Ракетка 6.0» . PLT, Inc. 2014-02-26 . Проверено 23 февраля 2016 .
- ^ "Racket-on-Chez Статус: январь 2018" . 2018-01-05. Архивировано из оригинала на 2018-04-13 . Проверено 13 апреля 2018 .
- ^ «Строительство Ракетки по Схеме Chez (Отчет об опыте)» (PDF) . 2019-08-01 . Проверено 25 июля 2019 .
- ^ "Ракетка 7.5 релиза" . Packt Hub . Проверено 28 ноября 2019 .
- ^ "Ракетка v7.5" . Ракетка | Блог . Проверено 28 ноября 2019 .
- ^ https://blog.racket-lang.org/2021/02/racket-v8-0.html
- ^ Flatt, M .; Ю., Г .; Финдлер, РБ; Фелляйзен, М. (2007). «Добавление элементов управления с разделителями и компонентами в среду производственного программирования» (PDF) . Международная конференция по функциональному программированию .
- ^ «Контракты» .
- ^ «Нитки» .
- ^ «Фьючерсы» .
- ^ «Места» .
- ^ Flatt, Мэтью (2012). «Создание языков в ракетке» . Коммуникации ACM . Проверено 8 апреля 2012 .
- ^ Финдлер, РБ; Фелляйзен, М. (2002). «Контракты на функции высшего порядка» (PDF) . Международная конференция по функциональному программированию .
- Перейти ↑ Matthews, J. (2006). «Развертывание компонентов с помощью PLaneT: где вы хотите?». Семинар по схемному и функциональному программированию .
- ^ "Система пакетов Racket и Планета" .
- ^ Flatt, Мэтью (2002). "Составные и компилируемые макросы, когда это нужно?" (PDF) . Международная конференция по функциональному программированию .
- ^ Flatt, Culpepper, Darais, Findler, Макросы , которые работают вместе; Привязки времени компиляции, частичное расширение и контексты определения
- ^ Tobin-Hochstadt, S .; Фелляйзен, М. (2008). «Разработка и реализация типизированной схемы». Принципы языков программирования .
- ^ Barzilay, E .; Клементс, Дж. (2005). «Лень без тяжелой работы: сочетание ленивого и строгого языков для обучения». Функциональное и декларативное программирование в образовании .
- ^ "Язык программирования Hackett" . Блог Алексиса Кинга . Проверено 16 июня 2019 .
- ^ Pyret Экипаж (24 мая 2011). «Код Пирета; или Обоснование языка программирования Пайрет» . Pyret . Проверено 16 июня 2019 .
- ^ «Программирование и языки программирования» . Индекс / . 20 сентября 2017 . Проверено 16 июня 2019 .
- ^ Flatt, M .; Barzilay, E .; Финдлер, РБ (2009). «Scribble: закрытие книги об инструментах специальной документации». Международная конференция по функциональному программированию .
- ^ Финдлер, РБ; Флатт, М. (2004). «Слайд-шоу: функциональные презентации». Международная конференция по функциональному программированию .
- ^ Felleisen, M .; Финдлер, РБ; Flatt, M .; Кришнамурти, С. (2009). «Функциональная система ввода-вывода (или развлечение для первокурсников)» (PDF) . Международная конференция по функциональному программированию .
- ^ Felleisen, M .; Финдлер, РБ; Flatt, M .; Кришнамурти, С. (2004). «Структура и интерпретация учебной программы по информатике» (PDF) . Журнал функционального программирования . 14 (4): 365–378. DOI : 10.1017 / S0956796804005076 .
- ^ a b «Инструменты парсера: парсинг в стиле lex и yacc» . Проверено 16 августа 2011 .
- ^ а б Кришнамурти, Хопкинс; Маккарти; Граунке; Петтиджон; Фелляйзен (2007). «Внедрение и использование веб-сервера схемы PLT» (PDF) . Журнал высших порядков и символического программирования . 20 (4): 431–460. DOI : 10.1007 / s10990-007-9008-у . S2CID 17731194 .
- ^ Barzilay, E .; Орловский, Д. (2004). «Внешний интерфейс для схемы PLT» (PDF) . Схема и функциональное программирование .
- ^ «Функциональные DSL mzScheme в разработке игр» . Проверено 8 мая 2012 .
- ^ "Bootstrap" . bootstrapworld.org . Проверено 11 августа 2015 .
Дальнейшее чтение [ править ]
- Felleisen et al. , 2013. Царство ракетки . Пресс без крахмала.
- Felleisen et al. , 2003. Как разрабатывать программы . MIT Press.
Внешние ссылки [ править ]
- Официальный веб-сайт
1955 г. | 1960 г. | 1965 г. | 1970 г. | 1975 г. | 1980 г. | 1985 г. | 1990 г. | 1995 г. | 2000 г. | 2005 г. | 2010 г. | 2015 г. | 2020 г. | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
LISP 1, 1.5, LISP 2 (заброшен) | ||||||||||||||
Маклисп | ||||||||||||||
Интерлисп | ||||||||||||||
Лисп-машина Лисп | ||||||||||||||
Схема | R5RS | R6RS | R7RS маленький | |||||||||||
Ноль | ||||||||||||||
Ференц Лисп | ||||||||||||||
Common Lisp | ||||||||||||||
Le Lisp | ||||||||||||||
Т | ||||||||||||||
Chez Scheme | ||||||||||||||
Emacs Lisp | ||||||||||||||
AutoLISP | ||||||||||||||
ПикоЛисп | ||||||||||||||
EuLisp | ||||||||||||||
ISLISP | ||||||||||||||
OpenLisp | ||||||||||||||
Схема PLT | Ракетка | |||||||||||||
GNU Guile | ||||||||||||||
Визуальный LISP | ||||||||||||||
Clojure | ||||||||||||||
Дуга | ||||||||||||||
LFE | ||||||||||||||
Hy |