Interested Article - Racket (язык программирования)

Racket (ранее — PLTScheme) — мультипарадигменный язык программирования общего назначения, принадлежащий семейству Lisp / Scheme . Предоставляет среду языково-ориентированное программирование — одно из предназначений racket — создание, разработка и реализация языков программирования . Язык используется в различных контекстах: как скриптовый язык , как язык общего назначения, в обучении информатике, в научных исследованиях.

Платформа предоставляет пользователю реализацию языка Racket, включая развитую среду выполнения ( англ. run time system ) , различные библиотеки, JIT-компилятор и т. д., а также среду разработки DrRacket (ранее известную, как DrScheme) написанную на Racket . Эта программная среда используется в учебном курсе Массачусетского технологического института . Основной язык Racket отличает мощная макросистема , позволяющая создавать встраиваемые и предметно-ориентированные языки программирования, языковые конструкции (к примеру, классы и модули ) и диалекты Racket с различной семантикой .

Система является свободным и открытым ПО , распространяемым на условиях LGPL . Расширения и пакеты, написанные сообществом, доступны на PLaneT , веб-дистрибутиве системы .

История

Создание

основал компанию PLT Inc. в середине 1990-х, первоначально — как исследовательскую группу, а затем — как проект по разраработке и выпуску педагогических материалов для начинающих программистов (лекции, упражнения/проекты, программное обеспечение). В январе 1995 было решено разработать учебную среду программирования на языке Scheme . собрал MrEd — оригинальную виртуальную машину Racket, используя libscheme, wxWidgets и некоторые другие свободные системы . В течение последующих лет команда, в которую входили, в частности, Флэтт, , , Cormac Flanagan, и многие другие, выпускала среду DrScheme, предназначенную для начинающих программистов-схемеров и исследований в области мягкой типизации (комбинации статической и динамической типизации ) . Основной язык программирования, поддерживавшийся средой, назывался PLT Scheme.

Параллельно с этим команда начала проведение семинаров для учителей средней школы, обучая их разработке программ и функциональному программированию . Полевые испытания с этими учителями и их учениками определили основные направления развития продукта.

DrScheme был дополнен учебными языками , пошаговым алгебраическим вычислителем ( англ. algebraic stepper ) , прозрачным REPL -циклом, подсистемой печати на основе конструкторов (cons) и множеством других нововведений, которые сделали DrScheme качественным образовательным продуктом. В 2001 году разработчиками языка был написан и опубликован учебник , основанный на их философии обучения программированию.

Развитие DrScheme

В первое поколение версий DrScheme были введены средства для « » c использованием модулей и классов . В версии 42 были добавлены юниты: система модулей — объектов первого класса , позволяющая дополнять модули в процессе разработки больших систем . Система классов была с одной стороны дополнена (в частности, интерфейсами в стиле Java ), а с другой — сокращена (в частности было удалено множественное наследование ) . Язык развивался на протяжении ряда последовательных версий и набрал популярность к версии 53, что ещё ускорило работу над ним и следующая версия 100, стала эквивалентом «1.0».

В следующую крупную ревизию, получившую номер 200, была введена новая модульная система по умолчанию, интегрированная с макросами . В частности, модульная система гарантирует, что вычисления времени выполнения и вычисления времени компиляции разделены для поддержки «башни языков» . В отличие от юнитов, эти модули не являются объектами первого класса .

В версию 300 введена поддержка Unicode , и изменена система классов . Позднее для релизов версии 300 была улучшена производительность путём добавления JIT-компилятора и сборки мусора с поддержкой поколений объектов .

К следующему мажорному релизу DrScheme перешёл на общепринятую систему нумерации версий на основе десятичных дробей . В версию 4.0 введено сокращение #lang для указания [под]языка, на котором написан модуль. Также в этот релиз введены неизменяемые пары и списки , поддержка мелкозернистого параллелизма , и статически типизированный диалект .

Racket

7 июня 2010 года PLT Scheme был переименован в Racket , что совпало с выпуском версии 5.0. Впоследствии, в версии 5.1, базовая программа GUI была переписана с C++ на Racket c помощью собственного инструментария пользовательского интерфейса на всех платформах . В версии 5.2 включен инструмент фоновой проверки синтаксиса , новую библиотеку-плоттер, библиотеки баз данных и новый расширенный REPL . В версию 5.3 включена новая функциональность: подмодули для опционально загружаемых модулей , новые инструменты оптимизации , библиотека JSON , и другие возможности . В версии 5.3.1 значительно улучшен DrRacket: добавлен новый инструмент просмотра документации, проверка синтаксиса в фоне включена по умолчанию .

Основным новшеством версии 6.0, выпущенной 24 февраля 2014 года стала новая система пакетов, дистрибутив Racket стал модульным, он состоит из более 200 пакетов. Появилась возможность установки Minimal Racket, где эти пакеты не предустановлены. Также была добавлена поддержка JIT-компиляции для архитектуры ARM , значительно улучшено быстродействие Typed Racket и т. д. .

Основные нововведение версии 7.0, выпущенной в конце июля 2018, связаны с подготовкой замены собственной виртуальной машины Racket на Chez Scheme .

Racket Chez Scheme

С начала 2017 года систему макросов и модулей Racket стали переписывать с целью замены сделанной на языке Си виртуальной машины на Chez Scheme , а также улучшения переносимости и облегчения поддержки Racket. Данный форк Racket известен как Racket CS . В январе 2019 года было объявлено о достижении полной функциональности Racket on Chez Scheme. Хотя код, скомпилированный Racket CS, обычно выполняется также быстро, как и для классического Racket, и иногда даже быстрее, общая производительность пока не была признана достаточной, чтобы сделать Racket CS реализацией Racket по умолчанию. В частности упала скорость компиляции и время запуска Racket-системы Начиная с версии Racket 7.4, выпущенной 8 августа 2019 года вариант RacketCS получил статус бета-версии , доступной для загрузки с официальной страницы языка программирования .

Примеры кода

Тривиальная программа « hello world » будет выглядеть следующим образом:

#lang racket
"Hello, World!"

При её запуске будет выведено:

«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
(require racket/generator)
(define fib
  (generator
   () (let loop ((x 1)
                 (y 1))
        (yield x)
        (loop y (+ x y)))))

Используя директиву #lang , можно писать программы на альтернативных диалектах Racket’a. Вот пример факториала на Typed Racket, диалекте со статической типизацией :

#lang typed/racket
(: fact (Integer -> Integer))
(define (fact n)
  (cond [(zero? n) 1]
        [else (* n (fact (- n 1)))]))

Режим совместимости со стандартом языка Scheme выбирается директивой #lang или #lang , соответственно.

Примечания

  1. . из оригинала 12 мая 2022 . Дата обращения: 5 апреля 2022 .
  2. Strickland, T.S.; Fellesisen, Matthias (2010). 23 мая 2013 года.
  3. Sperber, Michael; Dybvig, R. Kent; Flatt, Matthew; Van Straaten, Anton, et al. . Scheme Steering Committee (August 2007). Дата обращения: 13 сентября 2011. 23 мая 2013 года.
  4. . Дата обращения: 15 августа 2011. 23 мая 2013 года.
  5. . Дата обращения: 15 августа 2011. 23 мая 2013 года.
  6. Flatt; Findler; Krishnamurthi; Felleisen (1999). Programming Languages as Operating Systems (or, Revenge of the Son of the Lisp Machine) . International Conference on Functional Programming.
  7. Findler; Clements; Flanagan; Flatt; Krishnamurthi; Steckler; Felleisen. (англ.) // (англ.) : journal. — 2001. 30 апреля 2013 года.
  8. Felleisen; Findler; Flatt; Krishnamurthi (2004). . Journal of Computer Science Education . из оригинала 1 мая 2012 . Дата обращения: 22 мая 2013 .
  9. . Program by Design. Дата обращения: 17 августа 2011. 23 мая 2013 года.
  10. (3 мая 2007). Дата обращения: 8 августа 2011. 23 мая 2013 года.
  11. Flatt, M.; Findler, R. B.; Felleisen, M. (2006). (PDF) . Asian Symposium on Programming Languages and Systems . . Дата обращения: 22 мая 2013. Архивировано 10 мая 2012 года.
  12. Flatt, M.; Felleisen, M. (1998). . Programming Language Design and Implementation . . Дата обращения: 22 мая 2013. Архивировано 4 ноября 2011 года.
  13. Tobin-Hochstadt, S.; St-Amour, V.; Culpepper, R.; Flatt, M.; Felleisen, M. (2011). (PDF) . Programming Language Design and Implementation . . Дата обращения: 22 мая 2013. Архивировано 10 марта 2012 года.
  14. . Дата обращения: 22 мая 2013. 30 мая 2013 года.
  15. Matthews, J. (2006). "Component Deployment with PLaneT: You Want it Where?". Scheme and Functional Programming Workshop .
  16. (8 декабря 2010). Дата обращения: 23 августа 2011. 23 мая 2013 года.
  17. Clements, J.; Flatt, M.; Felleisen, M. (2001). (PDF) . European Symposium on Programming Languages . . Дата обращения: 22 мая 2013. Архивировано 10 мая 2012 года.
  18. . Дата обращения: 15 апреля 2012. 23 мая 2013 года.
  19. Flatt, M. (2002). "Composable and Compilable Macros". International Conference on Functional Programming .
  20. (12 июня 2008). Дата обращения: 7 августа 2012. 23 мая 2013 года.
  21. . Racket-lang.org. Дата обращения: 17 августа 2011. 23 мая 2013 года.
  22. (9 ноября 2011). Дата обращения: 16 июня 2012. 23 мая 2013 года.
  23. (3 июня 2012). Дата обращения: 7 августа 2012. 23 мая 2013 года.
  24. (7 августа 2012). Дата обращения: 7 августа 2012. 23 мая 2013 года.
  25. (7 ноября 2012). Дата обращения: 7 ноября 2012. 23 мая 2013 года.
  26. Ryan Culpepper. (англ.) . blog.racket-lang.org (26 февраля 2014). Дата обращения: 3 февраля 2019. 11 ноября 2020 года.
  27. Vincent St-Amour. (англ.) . blog.racket-lang.org (27 июля 2018). Дата обращения: 3 февраля 2019. 10 марта 2019 года.
  28. Matthew Flatt. (англ.) . blog.racket-lang.org (5 января 2018). Дата обращения: 26 июня 2018. 28 июня 2018 года.
  29. Matthew Flatt. (англ.) . blog.racket-lang.org (29 января 2019). Дата обращения: 3 февраля 2019. 3 февраля 2019 года.
  30. John Clements. . blog.racket-lang.org. Дата обращения: 7 октября 2019. 8 октября 2019 года.

Литература

  • Matthias Felleisen, Conrad Barski M.D., David Van Horn, Eight Students of Northeastern University. . — no starch press, June 2013. — 312 p. — ISBN 978-1-59327-491-7 .

Уроки

Руководство по стилю

  • от 20 февраля 2013 на Wayback Machine (work in Progress as of 2011-09-25)

Ссылки

Источник —

Same as Racket (язык программирования)