Ракетка (язык программирования) - Racket (programming language)
DrRacket на Ubuntu | |
Парадигма | Мультипарадигма: функциональный, императив, логика, мета, модульный, объектно-ориентированный, отражающий |
---|---|
Семья | Лисп |
Разработано | PLT Inc. |
Разработчик | PLT Inc. |
Впервые появился | 1995 |
Стабильный выпуск | 7.9[1] / 2 ноября 2020 |
Печатная дисциплина | Динамический, статический, сильный |
Платформа | x86, PowerPC, SPARC, MIPS, РУКА |
Операционные системы | Кроссплатформенность |
Лицензия | Массачусетский технологический институт или Apache 2.0[2] |
Расширения имени файла | .rkt[3] |
Интернет сайт | рэкет |
Диалекты | |
FrTime, Lazy Racket, Scribble, Typed Racket | |
Под влиянием | |
Эйфель,[4] Схема | |
Под влиянием | |
Clojure,[5] Ржавчина,[6][7] Схема[8] |
Ракетка это общее назначение, язык программирования с несколькими парадигмами на основе Схема диалект Лисп. Он разработан как платформа для дизайн языка программирования и реализация.[9] Помимо основного языка Racket, Ракетка также используется для обозначения семейства языков программирования[10] и набор инструментов, поддерживающих разработку на Racket и вместе с ним.[11] Ракетка также используется для сценарии, Информатика образование и исследования.
Платформа Racket предоставляет реализацию языка Racket (включая система времени выполнения,[12] библиотеки и JIT-компилятор ) вместе с DrRacket интегрированная среда развития (IDE) написано на Racket.[13] Ракетка используется ProgramByDesign информационно-пропагандистская программа, цель которой - превратить Информатика в "незаменимую часть гуманитарные науки учебный план ".[14][15]
Основной язык Racket известен своими обширными макрос система, позволяющая создавать встроенные и предметно-ориентированные языки, языковые конструкции, такие как классы или модули, и отдельные диалекты Racket с разными семантика.[16][17][18][19]
Распределение платформы бесплатное программное обеспечение с открытым исходным кодом распространяется в рамках Apache 2.0 и Лицензии MIT.[20] Расширения и пакеты, написанные сообществом, могут быть загружены на сайт Racket. каталог пакетов.
История
Разработка
Маттиас Фелляйзен основал PLT в середине 1990-х, сначала как исследовательскую группу, а вскоре после этого как проект, посвященный производству педагогический материалы для начинающих программистов (лекции, упражнения / проекты, ПО). В январе 1995 года группа решила разработать среду педагогического программирования на основе Схема. Мэтью Флэтт сколотил MrEd, оригинал виртуальная машина для Racket из libscheme,[21] wxWidgets и несколько других бесплатных систем.[22] В последующие годы команда, в которую входил Флетт, Робби Финдлер, Шрирам Кришнамурти, Кормак Фланаган и многие другие разработали DrScheme, среду программирования для начинающих программистов на схемах и среду исследований для мягкий набор текста.[13] Основной язык разработки, поддерживаемый DrScheme, назывался PLT Scheme.
Параллельно команда начала проводить семинары для учителей старших классов, обучая их разработке программ и функциональному программированию. Полевые тесты с этими учителями и их учениками дали важные подсказки для направления развития.
В последующие годы PLT добавила языки обучения, алгебраический степпер,[23] прозрачный цикл чтения – оценки – печати, принтер на основе конструктора и многие другие инновации DrScheme, создающие прикладную среду разработки педагогических программ. К 2001 году основная команда (Фелляйзен, Финдлер, Флатт, Кришнамурти) также написала и опубликовала свой первый учебник. Как разрабатывать программы, основанные на их философии обучения.
Манифест ракетки[9] подробно описывает принципы, лежащие в основе разработки Racket, представляет структуру оценки, лежащую в основе процесса проектирования, и подробно описывает возможности для будущих улучшений.
История версий
Первое поколение пересмотренных схем PLT представило функции для программирование в большом с обоими модули и классы. Версия 42 представила модули - первоклассную модульную систему - в дополнение к классам для крупномасштабной разработки.[24] Система классов приобрела особенности (например, Ява -стиль интерфейсы ), а также потерял несколько функций (например, множественное наследование ) во всех этих версиях.[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]
Функции
Основной язык Racket включает макросы, модули, лексические замыкания, хвостовые звонки, ограниченные продолжения,[37] параметры (переменные жидкости), контракты на программное обеспечение,[38] зеленый и ОС потоки,[39][40][41] и больше. В языке также есть примитивы, такие как пространства событий и хранители, которые контролируют управление ресурсами и позволяют языку действовать как Операционная система для загрузки и управления другими программами.[12] Дальнейшие расширения языка создаются с помощью мощной системы макросов, которая вместе с системой модулей и настраиваемыми синтаксическими анализаторами может управлять всеми аспектами языка.[42] В отличие от языков программирования, в которых отсутствуют макросистемы, большинство языковых конструкций в Racket написано на базовом языке с использованием макросов. К ним относятся миксин система классов,[16] компонентная (или модульная) система столь же выразительна, как ML непрозрачное приписывание,[17] и сопоставление с образцом.
Кроме того, в языке есть первая контрактная система для программирование высшего порядка язык.[43]Система контрактов Racket вдохновлена Дизайн по контракту работать на Эйфель и расширяет его для работы с значениями более высокого порядка, такими как первоклассные функции, объекты, ссылка ячеек и так далее. Например, объект, который проверяется контрактом, может быть гарантирован для выполнения проверок контракта, когда его методы в конечном итоге вызываются.
Ракетка включает в себя оба байт-код и JIT (JIT) компиляторы. Компилятор байт-кода, который переводит во внутренний формат байт-кода, который запускается Racket. виртуальная машина, с компилятором JIT, переводящим байт-код в собственный код на x86, x86-64, РУКА и PowerPC платформы во время выполнения.
С 2004 года язык также поставляется с PLaneT, менеджером пакетов, который интегрирован в модульную систему, так что сторонние библиотеки можно прозрачно импортировать и использовать. Также в PLaneT есть встроенный управление версиями политика предотвращения ад зависимости.[44]
В конце 2014 года большая часть кода Racket была перенесена в новую систему упаковки, отдельную от основной кодовой базы. Эта новая система упаковки обслуживается клиентской программой под названием рако. Новая система пакетов предоставляет меньше возможностей, чем PLaneT; сообщение Джея Маккарти в блоге Racket объясняет причину изменения и способы дублирования старой системы.[45]
Интегрированная расширяемость языка и макросы
Особенности, которые наиболее четко отличает Racket от других языков семейства Lisp, - это интегрированный язык. расширяемость функции, поддерживающие создание новых специфичный для домена и общее назначение языков. Функции расширяемости Racket встроены в модульную систему, чтобы обеспечить контекстно-зависимый и модульный контроль над синтаксисом.[18] Например, #%приложение
синтаксическая форма может быть переопределена, чтобы изменить семантику приложение-функция. Точно так же #% module-begin
form позволяет произвольный статический анализ всего модуля.[18] Поскольку любой модуль может использоваться как язык, через #lang
нотации, это означает, что практически любой аспект языка можно программировать и контролировать.
Возможности расширяемости на уровне модуля сочетаются с Схема -подобная гигиеническая макросистема, которая предоставляет больше возможностей, чем Лиспа система манипулирования s-экспрессией,[46][47] Схема 84-х гигиенический макросы с расширенным синтаксисом или R5RS с синтаксические правила. Действительно, будет справедливо сказать, что макросистема - это тщательно настроенная интерфейс прикладного программирования (API) для компилятор расширения. Используя этот API компилятора, программисты могут добавлять функции и все предметно-ориентированные языки таким образом, чтобы они были полностью неотличимы от встроенных языковых конструкций.
В макрос система в Racket была использована для создания всего языка диалекты. Это включает Typed Racket, который представляет собой постепенно типизированный диалект Racket, который упрощает переход от нетипизированный набранному коду,[48] Lazy Racket - диалект с ленивая оценка,[49] и Hackett, сочетающий Haskell и Racket.[50] Педагогический язык программирования Pyret изначально был реализован в Racket.[51][52]
Другие диалекты включают FrTime (функциональное реактивное программирование ), Scribble (язык документации),[53] Слайд-шоу (презентация язык),[54] и несколько языков для обучения.[55][56] Базовый дистрибутив Racket предоставляет библиотеки, помогающие создавать новые языки программирования.[18]
Такие языки не ограничиваются s-выражение синтаксис на основе. В дополнение к обычным расширениям синтаксиса на основе чтения, Racket's #lang
позволяет программисту на языке определять любой произвольный синтаксический анализатор, например, с помощью библиотеки инструментов синтаксического анализатора.[57] Видеть Программирование логики ракетки для примера такого языка.
Среда программирования
Языковая платформа предоставляет самостоятельный IDE[13] названный DrRacket, основанный на продолжении веб сервер,[58] а графический интерфейс пользователя,[22] и другие инструменты. Racket также является жизнеспособным инструментом создания сценариев и может использоваться для создания сценариев оболочки Unix. Он может разбирать аргументы командной строки, запускать внешние инструменты и включать библиотеки, подобные всем распространенным языки сценариев.
DrRacket IDE
DrRacket (ранее DrScheme) широко используется среди вводных курсов по информатике, которые преподают Scheme или Racket, и хвалят за свою простоту и привлекательность для начинающих программистов. IDE изначально создавалась для использования с TeachScheme! проект (сейчас ProgramByDesign ), пропагандистская работа Северо-Восточный университет и ряд аффилированных университетов для привлечения старшеклассников к курсам информатики на уровне колледжа.
Редактор предоставляет выделение источника для синтаксических ошибок и ошибок времени выполнения, соответствие скобок, отладчик и алгебраический степпер. Его удобные для студентов функции включают поддержку нескольких «языковых уровней» (начинающий студент, средний студент и т. Д.). Он также имеет встроенную поддержку библиотеки и сложные анализ инструменты для продвинутых программистов. Дальше, модульно-ориентированное программирование поддерживается с помощью браузера модулей, контурный вид, интегрированный тестирование и покрытие измерения и рефакторинг поддерживать. Он обеспечивает интегрированный контекстно-зависимый доступ к обширной гиперссылочной справочной системе под названием «Help Desk».
DrRacket доступен для Windows, macOS, Unix, и Linux с X Window System и программы ведут себя одинаково на всех этих платформах.
Примеры кода
Вот банальный Привет, мир программа:
#lang ракетка"Привет, мир!"
Запуск этой программы дает результат:
- "Привет, мир!"
Вот несколько менее тривиальная программа:
#lang ракетка(требовать 2htdp / изображение)(позволять Серпинский ([п 8]) (если (нуль? п) (треугольник 2 'твердый 'красный) (позволять ([т (Серпинский (- п 1))]) (заморозить (над т (рядом т т))))))
Эта программа, взятая с сайта Racket, рисует Треугольник Серпинского, вложен до глубины 8.
С использованием #lang
директиве, исходный файл может быть написан на разных диалектах Racket. Вот пример факторной программы в Typed Racket, статически типизированный диалект Racket:
#lang печатный / ракетка(: факт (Целое число -> Целое число))(определять (факт п) (если (нуль? п) 1 (* п (факт (- п 1)))))
Приложения и практическое использование
Помимо основы в теория языков программирования, Racket был разработан для использования в качестве языка общего назначения в производственных системах. Таким образом, в дистрибутиве Racket есть обширная библиотека, охватывающая системное и сетевое программирование, веб-разработку,[58] единый интерфейс для базовой операционной системы, динамический интерфейс внешней функции,[59] несколько вкусов обычные выражения, генераторы лексера / парсера,[57] логическое программирование, и полный GUI рамки.
Racket имеет несколько функций, полезных для коммерческого языка, в том числе возможность создавать автономные исполняемые файлы под Windows, macOS и Unix, профайлер и отладчик включены в интегрированная среда развития (IDE) и модульное тестирование рамки.
Racket использовался для коммерческих проектов и веб-приложений. Ярким примером является Хакерские новости веб-сайт, который работает на Дуга, который разработан в Racket. Игривый щенок использовал его как язык сценариев в нескольких своих видеоиграх.[60]
Ракетка используется для обучения студентов алгебре через игровой дизайн в Программа Bootstrap.[61]
Рекомендации
- ^ «Ракетка v7.9». Блог Racket. 2 ноября 2020 г.. Получено 2 ноября 2020.
- ^ Тобин-Хохштадт, Сэм; Джерард, Сейдж; Дук, Джоэл; Флэтт, Мэтью; Сохранение свободы программного обеспечения; Честек, Памела (2019-11-15). "Завершение повторного лицензирования Racket". Получено 2019-12-27.
- ^ "DrRacket Files". Получено 21 июля 2019.
Стандартное расширение файла программы Racket - «.rkt». Расширения ".ss", ".scm" и ".sch" также исторически популярны.
- ^ Стрикленд, Т.С.; Феллезисен, Маттиас (2010). «DLS 2010: Контракты на первоклассные классы» (PDF).
- ^ Боннэр-сержант, Амвросий (2012). Практическая система дополнительных типов для Clojure (Тезис). Университет Западной Австралии.
- ^ "Planet2 questions".
- ^ "Библиография Rust".
- ^ Спербер, Майкл; Дибвиг, Р. Кент; Флэтт, Мэтью; Ван Страатен, Антон; и другие. (Август 2007 г.). "Пересмотренный6 Отчет об алгоритмической языковой схеме (R6RS) ». Руководящий комитет схемы. Получено 2011-09-13.
- ^ а б Felleisen, M .; Финдлер, Р. Б.; Flatt, M .; Krishnamurthi, S .; Barzilay, E .; McCarthy, J .; Тобин-Хохштадт, С. (2015). "Манифест ракетки" (PDF). Труды Первого саммита по достижениям в языках программирования: 113–128.
- ^ «Диалекты ракетки и схемы». Получено 2011-08-15.
- ^ "Добро пожаловать в Ракет". Получено 2019-05-15.
- ^ а б Flatt; Финдлер; Кришнамурти; Фелляйзен (1999). Языки программирования как операционные системы (или Месть сына Лисп-машины). Международная конференция по функциональному программированию.
- ^ а б c Финдлер; Клементс; Фланаган; Flatt; Кришнамурти; Стеклера; Фелляйзен (2001). "DrScheme: среда программирования для схемы" (PDF). Журнал функционального программирования.
- ^ Felleisen; Финдлер; Flatt; Кришнамурти (2004). «Проект TeachScheme!: Вычисления и программирование для каждого ученика». Журнал компьютерных наук образования.
- ^ "Обзор". Программа по дизайну. Получено 2011-08-17.
- ^ а б c Flatt, M .; Финдлер, Р. Б .; Фелляйзен, М. (2006). «Схема с классами, миксинами и чертами» (PDF). Азиатский симпозиум по языкам и системам программирования.
- ^ а б Flatt, M .; Фелляйзен, М. (1998). «Юниты: крутые модули для горячих языков». Разработка и реализация языков программирования.
- ^ а б c d Tobin-Hochstadt, S .; Сен-Амур, В .; Culpepper, R .; Flatt, M .; Фелляйзен, М. (2011). «Языки как библиотеки» (PDF). Разработка и реализация языков программирования.
- ^ Фелляйзен, Матиас; Финдлер, Роберт Брюс; Флэтт, Мэтью; Кришнамурти, Шрирам; Барзилай, Эли; Маккарти, Джей; Тобин-Хохштадт, Сэм (2018). «Программируемый язык программирования». Коммуникации ACM. 61 (3): 62–71. Дои:10.1145/3127323. S2CID 3887010.
- ^ «Ракетка: лицензия на программное обеспечение». Получено 2015-10-20.
- ^ Бенсон, Брент В. мл. (26–28 октября 1994 г.). "libscheme: Схема как библиотека C". Написано в Санта-Фе, штат Нью-Мексико. Материалы симпозиума USENIX по языкам очень высокого уровня. Беркли, Калифорния: Ассоциация USENIX. С. 7–19. ISBN 978-1880446652. Получено 7 июля 2013.
- ^ а б c «Восстановление графического слоя Racket». 2010-12-08. Получено 2017-12-11.
- ^ Clements, J .; Flatt, M .; Фелляйзен, М. (2001). «Моделирование алгебраического шагового двигателя» (PDF). Европейский симпозиум по языкам программирования.
- ^ а б c «Примечания к выпуску Racket Core». Архивировано из оригинал на 2013-05-23. Получено 2012-04-15.
- ^ Флатт, М. (2002). «Составные и компилируемые макросы». Международная конференция по функциональному программированию.
- ^ «Схема PLT версии 4.0». 2008-06-12. Архивировано из оригинал на 2013-05-23. Получено 2012-08-07.
- ^ «От схемы PLT к ракетке». Racket-lang.org. Получено 2011-08-17.
- ^ «Ракетка 5.2». PLT, Inc. 09.11.2011. Получено 2012-06-16.
- ^ «Подмодули». 2012-06-03. Получено 2012-08-07.
- ^ «Ракетка 5,3». PLT, Inc. 7 августа 2012 г.. Получено 2012-08-07.
- ^ «Ракетка 5.3.1». PLT, Inc. 7 ноября 2012 г.. Получено 2012-11-07.
- ^ «Ракетка 6.0». PLT, Inc. 26 февраля 2014 г.. Получено 2016-02-23.
- ^ "Racket-on-Chez Статус: январь 2018". 2018-01-05. Архивировано из оригинал на 2018-04-13. Получено 2018-04-13.
- ^ «Строительство Ракетки по Схеме Chez (Отчет об опыте)» (PDF). 2019-08-01. Получено 2019-07-25.
- ^ «Ракетка 7.5 релиза». Packt Hub. Получено 2019-11-28.
- ^ «Ракетка v7.5». Ракетка | Блог. Получено 2019-11-28.
- ^ Flatt, M .; Ю., Г .; Финдлер, Р. Б .; Фелляйзен, М. (2007). «Добавление разделенных и составных элементов управления в среду производственного программирования» (PDF). Международная конференция по функциональному программированию.
- ^ «Контракты».
- ^ "Потоки".
- ^ «Фьючерсы».
- ^ "Места".
- ^ Флатт, Мэтью (2012). «Создание языков в Racket». Коммуникации ACM. Получено 2012-04-08.
- ^ Финдлер, Р. Б .; Фелляйзен, М. (2002). «Контракты на функции высшего порядка» (PDF). Международная конференция по функциональному программированию.
- ^ Мэтьюз, Дж. (2006). «Развертывание компонентов с помощью PLaneT: где вы хотите?». Семинар по схемному и функциональному программированию.
- ^ «Система пакетов Racket и Планета».
- ^ Флатт, Мэтью (2002). «Составные и компилируемые макросы, когда это нужно?» (PDF). Международная конференция по функциональному программированию.
- ^ Флэтт, Калпеппер, Дарэ, Финдлер, Макросы, которые работают вместе; Привязки времени компиляции, частичное расширение и контексты определения
- ^ Tobin-Hochstadt, S .; Фелляйзен, М. (2008). «Разработка и реализация типизированной схемы». Принципы языков программирования.
- ^ Barzilay, E .; Клементс, Дж. (2005). «Лень без тяжелой работы: сочетание ленивого и строгого языков для обучения». Функциональное и декларативное программирование в образовании.
- ^ "Язык программирования Hackett". Блог Алексиса Кинга. Получено 16 июн 2019.
- ^ The Pyret Crew (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. Дои:10.1017 / S0956796804005076.
- ^ а б "Инструменты синтаксического анализатора: синтаксический анализ в стиле lex и yacc". Получено 2011-08-16.
- ^ а б Кришнамурти, Хопкинс; Маккарти; Граунке; Петтиджон; Фелляйзен (2007). «Внедрение и использование веб-сервера схемы PLT» (PDF). Журнал высшего порядка и символического программирования. 20 (4): 431–460. Дои:10.1007 / s10990-007-9008-у. S2CID 17731194.
- ^ Barzilay, E .; Орловский, Д. (2004). «Внешний интерфейс для схемы PLT» (PDF). Схема и функциональное программирование.
- ^ «Функциональные DSL mzScheme в разработке игр». Получено 2012-05-08.
- ^ "Бутстрап". bootstrapworld.org. Получено 2015-08-11.
дальнейшее чтение
- Felleisen и другие., 2013. Царство Ракетки. Пресс без крахмала.
- Felleisen и другие., 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 |