Ракетка (язык программирования)
![]() | |
![]() DrRacket в Linux | |
Парадигма | Мультипарадигмальность : функциональная , императивная , логическая , мета , модульная , объектно-ориентированная , рефлексивная. |
---|---|
Семья | Лисп |
Разработано | ПЛТ Инк. |
Разработчик | ПЛТ Инк. |
Впервые появился | 28 января 1995 г |
Стабильная версия | 8.13 [1] ![]() |
Дисциплина набора текста | Динамичный , статичный , сильный |
Платформа | x86 , PowerPC , SPARC , MIPS , ARM |
ТЫ | Кросс-платформенный |
Лицензия | MIT или Apache 2.0 [2] |
Расширения имен файлов | .rkt [3] |
Веб-сайт | длинный как ракетка |
Основные реализации | |
Racket , RacketScript Компилятор Racket в JavaScript (ES6), Pycket — реализация Racket с использованием RPython . | |
Диалекты | |
Напечатанная ракетка, FrTime, Ленивая ракетка, Каракули | |
Под влиянием | |
Эйфель , [4] Схема | |
Под влиянием | |
Клююр , [5] Ржавчина , [6] [7] Схема (R6RS) [8] |
Racket — это общего назначения многопарадигмальный язык программирования . Язык Racket — это современный диалект Lisp и потомок Scheme . Он разработан как платформа для разработки и реализации языков программирования . [9] В дополнение к основному языку Racket, Racket также используется для обозначения семейства языков программирования. [10] и набор инструментов, поддерживающих разработку на Racket и с его помощью. [11] Racket также используется для написания сценариев , обучения информатике и исследований.
Платформа Racket обеспечивает реализацию языка Racket (включая систему времени выполнения , [12] библиотеки и компилятор, поддерживающий несколько режимов компиляции: машинный код, машинно-независимый, интерпретируемый и JIT), а также интегрированную среду разработки (IDE) DrRacket, написанную на Racket. [13] Racket используется в рамках информационно-пропагандистской программы ProgramByDesign , целью которой является превратить информатику в «необходимую часть по гуманитарным наукам учебной программы ». [14] [15]
Базовый язык Racket известен своей обширной системой макросов , которая позволяет создавать встроенные и предметно-ориентированные языки , языковые конструкции, такие как классы или модули , а также отдельные диалекты Racket с различной семантикой . [16] [17] [18] [19]
Платформа представляет собой бесплатное программное обеспечение с открытым исходным кодом, распространяемое по лицензиям Apache 2.0 и MIT . [20] Расширения и пакеты, написанные сообществом, можно загружать в каталог пакетов Racket .
История
[ редактировать ]Разработка
[ редактировать ]Маттиас Феллейзен основал PLT Inc. в середине 1990-х годов сначала как исследовательскую группу, а вскоре как проект, посвященный производству педагогических материалов для начинающих программистов (лекции, упражнения/проекты, программное обеспечение). В январе 1995 года группа решила разработать среду педагогического программирования на основе Scheme . Мэтью Флэтт собрал MrEd, оригинальную виртуальную машину для Racket, из libscheme, [21] wxWidgets и несколько других бесплатных систем. [22] В последующие годы команда, в которую входили Флатт, Робби Финдлер , Шрирам Кришнамурти , Кормак Фланаган и многие другие, создала DrScheme, среду программирования для начинающих программистов Scheme и исследовательскую среду для мягкой печати . [13] Основной язык разработки, который поддерживал DrScheme, назывался PLT Scheme.
Параллельно команда начала проводить семинары для учителей старших классов, обучая их разработке программ и функциональному программированию. Полевые испытания с участием этих учителей и их учеников дали важные подсказки для направления развития.
В последующие годы PLT добавила языки обучения, алгебраический степпер, [23] прозрачный цикл чтения-оценки-печати , принтер на основе конструктора и многие другие инновации в DrScheme, создающие среду разработки педагогических программ прикладного качества. К 2001 году основная группа (Феллейзен, Финдлер, Флэтт, Кришнамурти) также написала и опубликовала свой первый учебник « Как разрабатывать программы» , основанный на их философии преподавания.
Манифест рэкета [9] подробно описаны принципы, лежащие в основе разработки Racket, представлена структура оценки процесса проектирования и подробно описаны возможности для будущих улучшений.
История версий
[ редактировать ]В первом поколении версий PLT Scheme появились возможности для программирования в целом с использованием как модулей , так и классов . В версии 42 представлены модули — первоклассная модульная система — в дополнение к классам для крупномасштабной разработки. [24] система классов приобрела новые функции (например, Java в стиле интерфейсы ), но также потеряла некоторые функции (например, множественное наследование ). В этих версиях [16] Язык развивался на протяжении ряда последовательных версий и приобрел значительную популярность в версии 53, что привело к обширной работе и следующей версии 100, которая была бы эквивалентна выпуску «1.0» в текущих популярных системах версий.
Следующая основная версия называлась Версия 200, в которой была представлена новая система модулей по умолчанию, взаимодействующая с макросами. [24] В частности, система модулей обеспечивает разделение вычислений во время выполнения и времени компиляции для поддержки «башни языков». [25] В отличие от модулей, эти модули не являются объектами первого класса .
Версия 300 представила Unicode поддержку , поддержку сторонних библиотек и усовершенствования системы классов. [24] Позже в серии 300 была улучшена производительность среды выполнения языка за счет добавления JIT-компилятора и переключения на сборку мусора по умолчанию .
К следующему основному выпуску проект перешел на более традиционную нумерацию версий на основе последовательности . Версия 4.0 представила #lang
сокращение для указания языка, на котором написан модуль. Кроме того, в этой версии представлены неизменяемые пары и списки, поддержка мелкозернистого параллелизма и статически типизированный диалект. [26]
7 июня 2010 года схема PLT была переименована в 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 с системой времени выполнения Chez Scheme , известной как Racket CS, является реализацией по умолчанию. Racket CS быстрее, проще в обслуживании и разработке, обратно совместим с существующими программами Racket и имеет лучшую параллельную сборку мусора. [37]
Функции
[ редактировать ]Основной язык Racket включает макросы , модули , лексические замыкания , хвостовые вызовы , продолжения с разделителями . [38] параметры (переменные переменные), контракты на программное обеспечение , [39] зеленые темы и темы ОС , [40] [41] [42] и многое другое. В язык также входят примитивы, такие как пространства событий и хранители, которые контролируют управление ресурсами и позволяют языку действовать как операционная система для загрузки и управления другими программами. [12] Дальнейшие расширения языка создаются с помощью мощной системы макросов, которая вместе с системой модулей и пользовательскими анализаторами может контролировать все аспекты языка. [43] Большинство языковых конструкций в Racket реализованы в виде макросов базового языка. К ним относятся система классов миксинов , [16] система компонентов (или модулей), столь же выразительная, как непрозрачная атрибуция в системе модулей ML , [17] и сопоставление с образцом .
Кроме того, в языке реализована первая контрактная система для языка программирования более высокого порядка . [44] Контрактная система Racket основана на работе Design by Contract для Eiffel и расширяет ее для работы со значениями более высокого порядка, такими как функции первого класса , объекты, ссылочные ячейки и т. д. Например, можно гарантировать, что объект, который проверяется контрактом, будет выполнять проверки контракта при вызове его методов.
Racket включает в себя как байт-код , так и JIT (JIT)-компиляторы. Компилятор байт-кода создает внутренний формат байт-кода, запускаемый виртуальной машиной Racket , а JIT-компилятор преобразует байт-код в машинный код во время выполнения.
С 2004 года язык также поставляется с PLaneT, менеджером пакетов, интегрированным в систему модулей, что позволяет прозрачно импортировать и использовать сторонние библиотеки . Кроме того, PLaneT имеет встроенную политику управления версиями , предотвращающую ад зависимостей . [45]
В конце 2014 года большая часть кода Racket была перенесена в новую систему упаковки, отдельную от основной базы кода. Эта новая система упаковки обслуживается клиентской программой raco . Новая система пакетов предоставляет меньше возможностей, чем PLaneT; Сообщение Джея Маккарти в блоге Racket объясняет причину изменения и способы дублирования старой системы. [46]
Интегрированная расширяемость языка и макросы
[ редактировать ]Особенностями, которые наиболее явно отличают Racket от других языков семейства Lisp, являются встроенные функции расширения языка , которые поддерживают создание новых языков, специфичных для конкретной предметной области и языков общего назначения . Функции расширения Racket встроены в систему модулей, чтобы обеспечить контекстно-зависимый и модульный контроль над синтаксисом. [18] Например, #%app
синтаксическую форму можно переопределить, чтобы изменить семантику применения функции . Аналогичным образом, #%module-begin
Форма позволяет производить произвольный статический анализ всего модуля. [18] Поскольку любой модуль можно использовать в качестве языка, через #lang
нотации, это фактически означает, что практически любой аспект языка можно запрограммировать и контролировать.
Возможности расширения на уровне модуля объединены с Scheme -подобной гигиенической системой макросов, которая предоставляет больше возможностей, чем Lisp . система манипулирования s-выражениями [47] [48] макросы расширения синтаксиса Scheme 84 Гигиенические или R5RS синтаксиса правила . Действительно, справедливо будет сказать, что система макросов представляет собой тщательно настроенный интерфейс прикладного программирования (API) для расширений компилятора . Используя этот API-интерфейс компилятора, программисты могут добавлять функции и целые предметно-ориентированные языки таким образом, чтобы они были полностью неотличимы от встроенных языковых конструкций.
Макросистема . в Racket использовалась для создания целых диалектов языковых Сюда входит Typed Racket, который представляет собой постепенно типизированный диалект Racket, который упрощает переход от нетипизированного к типизированному коду. [49] Lazy Racket — диалект с ленивой оценкой , [50] и Hackett, сочетающий в себе Haskell и Racket. [51] Язык педагогического программирования Pyret изначально был реализован в Racket. [52] [53]
Другие диалекты включают FrTime ( функциональное реактивное программирование ), Scribble (язык документации), [54] Слайд-шоу ( язык презентации ), [55] и несколько языков для обучения. [56] [57]
Базовый дистрибутив Racket предоставляет библиотеки, помогающие в разработке языков программирования. [18] Такие языки не ограничиваются синтаксисом, основанным на s-выражениях . В дополнение к обычным расширениям синтаксиса на основе читаемых таблиц директива #lang
позволяет вызывать произвольные анализаторы, что можно реализовать с помощью библиотеки инструментов анализатора. [58] См. «Ракетное логическое программирование» пример такого языка в разделе .
Среда программирования
[ редактировать ]Языковая платформа предоставляет самостоятельную среду разработки. [13] на основе продолжения названный DrRacket, веб-сервер , [59] графический интерфейс пользователя , [22] и другие инструменты. Как жизнеспособный инструмент сценариев с такими библиотеками, как распространенные языки сценариев , его можно использовать для написания сценариев оболочки Unix. Он может анализировать аргументы командной строки и запускать внешние инструменты.
DrRacket IDE
[ редактировать ]DrRacket (ранее DrScheme) широко используется на вводных курсах информатики, на которых преподают Scheme или Racket, и славится своей простотой и привлекательностью для начинающих программистов. Изначально IDE была создана для использования с TeachScheme! проект (теперь ProgramByDesign ), информационно-просветительская работа Северо-Восточного университета и ряда дочерних университетов с целью привлечения старшеклассников к курсам информатики на уровне колледжа.
Редактор обеспечивает подсветку синтаксических ошибок и ошибок времени выполнения, сопоставление скобок, отладчик и алгебраический шаговый процессор. Его функции, удобные для студентов, включают поддержку нескольких «языковых уровней» (начальный студент, средний студент и т. д.). Он также имеет встроенную поддержку библиотек и сложные инструменты анализа для опытных программистов. Кроме того, модульно-ориентированное программирование поддерживается браузером модулей, контурным представлением, интегрированными тестирования и покрытия измерениями рефакторинга , а также поддержкой . Он обеспечивает интегрированный контекстно-зависимый доступ к обширной справочной системе с гиперссылками под названием «Служба поддержки».
DrRacket доступен для Windows , macOS , Unix и Linux с системой X Window , и программы ведут себя одинаково на всех этих платформах.
Примеры кода
[ редактировать ]Вот банальное «Привет, Мир!» программа :
#lang racket
"Hello, World!"
Запуск этой программы дает вывод:
- "Привет, мир!"
Вот немного менее тривиальная программа:

#lang racket
(require 2htdp/image)
(let sierpinski ([n 8])
(if (zero? n)
(triangle 2 'solid 'red)
(let ([t (sierpinski (- n 1))])
(freeze (above t (beside 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 имеет две реализации. Оба поддерживают Linux, Windows и MacOS на различных архитектурах и поддерживаются начиная с версии 8.8 (2023 г.). Реализация по умолчанию использует инкрементальный компилятор и среду выполнения Chez Scheme . Альтернативная реализация генерирует независимый от платформы байт-код и использует JIT-компиляцию для создания машинного кода по мере его загрузки. [60]
Кроме того, существуют экспериментальные реализации:
- RacketScript — это экспериментальный компилятор Racket to JavaScript (ES6). Он позволяет программистам использовать экосистему как JavaScript, так и Racket, и стремится сделать эту совместимость максимально гладкой. [61]
- Pycket — это реализация Racket, созданная с использованием инфраструктуры RPython. [62]
Применение и практическое использование
[ редактировать ]Помимо теории языков программирования , Racket был разработан как язык общего назначения для производственных систем. Таким образом, дистрибутив Racket включает в себя обширную библиотеку, охватывающую системное и сетевое программирование, веб-разработку, [59] унифицированный интерфейс к базовой операционной системе, динамический интерфейс внешних функций , [63] несколько разновидностей регулярных выражений , генераторы лексеров/парсеров, [58] логическое программирование и полная среда графического интерфейса .
Racket имеет несколько функций, полезных для коммерческого языка, в том числе возможность компилировать автономные исполняемые файлы под Windows, macOS и Unix, профилировщик и отладчик, включенные в интегрированную среду разработки (IDE), а также среду модульного тестирования .
Racket использовался для коммерческих проектов и веб-приложений. Ярким примером является веб-сайт Hacker News , работающий на платформе Arc , разработанной в Racket. Naughty Dog использовала его в качестве языка сценариев в нескольких видеоиграх. [64]
Racket используется для обучения студентов алгебре посредством игрового дизайна в программе Bootstrap . [65]
Ссылки
[ редактировать ]- ^ «Ракетка 8.13» . 18 мая 2024 г. Проверено 18 мая 2024 г.
- ^ Тобин-Хохштадт, Сэм; Джерард, Сейдж; Дуек, Джоэл; Флэт, Мэтью ; Сохранение свободы программного обеспечения ; Честек, Памела (15 ноября 2019 г.). «Завершение процесса повторного лицензирования Racket» . Проверено 27 декабря 2019 г.
- ^ «Файлы DrRacket» . Проверено 21 июля 2019 г.
Стандартное расширение файла программы Racket — «.rkt». Расширения «.ss», «.scm» и «.sch» также исторически популярны.
- ^ Стрикленд, Т.С.; Феллисен, Матиас (2010). «DLS 2010: Контракты для первоклассных классов» (PDF) .
- ^ Боннер-сержант Амброуз (2012 г.). Практическая дополнительная система типов для Clojure (Диссертация). Университет Западной Австралии.
- ^ «Вопросы Планеты2» .
- ^ «Ржавая библиография» . Гитхаб . 23 ноября 2022 г.
- ^ Спербер, Майкл; Дибвиг, Р. Кент; Флэтт, Мэтью; Ван Страатен, Антон; и др. (август 2007 г.). «Пересмотренный 6 Отчет о схеме алгоритмического языка (R6RS)» . Руководящий комитет схемы . Проверено 13 сентября 2011 г.
- ^ Перейти обратно: а б Феллейзен, М.; Финдлер, РБ; Флэтт, М.; Кришнамурти, С.; Барзилай, Э.; Маккарти, Дж.; Тобин-Хохштадт, С. (2015). «Манифест рэкета» (PDF) . Материалы Первого саммита по достижениям в языках программирования : 113–128.
- ^ «Диалекты рэкета и махинаций» . Проверено 15 августа 2011 г.
- ^ «Добро пожаловать в Рэкет» . Проверено 15 мая 2019 г.
- ^ Перейти обратно: а б Квартира; Финдлер; Кришнамурти; Феллизен (1999). Языки программирования как операционные системы (или Месть сына Лисп-машины) . Международная конференция по функциональному программированию.
- ^ Перейти обратно: а б с Финдлер; Клементс; Фланаган; Квартира; Кришнамурти; Стеклер; Феллизен (2001). «DrScheme: среда программирования для Scheme» (PDF) . Журнал функционального программирования .
- ^ Феллизен; Финдлер; Квартира; Кришнамурти (2004). «Проект TeachScheme!: Вычисление и программирование для каждого ученика» . Журнал компьютерного образования .
- ^ «Обзор» . Программа по дизайну . Проверено 17 августа 2011 г.
- ^ Перейти обратно: а б с Флэтт, М.; Финдлер, РБ; Феллейзен, М. (2006). «Схема с классами, миксинами и признаками» (PDF) . Азиатский симпозиум по языкам и системам программирования .
- ^ Перейти обратно: а б Флэтт, М.; Феллизен, М. (1998). «Юниты: крутые модули для горячих языков» . Проектирование и реализация языков программирования .
- ^ Перейти обратно: а б с д Тобин-Хохштадт, С.; Сент-Амур, В.; Калпеппер, Р.; Флэтт, М.; Феллайзен, М. (2011). «Языки как библиотеки» (PDF) . Проектирование и реализация языков программирования .
- ^ Феллейзен, Матиас; Финдлер, Роберт Брюс; Флэтт, Мэтью; Кришнамурти, Шрирам; Барзилай, Эли; Маккарти, Джей; Тобин-Хохштадт, Сэм (2018). «Программируемый язык программирования» . Коммуникации АКМ . 61 (3): 62–71. дои : 10.1145/3127323 . S2CID 3887010 .
- ^ «Рэкет: Лицензия на программное обеспечение» . Проверено 20 октября 2015 г.
- ^ Бенсон, Брент В. младший (26–28 октября 1994 г.). «libscheme: Схема как библиотека C» . Написано в Санта-Фе, Нью-Мексико. Материалы симпозиума USENIX по языкам очень высокого уровня . Беркли, Калифорния: Ассоциация USENIX. стр. 7–19. ISBN 978-1880446652 . Проверено 7 июля 2013 г.
- ^ Перейти обратно: а б с «Восстановление графического слоя Racket» . 08.12.2010 . Проверено 11 декабря 2017 г.
- ^ Клементс, Дж.; Флэтт, М.; Феллейзен, М. (2001). «Моделирование алгебраического степпера» (PDF) . Европейский симпозиум по языкам программирования .
- ^ Перейти обратно: а б с «Примечания к выпуску Racket Core» . Архивировано из оригинала 5 июля 2013 г. Проверено 15 апреля 2012 г.
- ^ Флэт, М. (2002). «Составляемые и компилируемые макросы». Международная конференция по функциональному программированию .
- ^ «Схема PLT версия 4.0» . 12 июня 2008 г. Архивировано из оригинала 2 февраля 2013 г. Проверено 7 августа 2012 г.
- ^ «От схемы PLT к рэкету» . Racket-lang.org . Проверено 17 августа 2011 г.
- ^ «Ракетка 5.2» . PLT, Inc. 09.11.2011 . Проверено 16 июня 2012 г.
- ^ «Субмодули» . 03.06.2012 . Проверено 7 августа 2012 г.
- ^ «Ракетка 5.3» . PLT, Inc. 07.08.2012 . Проверено 7 августа 2012 г.
- ^ «Рэкетка 5.3.1» . PLT, Inc. 07.11.2012 . Проверено 7 ноября 2012 г.
- ^ «Ракетка 6.0» . PLT, Inc. 26 февраля 2014 г. Проверено 23 февраля 2016 г.
- ^ «Статус Racket-on-Chez: январь 2018 г.» . 05.01.2018. Архивировано из оригинала 28 июня 2018 г. Проверено 13 апреля 2018 г.
- ^ «Создание рэкета по схеме Chez (Отчет об опыте)» (PDF) . 01.08.2019 . Проверено 25 июля 2019 г.
- ^ «Выпуск Ракетки 7.5» . Пакетный хаб . 22 ноября 2019 года . Проверено 28 ноября 2019 г.
- ^ «Ракетка v7.5» . Ракетка | Блог . Проверено 28 ноября 2019 г.
- ^ «Рэкет v8.0» .
- ^ Флэтт, М.; Ю, Г.; Финдлер, РБ; Феллейзен, М. (2007). «Добавление разделенного и составного элемента управления в среду производственного программирования» (PDF) . Международная конференция по функциональному программированию .
- ^ «Контракты» .
- ^ «Нити» .
- ^ «Фьючерсы» .
- ^ «Места» .
- ^ Флэтт, Мэтью (2012). «Создание языков в рэкете» . Коммуникации АКМ . Проверено 8 апреля 2012 г.
- ^ Финдлер, РБ; Феллизен, М. (2002). «Контракты для функций высшего порядка» (PDF) . Международная конференция по функциональному программированию .
- ^ Мэтьюз, Дж. (2006). «Развертывание компонентов с помощью PLaneT: где вы хотите?». Практикум по схемному и функциональному программированию .
- ^ «Пакетная система Racket и Планета» .
- ^ Флэтт, Мэтью (2002). «Составляемые и компилируемые макросы: когда вы захотите?» (PDF) . Международная конференция по функциональному программированию .
- ^ Флатт, Калпеппер, Дарайс, Финдлер, Макросы, которые работают вместе; Привязки времени компиляции, частичное раскрытие и контексты определения
- ^ Тобин-Хохштадт, С.; Феллайзен, М. (2008). «Проектирование и реализация типизированной схемы». Принципы языков программирования .
- ^ Барзилай, Э.; Клементс, Дж. (2005). «Лень без тяжелой работы: сочетание ленивого и строгого языка для преподавания». Функциональное и декларативное программирование в образовании .
- ^ «Язык программирования Хакетт» . Блог Алексис Кинг . Проверено 16 июня 2019 г.
- ^ Команда Пырета (24 мая 2011 г.). «Код Pyret; или Обоснование языка программирования Pyret» . Пырет . Проверено 16 июня 2019 г.
- ^ «Программирование и языки программирования» . Индекс / . 20 сентября 2017 года . Проверено 16 июня 2019 г.
- ^ Флэтт, М.; Барзилай, Э.; Финдлер, РБ (2009). «Каракуля: закрытие книги о специальных инструментах документации». Международная конференция по функциональному программированию .
- ^ Финдлер, РБ; Флэт, М. (2004). «Слайд-шоу: Функциональные презентации». Международная конференция по функциональному программированию .
- ^ Феллейзен, М.; Финдлер, РБ; Флэтт, М.; Кришнамурти, С. (2009). «Функциональная система ввода-вывода (или развлечение для первокурсников)» (PDF) . Международная конференция по функциональному программированию .
- ^ Феллейзен, М.; Финдлер, РБ; Флэтт, М.; Кришнамурти, С. (2004). «Структура и интерпретация учебной программы по информатике» (PDF) . Журнал функционального программирования . 14 (4): 365–378. дои : 10.1017/S0956796804005076 .
- ^ Перейти обратно: а б «Инструменты парсера: синтаксический анализ в стиле lex и yacc» . Проверено 16 августа 2011 г.
- ^ Перейти обратно: а б Кришнамурти, Хопкинс; Маккарти; Граунке; Петтиджон; Феллайзен (2007). «Внедрение и использование веб-сервера схемы PLT» (PDF) . Журнал высшего и символического программирования . 20 (4): 431–460. дои : 10.1007/s10990-007-9008-y . S2CID 17731194 .
- ^ Реализации
- ^ РакетСкрипт
- ^ Пикет
- ^ Барзилай, Э.; Орловский, Д. (2004). «Внешний интерфейс для схемы PLT» (PDF) . Схема и функциональное программирование .
- ^ «Функциональные DSL mzScheme в разработке игр» . Проверено 8 мая 2012 г.
- ^ «Бутстрап» . bootstrapworld.org . Проверено 11 августа 2015 г.
Дальнейшее чтение
[ редактировать ]- Феллизен и др. , 2013. Царство рэкета . После крахмального пресса.
- Феллизен и др. , 2003. Как разрабатывать программы . МТИ Пресс.
Внешние ссылки
[ редактировать ]1958 | 1960 | 1965 | 1970 | 1975 | 1980 | 1985 | 1990 | 1995 | 2000 | 2005 | 2010 | 2015 | 2020 | ||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
ЛИСП 1, 1.5, ЛИСП 2 (заброшенный) | |||||||||||||||
Маклисп | |||||||||||||||
Интерлисп | |||||||||||||||
леев | |||||||||||||||
Лисп-машина Лисп | |||||||||||||||
Схема | Р5РС | Р6РС | R7RS маленький | ||||||||||||
НОЛЬ | |||||||||||||||
ЗИЛ (язык реализации Zork) | |||||||||||||||
Франц Лисп | |||||||||||||||
Общий Лисп | стандарт ANSI | ||||||||||||||
Лисп | |||||||||||||||
Схема СО | |||||||||||||||
XLISP | |||||||||||||||
Т | |||||||||||||||
На схеме | |||||||||||||||
Эмакс Лисп | |||||||||||||||
АвтоЛИСП | |||||||||||||||
ПикоЛисп | |||||||||||||||
Гамбит | |||||||||||||||
EuLisp | |||||||||||||||
ИСЛИСП | |||||||||||||||
ОпенЛисп | |||||||||||||||
Схема PLT | Ракетка | ||||||||||||||
новыйLISP | |||||||||||||||
GNU Коварство | |||||||||||||||
Визуальный ЛИСП | |||||||||||||||
Кложур | |||||||||||||||
Дуга | |||||||||||||||
ЛФЭ | |||||||||||||||
Он | |||||||||||||||
Хиалисп |
- Функциональные языки
- Объектно-ориентированные языки программирования
- Языки программирования с расширяемым синтаксисом
- Реализации схемы (языка программирования)
- Компиляторы схем (языков программирования)
- Интерпретаторы схем (языков программирования)
- Схема R6RS
- Академические языки программирования
- Образовательные языки программирования
- Педагогическая интегрированная среда развития
- Кроссплатформенное бесплатное программное обеспечение
- Бесплатные компиляторы и интерпретаторы
- Языки программирования, созданные в 1995 году.
- Языки программирования сопоставления шаблонов
- Схема (язык программирования)
- Разработка программного обеспечения
- Языковой инструментарий
- Семейство языков программирования Лисп