Racket (язык программирования): различия между версиями
[отпатрулированная версия] | [отпатрулированная версия] |
MBHbot (обсуждение | вклад) м →top: replaced: {{cite article| → {{cite news| |
Be nt all (обсуждение | вклад) →Преамбула: обновление |
||
Строка 9: | Строка 9: | ||
|designer = PLT Inc. |
|designer = PLT Inc. |
||
|extension = |
|extension = |
||
|latest_release_version = 7.2<ref name="latestversion">{{cite web |url=http://blog.racket-lang.org/2019/01/racket-v7-2.html |title=Racket v7.2|work=The Racket Blog}}</ref> |
|||
|latest_release_version = 6.12 |
|||
|latest_release_date = |
|latest_release_date = {{Start date and age|2019|01|30}} |
||
|latest_preview_version = |
|latest_preview_version = |
||
|latest_preview_date = |
|latest_preview_date = |
Версия от 14:59, 2 февраля 2019
Racket | |
---|---|
Класс языка |
мультипарадигмальный: объектно-ориентированный, процедурный, рефлективный, функциональный, логический, мета |
Появился в | 1994 |
Автор | PLT Inc. |
Разработчик | Matthias Felleisen[вд] |
Расширение файлов |
.rkt , .rktl , .rktd , .plt , .ss или .scm |
Выпуск | 7.2[1] (30 января 2019 ) |
Система типов | динамическая, строгая, статическая |
Диалекты | Typed Racket, Lazy Racket, Scribble, FrTime и т. д. |
Испытал влияние | Scheme, Eiffel[2] |
Повлиял на | Scheme[3] |
Лицензия | LGPL |
Сайт | racket-lang.org |
Платформа | кроссплатформенный |
Racket (ранее — PLTScheme) — мультипарадигменный язык программирования общего назначения, принадлежащий семейству Lisp/Scheme. Одно из предназначений racket — создание, разработка и реализация языков программирования[4][5]. Язык используется в различных контекстах: как скриптовый язык, как язык общего назначения, в обучении информатике, в научных исследованиях.
Платформа предоставляет пользователю реализацию языка Racket, включая развитую среду выполнения (англ. run time system)[6], различные библиотеки, JIT-компилятор и т. д., а также среду разработки DrRacket (ранее известную, как DrScheme) написанную на Racket[7]. Эта программная среда используется в учебном курсе ProgramByDesign[англ.] массачусетского технологического института[8][9]. Основной язык Racket отличает мощная макросистема, позволяющая создавать встраиваемые и предметно-ориентированные языки программирования, языковые конструкции (к примеру, классы и модули) и диалекты Racket с различной семантикой[10][11][12][13].
Система является свободным и открытым ПО, распространяемым на условиях LGPL. Расширения и пакеты, написанные сообществом, доступны на PLaneT[14], веб-дистрибутиве системы[15].
История
Создание
Matthias Felleisen[англ.] основал компанию PLT Inc. в середине 1990-х, первоначально — как исследовательскую группу, а вскоре — проект по производству педагогических материалов для начинающих программистов (лекции, упражнения/проекты, программное обеспечение). В январе 1995 было решено разработать учебную среду программирования на языке Scheme. Matthew Flatt[англ.] собрал MrEd, оригинальную виртуальную машину Racket, используя libscheme, wxWidgets и некоторые другие свободные системы[16]. В течение последующих лет команда, в которую входили, в частности, Flatt, Robert Bruce Findler[англ.], Shriram Krishnamurthi[англ.], Cormac Flanagan, и многие другие, выпускала среду DrScheme, предназначенную для начинающих программистов-схемеров и исследований в области мягкой типизации (комбинации статической и динамической типизации)[7]. Основной язык программирования, поддерживавшийся средой, назывался PLT Scheme.
Параллельно с этим команда начала проведение семинаров для учителей средней школы, обучая их разработке программ и функциональному программированию. Полевые испытания с этими учителями и их учениками определили основные направления развития продукта.
DrScheme был дополнен учебными языками, пошаговым алгебраическим вычислителем (англ. algebraic stepper)[17], прозрачныым REPL-циклом, подсистемой печати на основе конструкторов (cons) и множеством других нововведений, которые сделали DrScheme качественным образовательным продуктом. В 2001 году разработчиками языка была написан и опубликован учебник How to Design Programs[англ.], основанный на их философии обучения программированию.
Развитие DrScheme
В первое поколение версий DrScheme были введены средства для "программирования в большом"[англ.] c использованием модулей и классов. В версии 42 были добавлены юниты: система модулей — объектов первого класса, позволяющая дополнять модули в процессе разработки больших систем[18]. Система классов была с одной стороны дополнена (в частности, интерфейсами в стиле Java), а с другой — сокращена (в частности было удалено множественное наследование)[11]. Язык развивался на протяжении ряда последовательных версий и набрал популярность к версии 53, что ещё ускорило работу над ним и следующая версия 100, стала эквивалентом «1.0».
В следующую крупную ревизию, получившую номер 200, была введена новая модульная система по умолчанию, интегрированная с макросами[18]. В частности, модульная система гарантирует, что вычисления время выполнения и вычисления времени компиляции разделены для поддержки «башни языков»[19]. В отличие от юнитов, эти модули не являются объектами первого класса.
В версию 300 введена поддержка Unicode, библиотека интерфейса с внешними функциями[англ.] и изменена система классов[18]. Позднее для релизов версии 300 была улучшена производительность путём добавления JIT-компилятора и сборки мусора с поддержкой поколений объектов.
К следующему мажорному релизу DrScheme перешёл на общепринятую систему нумерации версий на основе десятичных дробей. В версию 4.0 введено сокращение #lang
для указания [под]языка, на котором написан модуль. Также в этот релиз введены неизменяемые пары и списки, поддержка мелкозернистого параллелизма, и статически типизированный диалект[20].
Racket
7 июня 2010 года PLT Scheme был переименован в Racket[21], что совпало с выпуском версии 5.0. Впоследствии, в версии 5.1, базовая программа GUI была переписана с C++ на Racket c помощью собственного инструментария пользовательского интерфейса на всех платформах[16]. В версии 5.2 включен инструмент фоновой проверки синтаксиса, новую библиотеку-плоттер, библиотеки баз данных и новый расширенный REPL[22]. В версию 5.3 включена новая функциональность: подмодули для опционально загружаемых модулей[23], новые инструменты оптимизации, библиотеку JSON, и другие возможности[24]. В версии 5.3.1 значительно улучшен DrRacket: добавлен новый инструмент просмотра документации, проверка синтаксиса в фоне включена по умолчанию[25].
Примеры кода
Тривиальная программа «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)))]))
Примечания
- ↑ Racket v7.2 . The Racket Blog.
- ↑ Strickland, T.S.; Fellesisen, Matthias DLS 2010: Contracts for First-Class Classes (2010). Архивировано из оригинала 23 мая 2013 года.
- ↑ 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 года.
- ↑ Welcome to Racket . Дата обращения: 15 августа 2011. Архивировано из оригинала 23 мая 2013 года.
- ↑ Dialects of Racket and Scheme . Дата обращения: 15 августа 2011. Архивировано из оригинала 23 мая 2013 года.
- ↑ Flatt; Findler; Krishnamurthi; Felleisen (1999). Programming Languages as Operating Systems (or, Revenge of the Son of the Lisp Machine). International Conference on Functional Programming.
{{cite conference}}
: Неизвестный параметр|booktitle=
игнорируется (|book-title=
предлагается) (справка) - ↑ 1 2 Findler; Clements; Flanagan; Flatt; Krishnamurthi; Steckler; Felleisen (2001). "DrScheme: A Programming Environment for Scheme" (PDF). Journal of Functional Programming.
- ↑ Felleisen; Findler; Flatt; Krishnamurthi (2004). "The TeachScheme! Project: Computing and Programming for Every Student". Journal of Computer Science Education.
- ↑ Overview . Program by Design. Дата обращения: 17 августа 2011. Архивировано из оригинала 23 мая 2013 года.
- ↑ Macros Matter (3 мая 2007). Дата обращения: 8 августа 2011. Архивировано из оригинала 23 мая 2013 года.
- ↑ 1 2 Flatt, M.; Findler, R. B.; Felleisen, M. (2006). "Scheme with Classes, Mixins, and Traits" (PDF). Asian Symposium on Programming Languages and Systems.
{{cite conference}}
: Неизвестный параметр|booktitle=
игнорируется (|book-title=
предлагается) (справка) - ↑ Flatt, M.; Felleisen, M. (1998). "Units: Cool Modules for Hot Languages". Programming Language Design and Implementation.
{{cite conference}}
: Неизвестный параметр|booktitle=
игнорируется (|book-title=
предлагается) (справка) - ↑ Tobin-Hochstadt, S.; St-Amour, V.; Culpepper, R.; Flatt, M.; Felleisen, M. (2011). "Languages as Libraries" (PDF). Programming Language Design and Implementation.
{{cite conference}}
: Неизвестный параметр|booktitle=
игнорируется (|book-title=
предлагается) (справка) - ↑ PLaneT
- ↑ Matthews, J. (2006). "Component Deployment with PLaneT: You Want it Where?". Scheme and Functional Programming Workshop.
{{cite conference}}
: Неизвестный параметр|booktitle=
игнорируется (|book-title=
предлагается) (справка) - ↑ 1 2 Rebuilding Racket's Graphics Layer (8 декабря 2010). Дата обращения: 23 августа 2011. Архивировано из оригинала 23 мая 2013 года.
- ↑ Clements, J.; Flatt, M.; Felleisen, M. (2001). "Modeling an Algebraic Stepper" (PDF). European Symposium on Programming Languages.
{{cite conference}}
: Неизвестный параметр|booktitle=
игнорируется (|book-title=
предлагается) (справка) - ↑ 1 2 3 "Racket Core Release Notes" . Дата обращения: 15 апреля 2012. Архивировано из оригинала 23 мая 2013 года.
- ↑ Flatt, M. (2002). "Composable and Compilable Macros". International Conference on Functional Programming.
{{cite conference}}
: Неизвестный параметр|booktitle=
игнорируется (|book-title=
предлагается) (справка) - ↑ PLT Scheme version 4.0 (12 июня 2008). Дата обращения: 7 августа 2012. Архивировано из оригинала 23 мая 2013 года.
- ↑ From PLT Scheme to Racket . Racket-lang.org. Дата обращения: 17 августа 2011. Архивировано из оригинала 23 мая 2013 года.
- ↑ Racket 5.2 (9 ноября 2011). Дата обращения: 16 июня 2012. Архивировано из оригинала 23 мая 2013 года.
- ↑ Submodules (3 июня 2012). Дата обращения: 7 августа 2012. Архивировано из оригинала 23 мая 2013 года.
- ↑ Racket 5.3 (7 августа 2012). Дата обращения: 7 августа 2012. Архивировано из оригинала 23 мая 2013 года.
- ↑ Racket 5.3.1 (7 ноября 2012). Дата обращения: 7 ноября 2012. Архивировано из оригинала 23 мая 2013 года.
Литература
- Matthias Felleisen, Conrad Barski M.D., David Van Horn, Eight Students of Northeastern University. Realm of Racket: Learn to Program, One Game at a Time!. — no starch press, June 2013. — 312 p. — ISBN 978-1-59327-491-7.
Уроки
- Quick: An Introduction to Racket with Pictures
- F*dging up a Racket—shows how to write a Brainfuck dialect for Racket
- Raw strings in Racket—a reader extension for raw strings
Руководство по стилю
- How to Program Racket (work in Progress as of 2011-09-25)
Ссылки
- racket-lang.org — официальный сайт Racket
- Blog
- Code Repository
- PLaneT
- The Racket Guide
- The Racket Reference
- All Racket Documentation
- Языки программирования по алфавиту
- Языки программирования, появившиеся в 1994 году
- Функциональные языки программирования
- Объектно-ориентированные языки программирования
- Языки программирования с расширяемым синтаксисом
- Семейство языков программирования лисп
- Языки программирования для образования
- Свободное кросс-платформенное программное обеспечение
- Свободные компиляторы и интерпретаторы
- Реализации языка программирования Scheme