Racket (язык программирования): различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
[отпатрулированная версия][отпатрулированная версия]
Содержимое удалено Содержимое добавлено
м top: replaced: {{cite article| → {{cite news|
Преамбула: обновление
Строка 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 = [[26 января]] [[2018]]
|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; 5 лет назад (2019-01-30))
Система типов динамическая, строгая, статическая
Диалекты 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!»

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

Результат программы, который покажет 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)))]))

Примечания

  1. Racket v7.2. The Racket Blog.
  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. {{cite conference}}: Неизвестный параметр |booktitle= игнорируется (|book-title= предлагается) (справка)
  7. 1 2 Findler; Clements; Flanagan; Flatt; Krishnamurthi; Steckler; Felleisen (2001). "DrScheme: A Programming Environment for Scheme" (PDF). Journal of Functional Programming.
  8. Felleisen; Findler; Flatt; Krishnamurthi (2004). "The TeachScheme! Project: Computing and Programming for Every Student". Journal of Computer Science Education.
  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. {{cite conference}}: Неизвестный параметр |booktitle= игнорируется (|book-title= предлагается) (справка)
  12. Flatt, M.; Felleisen, M. (1998). "Units: Cool Modules for Hot Languages". Programming Language Design and Implementation. {{cite conference}}: Неизвестный параметр |booktitle= игнорируется (|book-title= предлагается) (справка)
  13. 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= предлагается) (справка)
  14. PLaneT
  15. Matthews, J. (2006). "Component Deployment with PLaneT: You Want it Where?". Scheme and Functional Programming Workshop. {{cite conference}}: Неизвестный параметр |booktitle= игнорируется (|book-title= предлагается) (справка)
  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. {{cite conference}}: Неизвестный параметр |booktitle= игнорируется (|book-title= предлагается) (справка)
  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. {{cite conference}}: Неизвестный параметр |booktitle= игнорируется (|book-title= предлагается) (справка)
  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 года.

Литература

  • 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.

Уроки

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

Ссылки