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

Материал из Википедии — свободной энциклопедии
Racket
Изображение логотипа
Класс языка
Появился в 1994
Автор PLT Inc.
Расширение файлов .rkt, .rktl, .rktd, .plt, .ss или .scm
Выпуск 8.4[1] (9 февраля 2022; 2 года назад (2022-02-09))
Система типов
строгая, статическая
Диалекты Typed Racket, Lazy Racket, Scribble, FrTime и т. д.
Испытал влияние Scheme, Eiffel[2]
Повлиял на Scheme[3]
Лицензия
LGPL
Сайт racket-lang.org
Платформа
кроссплатформенный

Racket (ранее — PLTScheme) —

скриптовый язык
, как язык общего назначения, в обучении информатике, в научных исследованиях.

Платформа предоставляет пользователю реализацию языка Racket, включая развитую

модули) и диалекты Racket с различной семантикой[10][11][12][13]
.

Система является

LGPL. Расширения и пакеты, написанные сообществом, доступны на PLaneT[14], веб-дистрибутиве системы[15]
.

История

Создание

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

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

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

Развитие DrScheme

В первое поколение версий DrScheme были введены средства для «

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

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

В версию 300 введена поддержка

поколений объектов
.

К следующему мажорному релизу DrScheme перешёл на общепринятую систему

мелкозернистого параллелизма, и статически типизированный диалект[20]
.

Racket

7 июня 2010 года PLT Scheme был переименован в Racket

оптимизации, библиотека JSON, и другие возможности[24]. В версии 5.3.1 значительно улучшен DrRacket: добавлен новый инструмент просмотра документации, проверка синтаксиса в фоне включена по умолчанию[25]
.

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

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

Racket Chez Scheme

С начала 2017 года систему макросов и модулей Racket стали переписывать с целью замены сделанной на языке

бета-версии, доступной для загрузки с официальной страницы языка программирования[30]
.

Примеры кода

Тривиальная программа «

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

#lang racket
"Hello, World!"

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

«Hello, World!»

Вот чуть менее тривиальная программа:

Результат программы, который покажет DrRacket
#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 R6RS или #lang R5RS, соответственно.

Примечания

  1. "Racket v8.4". Архивировано 12 мая 2022. Дата обращения: 5 апреля 2022.
  2. Strickland, T.S.; Fellesisen, Matthias DLS 2010: Contracts for First-Class Classes (2010). Архивировано 23 мая 2013 года.
  3. Sperber, Michael; Dybvig, R. Kent; Flatt, Matthew; Van Straaten, Anton, et al. Revised6 Report on the Algorithmic Language Scheme (R6RS). Scheme Steering Committee (August 2007). Дата обращения: 13 сентября 2011. Архивировано 23 мая 2013 года.
  4. Welcome to Racket. Дата обращения: 15 августа 2011. Архивировано 23 мая 2013 года.
  5. Dialects of Racket and Scheme. Дата обращения: 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. 1 2 Findler; Clements; Flanagan; Flatt; Krishnamurthi; Steckler; Felleisen. DrScheme: A Programming Environment for Scheme (англ.) // Journal of Functional Programming[англ.] : journal. — 2001. Архивировано 30 апреля 2013 года.
  8. Felleisen; Findler; Flatt; Krishnamurthi (2004). "The TeachScheme! Project: Computing and Programming for Every Student". Journal of Computer Science Education. Архивировано 1 мая 2012. Дата обращения: 22 мая 2013.
  9. Overview. Program by Design. Дата обращения: 17 августа 2011. Архивировано 23 мая 2013 года.
  10. Macros Matter (3 мая 2007). Дата обращения: 8 августа 2011. Архивировано 23 мая 2013 года.
  11. 1 2 Flatt, M.; Findler, R. B.; Felleisen, M. (2006). "Scheme with Classes, Mixins, and Traits" (PDF). Asian Symposium on Programming Languages and Systems. Архивировано (PDF) 10 мая 2012. Дата обращения: 22 мая 2013. Источник. Дата обращения: 22 мая 2013. Архивировано 10 мая 2012 года.
  12. Flatt, M.; Felleisen, M. (1998). "Units: Cool Modules for Hot Languages". Programming Language Design and Implementation. Архивировано 4 ноября 2011. Дата обращения: 22 мая 2013. Источник. Дата обращения: 22 мая 2013. Архивировано 4 ноября 2011 года.
  13. Tobin-Hochstadt, S.; St-Amour, V.; Culpepper, R.; Flatt, M.; Felleisen, M. (2011). "Languages as Libraries" (PDF). Programming Language Design and Implementation. Архивировано (PDF) 10 марта 2012. Дата обращения: 22 мая 2013. Источник. Дата обращения: 22 мая 2013. Архивировано 10 марта 2012 года.
  14. PLaneT. Дата обращения: 22 мая 2013. Архивировано 30 мая 2013 года.
  15. Matthews, J. (2006). "Component Deployment with PLaneT: You Want it Where?". Scheme and Functional Programming Workshop.
  16. 1 2 Rebuilding Racket's Graphics Layer (8 декабря 2010). Дата обращения: 23 августа 2011. Архивировано 23 мая 2013 года.
  17. Clements, J.; Flatt, M.; Felleisen, M. (2001). "Modeling an Algebraic Stepper" (PDF). European Symposium on Programming Languages. Архивировано (PDF) 10 мая 2012. Дата обращения: 22 мая 2013. Источник. Дата обращения: 22 мая 2013. Архивировано 10 мая 2012 года.
  18. 1 2 3 "Racket Core Release Notes". Дата обращения: 15 апреля 2012. Архивировано 23 мая 2013 года.
  19. Flatt, M. (2002). "Composable and Compilable Macros". International Conference on Functional Programming.
  20. PLT Scheme version 4.0 (12 июня 2008). Дата обращения: 7 августа 2012. Архивировано 23 мая 2013 года.
  21. From PLT Scheme to Racket. Racket-lang.org. Дата обращения: 17 августа 2011. Архивировано 23 мая 2013 года.
  22. Racket 5.2 (9 ноября 2011). Дата обращения: 16 июня 2012. Архивировано 23 мая 2013 года.
  23. Submodules (3 июня 2012). Дата обращения: 7 августа 2012. Архивировано 23 мая 2013 года.
  24. Racket 5.3 (7 августа 2012). Дата обращения: 7 августа 2012. Архивировано 23 мая 2013 года.
  25. Racket 5.3.1 (7 ноября 2012). Дата обращения: 7 ноября 2012. Архивировано 23 мая 2013 года.
  26. Ryan Culpepper. Racket v6.0 (англ.). blog.racket-lang.org (26 февраля 2014). Дата обращения: 3 февраля 2019. Архивировано 11 ноября 2020 года.
  27. Vincent St-Amour. Racket v7.0 (англ.). blog.racket-lang.org (27 июля 2018). Дата обращения: 3 февраля 2019. Архивировано 10 марта 2019 года.
  28. Matthew Flatt. Racket-on-Chez Status: January 2018 (англ.). blog.racket-lang.org (5 января 2018). Дата обращения: 26 июня 2018. Архивировано 28 июня 2018 года.
  29. Matthew Flatt. Racket-on-Chez Status: January 2019 (англ.). blog.racket-lang.org (29 января 2019). Дата обращения: 3 февраля 2019. Архивировано 3 февраля 2019 года.
  30. John Clements. Racket v7.4. blog.racket-lang.org. Дата обращения: 7 октября 2019. Архивировано 8 октября 2019 года.

Литература

Уроки

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

Ссылки