Racket (язык программирования): различия между версиями
[отпатрулированная версия] | [непроверенная версия] |
Спасено источников — 1, отмечено мёртвыми — 0. Сообщить об ошибке. См. FAQ.) #IABot (v2.0.8 |
Спасено источников — 4, отмечено мёртвыми — 0. Сообщить об ошибке. См. FAQ.) #IABot (v2.0.9.5 |
||
(не показано 9 промежуточных версий 4 участников) | |||
Строка 9: | Строка 9: | ||
| designer = PLT Inc. |
| designer = PLT Inc. |
||
| extension = |
| extension = |
||
| latest_release_version = 8. |
| latest_release_version = 8.4<ref>{{Cite news|title=Racket v8.4|url=https://blog.racket-lang.org/2022/02/racket-v8-4.html|accessdate=2022-04-05|archivedate=2022-05-12|archiveurl=https://web.archive.org/web/20220512130628/https://blog.racket-lang.org/2022/02/racket-v8-4.html}}</ref> |
||
| latest_release_date = {{Start date and age| |
| latest_release_date = {{Start date and age|2022|02|09}} |
||
| latest_preview_version = |
| latest_preview_version = |
||
| latest_preview_date = |
| latest_preview_date = |
||
Строка 25: | Строка 25: | ||
'''Racket''' (ранее — PLTScheme) — [[Мультипарадигмальный язык программирования|мультипарадигменный]] [[язык программирования]] общего назначения, принадлежащий семейству [[Lisp]]/[[Scheme]]. Предоставляет среду [[языково-ориентированное программирование]] — одно из предназначений racket — создание, разработка и реализация языков программирования<ref>{{cite web|title=Welcome to Racket |url=http://docs.racket-lang.org/guide/intro.html |accessdate=2011-08-15 |archiveurl=https://www.webcitation.org/6GpxCUspP?url=http://docs.racket-lang.org/guide/intro.html |archivedate=2013-05-23 }}</ref><ref>{{cite web|title=Dialects of Racket and Scheme |url=http://docs.racket-lang.org/guide/dialects.html |accessdate=2011-08-15 |archiveurl=https://www.webcitation.org/6GpxDDkhP?url=http://docs.racket-lang.org/guide/dialects.html |archivedate=2013-05-23 }}</ref>. Язык используется в различных контекстах: как [[скриптовый язык]], как язык общего назначения, в обучении информатике, в научных исследованиях. |
'''Racket''' (ранее — PLTScheme) — [[Мультипарадигмальный язык программирования|мультипарадигменный]] [[язык программирования]] общего назначения, принадлежащий семейству [[Lisp]]/[[Scheme]]. Предоставляет среду [[языково-ориентированное программирование]] — одно из предназначений racket — создание, разработка и реализация языков программирования<ref>{{cite web|title=Welcome to Racket |url=http://docs.racket-lang.org/guide/intro.html |accessdate=2011-08-15 |archiveurl=https://www.webcitation.org/6GpxCUspP?url=http://docs.racket-lang.org/guide/intro.html |archivedate=2013-05-23 }}</ref><ref>{{cite web|title=Dialects of Racket and Scheme |url=http://docs.racket-lang.org/guide/dialects.html |accessdate=2011-08-15 |archiveurl=https://www.webcitation.org/6GpxDDkhP?url=http://docs.racket-lang.org/guide/dialects.html |archivedate=2013-05-23 }}</ref>. Язык используется в различных контекстах: как [[скриптовый язык]], как язык общего назначения, в обучении информатике, в научных исследованиях. |
||
Платформа предоставляет пользователю реализацию языка Racket, включая развитую [[Среда выполнения|среду выполнения]] ({{lang-en|run time system}})<ref name="PLOS">{{cite conference|last1=Flatt|last2=Findler|last3=Krishnamurthi|last4=Felleisen|conference=International Conference on Functional Programming| |
Платформа предоставляет пользователю реализацию языка Racket, включая развитую [[Среда выполнения|среду выполнения]] ({{lang-en|run time system}})<ref name="PLOS">{{cite conference|last1=Flatt|last2=Findler|last3=Krishnamurthi|last4=Felleisen|conference=International Conference on Functional Programming|book-title=Programming Languages as Operating Systems (or, Revenge of the Son of the Lisp Machine)|year=1999}}</ref>, различные библиотеки, [[JIT-компилятор]] и т. д., а также среду разработки DrRacket (ранее известную, как DrScheme) написанную на Racket<ref name="drscheme">{{статья |заглавие=DrScheme: A Programming Environment for Scheme |издание={{Нп3|Journal of Functional Programming}} |ссылка=http://www.ccs.neu.edu/racket/pubs/jfp01-fcffksf.pdf |язык=en |автор=Findler; Clements; Flanagan; Flatt; Krishnamurthi; Steckler; Felleisen |год=2001 |тип=journal |archivedate=2013-04-30 |archiveurl=https://web.archive.org/web/20130430220153/http://www.ccs.neu.edu/racket/pubs/jfp01-fcffksf.pdf }}</ref>. Эта программная среда используется в учебном курсе {{нп5|ProgramByDesign}} [[Массачусетский технологический институт|Массачусетского технологического института]]<ref name="teachscheme">{{cite news | last1=Felleisen | last2=Findler | last3=Flatt | last4=Krishnamurthi | year=2004 | url=http://www.ccs.neu.edu/scheme/pubs/#cse2003-fffk | title=The TeachScheme! Project: Computing and Programming for Every Student | journal=Journal of Computer Science Education | accessdate=2013-05-22 | archivedate=2012-05-01 | archiveurl=https://web.archive.org/web/20120501080829/http://www.ccs.neu.edu/scheme/pubs/#cse2003-fffk }}</ref><ref>{{cite web|url=http://programbydesign.org/overview |title=Overview |publisher=Program by Design |date= |accessdate=2011-08-17 |archiveurl=https://www.webcitation.org/6GpxDsIGb?url=http://programbydesign.org/overview |archivedate=2013-05-23 }}</ref>. Основной язык Racket отличает мощная [[макрос]]истема, позволяющая создавать встраиваемые и [[Предметно-ориентированный язык программирования|предметно-ориентированные]] языки программирования, языковые конструкции (к примеру, [[класс (программирование)|классы]] и [[модуль (программирование)|модули]]) и диалекты Racket с различной [[семантика (программирование)|семантикой]]<ref name="macros-matter">{{cite web|title=Macros Matter |url=http://blog.racket-lang.org/2007/05/macros-matter.html |accessdate=2011-08-08 |date=2007-05-03 |archiveurl=https://www.webcitation.org/6GpxEQe5a?url=http://blog.racket-lang.org/2007/05/macros-matter.html |archivedate=2013-05-23 }}</ref><ref name="scheme-with-classes">{{cite conference |
||
| last1 = Flatt |
| last1 = Flatt |
||
| first1 = M. |
|||
| last2 = Findler |
| last2 = Findler |
||
| first2 = R. B. |
|||
| last3 = Felleisen |
| last3 = Felleisen |
||
| first3 = M. |
|||
| title = Scheme with Classes, Mixins, and Traits |
| title = Scheme with Classes, Mixins, and Traits |
||
| |
| book-title = Asian Symposium on Programming Languages and Systems |
||
| date = 2006 |
| date = 2006 |
||
| url = http://www.ccs.neu.edu/scheme/pubs/asplas06-fff.pdf |
| url = http://www.ccs.neu.edu/scheme/pubs/asplas06-fff.pdf |
||
| access-date = 2013-05-22 |
|||
</ref><ref name="units">{{cite conference |
|||
| archive-date = 2012-05-10 |
|||
⚫ | |||
| archive-url = https://web.archive.org/web/20120510023455/http://www.ccs.neu.edu/scheme/pubs/asplas06-fff.pdf |
|||
⚫ | |||
| url-status = live |
|||
}} {{Cite web |url=http://www.ccs.neu.edu/scheme/pubs/asplas06-fff.pdf |title=Источник |access-date=2013-05-22 |archive-date=2012-05-10 |archive-url=https://web.archive.org/web/20120510023455/http://www.ccs.neu.edu/scheme/pubs/asplas06-fff.pdf |url-status=unfit }}</ref><ref name="units">{{cite conference |
|||
⚫ | |||
| first1 = M. |
|||
⚫ | |||
| first2 = M. |
|||
| title = Units: Cool Modules for Hot Languages |
| title = Units: Cool Modules for Hot Languages |
||
| |
| book-title = Programming Language Design and Implementation |
||
| date = 1998 |
| date = 1998 |
||
| url = http://www.ccs.neu.edu/scheme/pubs/pldi98-ff.ps.gz |
| url = http://www.ccs.neu.edu/scheme/pubs/pldi98-ff.ps.gz |
||
| access-date = 2013-05-22 |
|||
</ref><ref name="languages-as-libraries">{{cite conference |
|||
| archive-date = 2011-11-04 |
|||
⚫ | |||
| archive-url = https://web.archive.org/web/20111104015337/http://www.ccs.neu.edu/scheme/pubs/pldi98-ff.ps.gz |
|||
⚫ | |||
| url-status = live |
|||
⚫ | |||
}} {{Cite web |url=http://www.ccs.neu.edu/scheme/pubs/pldi98-ff.ps.gz |title=Источник |access-date=2013-05-22 |archive-date=2011-11-04 |archive-url=https://web.archive.org/web/20111104015337/http://www.ccs.neu.edu/scheme/pubs/pldi98-ff.ps.gz |url-status=unfit }}</ref><ref name="languages-as-libraries">{{cite conference |
|||
⚫ | |||
⚫ | |||
⚫ | |||
| first1 = S. |
|||
⚫ | |||
| first2 = V. |
|||
⚫ | |||
| first3 = R. |
|||
⚫ | |||
| first4 = M. |
|||
⚫ | |||
| first5 = M. |
|||
| title = Languages as Libraries |
| title = Languages as Libraries |
||
| |
| book-title = Programming Language Design and Implementation |
||
| date = 2011 |
| date = 2011 |
||
| url = http://www.ccs.neu.edu/scheme/pubs/pldi11-thacff.pdf |
| url = http://www.ccs.neu.edu/scheme/pubs/pldi11-thacff.pdf |
||
| access-date = 2013-05-22 |
|||
</ref>. |
|||
| archive-date = 2012-03-10 |
|||
| archive-url = https://web.archive.org/web/20120310150703/http://www.ccs.neu.edu/scheme/pubs/pldi11-thacff.pdf |
|||
| url-status = live |
|||
}} {{Cite web |url=http://www.ccs.neu.edu/scheme/pubs/pldi11-thacff.pdf |title=Источник |access-date=2013-05-22 |archive-date=2012-03-10 |archive-url=https://web.archive.org/web/20120310150703/http://www.ccs.neu.edu/scheme/pubs/pldi11-thacff.pdf |url-status=unfit }}</ref>. |
|||
Система является [[Свободное программное обеспечение|свободным]] и [[Открытое программное обеспечение|открытым ПО]], распространяемым на условиях [[LGPL]]. Расширения и пакеты, написанные сообществом, доступны на PLaneT<ref> |
Система является [[Свободное программное обеспечение|свободным]] и [[Открытое программное обеспечение|открытым ПО]], распространяемым на условиях [[LGPL]]. Расширения и пакеты, написанные сообществом, доступны на PLaneT<ref>{{Cite web |url=http://planet.racket-lang.org/ |title=PLaneT |access-date=2013-05-22 |archive-date=2013-05-30 |archive-url=https://web.archive.org/web/20130530004924/http://planet.racket-lang.org/ |url-status=live }}</ref>, веб-дистрибутиве системы<ref name="planet">{{cite conference | title = Component Deployment with PLaneT: You Want it Where? | last = Matthews | first = J. | book-title = Scheme and Functional Programming Workshop | year = 2006}}</ref>. |
||
== История == |
== История == |
||
Строка 61: | Строка 83: | ||
Параллельно с этим команда начала проведение семинаров для учителей средней школы, обучая их разработке программ и [[Функциональное программирование|функциональному программированию]]. Полевые испытания с этими учителями и их учениками определили основные направления развития продукта. |
Параллельно с этим команда начала проведение семинаров для учителей средней школы, обучая их разработке программ и [[Функциональное программирование|функциональному программированию]]. Полевые испытания с этими учителями и их учениками определили основные направления развития продукта. |
||
DrScheme был дополнен [[Учебный язык программирования|учебными языками]], пошаговым алгебраическим вычислителем ({{lang-en|algebraic stepper}})<ref>{{cite conference | last1 = Clements | first1 = J. | last2 = Flatt | first2 = M. | last3 = Felleisen | first3 = M. | title = Modeling an Algebraic Stepper | |
DrScheme был дополнен [[Учебный язык программирования|учебными языками]], пошаговым алгебраическим вычислителем ({{lang-en|algebraic stepper}})<ref>{{cite conference | last1 = Clements | first1 = J. | last2 = Flatt | first2 = M. | last3 = Felleisen | first3 = M. | title = Modeling an Algebraic Stepper | book-title = European Symposium on Programming Languages | date = 2001 | url = http://www.ccs.neu.edu/scheme/pubs/esop2001-cff.pdf | access-date = 2013-05-22 | archive-date = 2012-05-10 | archive-url = https://web.archive.org/web/20120510023612/http://www.ccs.neu.edu/scheme/pubs/esop2001-cff.pdf | url-status = live }} {{Cite web |url=http://www.ccs.neu.edu/scheme/pubs/esop2001-cff.pdf |title=Источник |access-date=2013-05-22 |archive-date=2012-05-10 |archive-url=https://web.archive.org/web/20120510023612/http://www.ccs.neu.edu/scheme/pubs/esop2001-cff.pdf |url-status=unfit }}</ref>, прозрачным [[REPL]]-циклом, подсистемой печати на основе конструкторов (cons) и множеством других нововведений, которые сделали DrScheme качественным образовательным продуктом. В 2001 году разработчиками языка был написан и опубликован учебник {{нп5|How to Design Programs}}, основанный на их философии обучения программированию. |
||
=== Развитие DrScheme === |
=== Развитие DrScheme === |
||
В первое поколение версий DrScheme были введены средства для «{{нп5|Программирование в большом и программирование в малом|программирования в большом|en|Programming in the large and programming in the small}}» c использованием [[модуль (программирование)|модулей]] и [[класс (программирование)|классов]]. В версии 42 были добавлены юниты: система модулей — [[Объект первого класса|объектов первого класса]], позволяющая дополнять модули в процессе разработки больших систем<ref name="release-notes">{{cite web|title="Racket Core Release Notes" |url=http://docs.racket-lang.org/release-notes/racket/HISTORY.txt |accessdate=2012-04-15 |archiveurl=https://www.webcitation.org/6GpxFjzKz?url=http://docs.racket-lang.org/release-notes/racket/HISTORY.txt |archivedate=2013-05-23 }}</ref>. Система классов была с одной стороны дополнена (в частности, [[Интерфейс (объектно-ориентированное программирование)|интерфейсами]] в стиле [[Java]]), а с другой — сокращена (в частности было удалено [[множественное наследование]])<ref name="scheme-with-classes" />. Язык развивался на протяжении ряда последовательных версий и набрал популярность к версии 53, что ещё ускорило работу над ним и следующая версия 100, стала эквивалентом «1.0». |
В первое поколение версий DrScheme были введены средства для «{{нп5|Программирование в большом и программирование в малом|программирования в большом|en|Programming in the large and programming in the small}}» c использованием [[модуль (программирование)|модулей]] и [[класс (программирование)|классов]]. В версии 42 были добавлены юниты: система модулей — [[Объект первого класса|объектов первого класса]], позволяющая дополнять модули в процессе разработки больших систем<ref name="release-notes">{{cite web|title="Racket Core Release Notes" |url=http://docs.racket-lang.org/release-notes/racket/HISTORY.txt |accessdate=2012-04-15 |archiveurl=https://www.webcitation.org/6GpxFjzKz?url=http://docs.racket-lang.org/release-notes/racket/HISTORY.txt |archivedate=2013-05-23 }}</ref>. Система классов была с одной стороны дополнена (в частности, [[Интерфейс (объектно-ориентированное программирование)|интерфейсами]] в стиле [[Java]]), а с другой — сокращена (в частности было удалено [[множественное наследование]])<ref name="scheme-with-classes" />. Язык развивался на протяжении ряда последовательных версий и набрал популярность к версии 53, что ещё ускорило работу над ним и следующая версия 100, стала эквивалентом «1.0». |
||
В следующую крупную ревизию, получившую номер 200, была введена новая модульная система по умолчанию, интегрированная с макросами<ref name="release-notes" />. В частности, модульная система гарантирует, что вычисления времени выполнения и вычисления времени компиляции разделены для поддержки «башни языков»<ref>{{cite conference | title = Composable and Compilable Macros | last = Flatt | first = M. | |
В следующую крупную ревизию, получившую номер 200, была введена новая модульная система по умолчанию, интегрированная с макросами<ref name="release-notes" />. В частности, модульная система гарантирует, что вычисления времени выполнения и вычисления времени компиляции разделены для поддержки «башни языков»<ref>{{cite conference | title = Composable and Compilable Macros | last = Flatt | first = M. | book-title = International Conference on Functional Programming | date = 2002}}</ref>. В отличие от юнитов, эти модули не являются [[Объект первого класса|объектами первого класса]]. |
||
В версию 300 введена поддержка [[Unicode]], {{нп5|Foreign_function_interface|библиотека интерфейса с внешними функциями|en|Foreign_function_interface}} и изменена система классов<ref name="release-notes" />. Позднее для релизов версии 300 была улучшена [[производительность компьютера|производительность]] путём добавления [[JIT-компилятор]]а и [[Сборка мусора (программирование)|сборки мусора]] с поддержкой [[Сборка мусора (программирование)#Поколения объектов|поколений объектов]]. |
В версию 300 введена поддержка [[Unicode]], {{нп5|Foreign_function_interface|библиотека интерфейса с внешними функциями|en|Foreign_function_interface}} и изменена система классов<ref name="release-notes" />. Позднее для релизов версии 300 была улучшена [[производительность компьютера|производительность]] путём добавления [[JIT-компилятор]]а и [[Сборка мусора (программирование)|сборки мусора]] с поддержкой [[Сборка мусора (программирование)#Поколения объектов|поколений объектов]]. |
||
Строка 75: | Строка 97: | ||
7 июня 2010 года PLT Scheme был переименован в Racket<ref>{{cite web|url=http://racket-lang.org/new-name.html |title=From PLT Scheme to Racket |publisher=Racket-lang.org |date= |accessdate=2011-08-17 |archiveurl=https://www.webcitation.org/6GpxH5SvA?url=http://racket-lang.org/new-name.html |archivedate=2013-05-23 }}</ref>, что совпало с выпуском версии 5.0. Впоследствии, в версии 5.1, базовая программа GUI была переписана с [[C++]] на Racket c помощью собственного инструментария пользовательского интерфейса на всех платформах<ref name="gui-rebuild" />. В версии 5.2 включен инструмент фоновой [[Синтаксис (программирование)|проверки синтаксиса]], новую библиотеку-плоттер, библиотеки баз данных и новый расширенный REPL<ref name="5.2">{{cite web|url=http://blog.racket-lang.org/2011/11/racket-v52.html |title=Racket 5.2 |published=PLT, Inc |date=2011-11-09 |accessdate=2012-06-16 |archiveurl=https://www.webcitation.org/6GpxHftxZ?url=http://blog.racket-lang.org/2011/11/racket-v52.html |archivedate=2013-05-23 }}</ref>. В версию 5.3 включена новая функциональность: подмодули для опционально загружаемых модулей<ref name="submodules">{{cite web|url=http://blog.racket-lang.org/2012/06/submodules.html |title=Submodules |date=2012-06-03 |accessdate=2012-08-07 |archiveurl=https://www.webcitation.org/6GpxIGjy1?url=http://blog.racket-lang.org/2012/06/submodules.html |archivedate=2013-05-23 }}</ref>, новые инструменты [[Оптимизация компилятора|оптимизации]], библиотека [[JSON]], и другие возможности<ref name="5.3">{{cite web|url=http://blog.racket-lang.org/2012/08/racket-v53.html |title=Racket 5.3 |published=PLT, Inc |date=2012-08-07 |accessdate=2012-08-07 |archiveurl=https://www.webcitation.org/6GpxItSQR?url=http://blog.racket-lang.org/2012/08/racket-v53.html |archivedate=2013-05-23 }}</ref>. В версии 5.3.1 значительно улучшен DrRacket: добавлен новый инструмент просмотра документации, проверка синтаксиса в фоне включена по умолчанию<ref name="5.3.1">{{cite web|url=http://blog.racket-lang.org/2012/11/racket-v531.html |title=Racket 5.3.1 |published=PLT, Inc |date=2012-11-07 |accessdate=2012-11-07 |archiveurl=https://www.webcitation.org/6GpxJVmyc?url=http://blog.racket-lang.org/2012/11/racket-v531.html |archivedate=2013-05-23 }}</ref>. |
7 июня 2010 года PLT Scheme был переименован в Racket<ref>{{cite web|url=http://racket-lang.org/new-name.html |title=From PLT Scheme to Racket |publisher=Racket-lang.org |date= |accessdate=2011-08-17 |archiveurl=https://www.webcitation.org/6GpxH5SvA?url=http://racket-lang.org/new-name.html |archivedate=2013-05-23 }}</ref>, что совпало с выпуском версии 5.0. Впоследствии, в версии 5.1, базовая программа GUI была переписана с [[C++]] на Racket c помощью собственного инструментария пользовательского интерфейса на всех платформах<ref name="gui-rebuild" />. В версии 5.2 включен инструмент фоновой [[Синтаксис (программирование)|проверки синтаксиса]], новую библиотеку-плоттер, библиотеки баз данных и новый расширенный REPL<ref name="5.2">{{cite web|url=http://blog.racket-lang.org/2011/11/racket-v52.html |title=Racket 5.2 |published=PLT, Inc |date=2011-11-09 |accessdate=2012-06-16 |archiveurl=https://www.webcitation.org/6GpxHftxZ?url=http://blog.racket-lang.org/2011/11/racket-v52.html |archivedate=2013-05-23 }}</ref>. В версию 5.3 включена новая функциональность: подмодули для опционально загружаемых модулей<ref name="submodules">{{cite web|url=http://blog.racket-lang.org/2012/06/submodules.html |title=Submodules |date=2012-06-03 |accessdate=2012-08-07 |archiveurl=https://www.webcitation.org/6GpxIGjy1?url=http://blog.racket-lang.org/2012/06/submodules.html |archivedate=2013-05-23 }}</ref>, новые инструменты [[Оптимизация компилятора|оптимизации]], библиотека [[JSON]], и другие возможности<ref name="5.3">{{cite web|url=http://blog.racket-lang.org/2012/08/racket-v53.html |title=Racket 5.3 |published=PLT, Inc |date=2012-08-07 |accessdate=2012-08-07 |archiveurl=https://www.webcitation.org/6GpxItSQR?url=http://blog.racket-lang.org/2012/08/racket-v53.html |archivedate=2013-05-23 }}</ref>. В версии 5.3.1 значительно улучшен DrRacket: добавлен новый инструмент просмотра документации, проверка синтаксиса в фоне включена по умолчанию<ref name="5.3.1">{{cite web|url=http://blog.racket-lang.org/2012/11/racket-v531.html |title=Racket 5.3.1 |published=PLT, Inc |date=2012-11-07 |accessdate=2012-11-07 |archiveurl=https://www.webcitation.org/6GpxJVmyc?url=http://blog.racket-lang.org/2012/11/racket-v531.html |archivedate=2013-05-23 }}</ref>. |
||
Основным новшеством версии 6.0, выпущенной 24 февраля 2014 года стала новая система пакетов, дистрибутив Racket стал модульным, он состоит из более 200 пакетов. Появилась возможность установки Minimal Racket, где эти пакеты не предустановлены. Также была добавлена поддержка [[JIT-компиляция|JIT-компиляции]] для архитектуры [[ARM (архитектура)|ARM]], значительно улучшено быстродействие Typed Racket и т. д.<ref>{{Cite web|url=https://blog.racket-lang.org/2014/02/racket-v60.html|title= |
Основным новшеством версии 6.0, выпущенной 24 февраля 2014 года стала новая система пакетов, дистрибутив Racket стал модульным, он состоит из более 200 пакетов. Появилась возможность установки Minimal Racket, где эти пакеты не предустановлены. Также была добавлена поддержка [[JIT-компиляция|JIT-компиляции]] для архитектуры [[ARM (архитектура)|ARM]], значительно улучшено быстродействие Typed Racket и т. д.<ref>{{Cite web|url=https://blog.racket-lang.org/2014/02/racket-v60.html|title=Racket v6.0|author=Ryan Culpepper|website=|date=2014-02-26|publisher=blog.racket-lang.org|lang=en|accessdate=2019-02-03|archive-date=2020-11-11|archive-url=https://web.archive.org/web/20201111190317/https://blog.racket-lang.org/2014/02/racket-v60.html|url-status=live}}</ref>. |
||
Racket v6.0|author=Ryan Culpepper|website=|date=2014-02-26|publisher=blog.racket-lang.org|lang=en|accessdate=2019-02-03}}</ref>. |
|||
Основные нововведение версии 7.0, выпущенной в конце июля 2018, связаны с подготовкой замены собственной виртуальной машины Racket на [[Chez Scheme]]<ref>{{Cite web|url=http://blog.racket-lang.org/2018/07/racket-v7-0.html|title= |
Основные нововведение версии 7.0, выпущенной в конце июля 2018, связаны с подготовкой замены собственной виртуальной машины Racket на [[Chez Scheme]]<ref>{{Cite web|url=http://blog.racket-lang.org/2018/07/racket-v7-0.html|title=Racket v7.0|author=Vincent St-Amour|website=|date=2018-07-27|publisher=blog.racket-lang.org|lang=en|accessdate=2019-02-03|archive-date=2019-03-10|archive-url=https://web.archive.org/web/20190310033504/https://blog.racket-lang.org/2018/07/racket-v7-0.html|url-status=live}}</ref>. |
||
Racket v7.0|author=Vincent St-Amour|website=|date=2018-07-27|publisher=blog.racket-lang.org|lang=en|accessdate=2019-02-03}}</ref>. |
|||
=== Racket Chez Scheme === |
=== Racket Chez Scheme === |
||
С начала 2017 года систему макросов и модулей Racket стали переписывать с целью замены сделанной на языке [[C (язык программирования)|Си]] виртуальной машины на [[Chez Scheme]], а также улучшения переносимости и облегчения поддержки Racket. Данный форк Racket известен как Racket CS<ref>{{Cite web|url=http://blog.racket-lang.org/2018/01/racket-on-chez-status.html|title=Racket-on-Chez Status: January 2018|author=Matthew Flatt|website=|date=2018-01-05|publisher=blog.racket-lang.org|lang=en|accessdate=2018-06-26}}</ref>. В январе 2019 года было объявлено о достижении полной функциональности Racket on Chez Scheme. Хотя код, скомпилированный Racket CS, обычно выполняется также быстро, как и для классического Racket, и иногда даже быстрее, общая производительность пока не была признана достаточной, чтобы сделать Racket CS реализацией Racket по умолчанию. В частности упала скорость компиляции и время запуска Racket-системы<ref>{{Cite web|url=http://blog.racket-lang.org/2019/01/racket-on-chez-status.html|title=Racket-on-Chez Status: January 2019|author=Matthew Flatt|website=|date=2019-01-29|publisher=blog.racket-lang.org|lang=en|accessdate=2019-02-03}}</ref> Начиная с версии Racket 7.4, выпущенной 8 августа 2019 года вариант RacketCS получил статус [[бета-версии]], доступной для загрузки с официальной страницы языка программирования<ref>{{Cite web|url=https://blog.racket-lang.org/2019/08/racket-v7-4.html|title=Racket v7.4|author=John Clements|website=|date=|publisher=blog.racket-lang.org|accessdate=2019-10-07}}</ref>. |
С начала 2017 года систему макросов и модулей Racket стали переписывать с целью замены сделанной на языке [[C (язык программирования)|Си]] виртуальной машины на [[Chez Scheme]], а также улучшения переносимости и облегчения поддержки Racket. Данный форк Racket известен как Racket CS<ref>{{Cite web|url=http://blog.racket-lang.org/2018/01/racket-on-chez-status.html|title=Racket-on-Chez Status: January 2018|author=Matthew Flatt|website=|date=2018-01-05|publisher=blog.racket-lang.org|lang=en|accessdate=2018-06-26|archive-date=2018-06-28|archive-url=https://web.archive.org/web/20180628163352/https://blog.racket-lang.org/2018/01/racket-on-chez-status.html|url-status=live}}</ref>. В январе 2019 года было объявлено о достижении полной функциональности Racket on Chez Scheme. Хотя код, скомпилированный Racket CS, обычно выполняется также быстро, как и для классического Racket, и иногда даже быстрее, общая производительность пока не была признана достаточной, чтобы сделать Racket CS реализацией Racket по умолчанию. В частности упала скорость компиляции и время запуска Racket-системы<ref>{{Cite web|url=http://blog.racket-lang.org/2019/01/racket-on-chez-status.html|title=Racket-on-Chez Status: January 2019|author=Matthew Flatt|website=|date=2019-01-29|publisher=blog.racket-lang.org|lang=en|accessdate=2019-02-03|archive-date=2019-02-03|archive-url=https://web.archive.org/web/20190203022331/https://blog.racket-lang.org/2019/01/racket-on-chez-status.html|url-status=live}}</ref> Начиная с версии Racket 7.4, выпущенной 8 августа 2019 года вариант RacketCS получил статус [[бета-версии]], доступной для загрузки с официальной страницы языка программирования<ref>{{Cite web|url=https://blog.racket-lang.org/2019/08/racket-v7-4.html|title=Racket v7.4|author=John Clements|website=|date=|publisher=blog.racket-lang.org|accessdate=2019-10-07|archive-date=2019-10-08|archive-url=https://web.archive.org/web/20191008113807/https://blog.racket-lang.org/2019/08/racket-v7-4.html|url-status=live}}</ref>. |
||
== Примеры кода == |
== Примеры кода == |
||
Строка 134: | Строка 154: | ||
== Литература == |
== Литература == |
||
* {{книга|автор=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|allpages=312 |isbn=978-1-59327-491-7}} |
* {{книга|автор=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!|ссылка=https://archive.org/details/realmofracketlea0000fell |издательство=no starch press|год=June 2013|allpages=312 |isbn=978-1-59327-491-7}} |
||
=== Уроки === |
=== Уроки === |
||
* [http://docs.racket-lang.org/quick/ Quick: An Introduction to Racket with Pictures] |
* [http://docs.racket-lang.org/quick/ Quick: An Introduction to Racket with Pictures] {{Wayback|url=http://docs.racket-lang.org/quick/ |date=20130530141545 }} |
||
* [http://docs.racket-lang.org/continue/ Continue: Web Applications in Racket] |
* [http://docs.racket-lang.org/continue/ Continue: Web Applications in Racket] {{Wayback|url=http://docs.racket-lang.org/continue/ |date=20190203143923 }} |
||
* [http://docs.racket-lang.org/more/ More: Systems Programming with Racket] |
* [http://docs.racket-lang.org/more/ More: Systems Programming with Racket] {{Wayback|url=http://docs.racket-lang.org/more/ |date=20190203143827 }} |
||
* [https://web.archive.org/web/20110817173441/http://hashcollision.org/brainfudge/ F*dging up a Racket]—shows how to write a [[Brainfuck]] dialect for Racket |
* [https://web.archive.org/web/20110817173441/http://hashcollision.org/brainfudge/ F*dging up a Racket]—shows how to write a [[Brainfuck]] dialect for Racket |
||
* [https://web.archive.org/web/20120629065519/http://jarnaldich.me/2011/08/07/raw-strings-in-racket.html Raw strings in Racket]—a reader extension for [[raw string]]s |
* [https://web.archive.org/web/20120629065519/http://jarnaldich.me/2011/08/07/raw-strings-in-racket.html Raw strings in Racket]—a reader extension for [[raw string]]s |
||
Строка 148: | Строка 168: | ||
== Ссылки == |
== Ссылки == |
||
* {{Official website|racket-lang.org}} |
* {{Official website|racket-lang.org}} |
||
* [http://blog.racket-lang.org/ Blog] |
* [http://blog.racket-lang.org/ Blog] {{Wayback|url=http://blog.racket-lang.org/ |date=20130514014818 }} |
||
* [https://web.archive.org/web/20110817064033/http://git.racket-lang.org/plt/ Code Repository] |
* [https://web.archive.org/web/20110817064033/http://git.racket-lang.org/plt/ Code Repository] |
||
* [http://planet.racket-lang.org/ PLaneT] |
* [http://planet.racket-lang.org/ PLaneT] {{Wayback|url=http://planet.racket-lang.org/ |date=20130530004924 }} |
||
* [http://docs.racket-lang.org/guide/ The Racket Guide] |
* [http://docs.racket-lang.org/guide/ The Racket Guide] {{Wayback|url=http://docs.racket-lang.org/guide/ |date=20130514014510 }} |
||
* [http://docs.racket-lang.org/reference/ The Racket Reference] |
* [http://docs.racket-lang.org/reference/ The Racket Reference] {{Wayback|url=http://docs.racket-lang.org/reference/ |date=20130514000926 }} |
||
* [http://docs.racket-lang.org/ All Racket Documentation] |
* [http://docs.racket-lang.org/ All Racket Documentation] {{Wayback|url=http://docs.racket-lang.org/ |date=20130530000703 }} |
||
{{Лисп}} |
{{Лисп}} |
Текущая версия от 15:05, 30 января 2024
Racket | |
---|---|
Класс языка |
мультипарадигмальный: объектно-ориентированный, процедурный, рефлективный, функциональный, логический, мета, языково-ориентированный |
Появился в | 1994 |
Автор | PLT Inc. |
Разработчик | Matthias Felleisen[вд] |
Расширение файлов |
.rkt , .rktl , .rktd , .plt , .ss или .scm |
Выпуск | 8.4[1] (9 февраля 2022 ) |
Система типов | динамическая, строгая, статическая |
Диалекты | 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].
История
[править | править код]Создание
[править | править код]Матиас Феллайзен[англ.] основал компанию 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 были введены средства для «программирования в большом[англ.]» 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].
Основным новшеством версии 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 стали переписывать с целью замены сделанной на языке Си виртуальной машины на Chez Scheme, а также улучшения переносимости и облегчения поддержки Racket. Данный форк Racket известен как Racket CS[28]. В январе 2019 года было объявлено о достижении полной функциональности Racket on Chez Scheme. Хотя код, скомпилированный Racket CS, обычно выполняется также быстро, как и для классического Racket, и иногда даже быстрее, общая производительность пока не была признана достаточной, чтобы сделать Racket CS реализацией Racket по умолчанию. В частности упала скорость компиляции и время запуска Racket-системы[29] Начиная с версии Racket 7.4, выпущенной 8 августа 2019 года вариант RacketCS получил статус бета-версии, доступной для загрузки с официальной страницы языка программирования[30].
Примеры кода
[править | править код]Тривиальная программа «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 R6RS
или #lang R5RS
, соответственно.
Примечания
[править | править код]- ↑ "Racket v8.4". Архивировано 12 мая 2022. Дата обращения: 5 апреля 2022.
- ↑ 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.
- ↑ 1 2 Findler; Clements; Flanagan; Flatt; Krishnamurthi; Steckler; Felleisen. DrScheme: A Programming Environment for Scheme (англ.) // Journal of Functional Programming[англ.] : journal. — 2001. Архивировано 30 апреля 2013 года.
- ↑ Felleisen; Findler; Flatt; Krishnamurthi (2004). "The TeachScheme! Project: Computing and Programming for Every Student". Journal of Computer Science Education. Архивировано 1 мая 2012. Дата обращения: 22 мая 2013.
- ↑ 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. Архивировано (PDF) 10 мая 2012. Дата обращения: 22 мая 2013. Источник . Дата обращения: 22 мая 2013. Архивировано 10 мая 2012 года.
- ↑ Flatt, M.; Felleisen, M. (1998). "Units: Cool Modules for Hot Languages". Programming Language Design and Implementation. Архивировано 4 ноября 2011. Дата обращения: 22 мая 2013. Источник . Дата обращения: 22 мая 2013. Архивировано 4 ноября 2011 года.
- ↑ 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 года.
- ↑ PLaneT . Дата обращения: 22 мая 2013. Архивировано 30 мая 2013 года.
- ↑ Matthews, J. (2006). "Component Deployment with PLaneT: You Want it Where?". Scheme and Functional Programming Workshop.
- ↑ 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. Архивировано (PDF) 10 мая 2012. Дата обращения: 22 мая 2013. Источник . Дата обращения: 22 мая 2013. Архивировано 10 мая 2012 года.
- ↑ 1 2 3 "Racket Core Release Notes" . Дата обращения: 15 апреля 2012. Архивировано 23 мая 2013 года.
- ↑ Flatt, M. (2002). "Composable and Compilable Macros". International Conference on Functional Programming.
- ↑ 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 года.
- ↑ Ryan Culpepper. Racket v6.0 (англ.). blog.racket-lang.org (26 февраля 2014). Дата обращения: 3 февраля 2019. Архивировано 11 ноября 2020 года.
- ↑ Vincent St-Amour. Racket v7.0 (англ.). blog.racket-lang.org (27 июля 2018). Дата обращения: 3 февраля 2019. Архивировано 10 марта 2019 года.
- ↑ Matthew Flatt. Racket-on-Chez Status: January 2018 (англ.). blog.racket-lang.org (5 января 2018). Дата обращения: 26 июня 2018. Архивировано 28 июня 2018 года.
- ↑ Matthew Flatt. Racket-on-Chez Status: January 2019 (англ.). blog.racket-lang.org (29 января 2019). Дата обращения: 3 февраля 2019. Архивировано 3 февраля 2019 года.
- ↑ John Clements. Racket v7.4 . blog.racket-lang.org. Дата обращения: 7 октября 2019. Архивировано 8 октября 2019 года.
Литература
[править | править код]- 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 Архивная копия от 30 мая 2013 на Wayback Machine
- Continue: Web Applications in Racket Архивная копия от 3 февраля 2019 на Wayback Machine
- More: Systems Programming with Racket Архивная копия от 3 февраля 2019 на Wayback Machine
- 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 Архивная копия от 20 февраля 2013 на Wayback Machine (work in Progress as of 2011-09-25)
Ссылки
[править | править код]- racket-lang.org — официальный сайт Racket
- Blog Архивная копия от 14 мая 2013 на Wayback Machine
- Code Repository
- PLaneT Архивная копия от 30 мая 2013 на Wayback Machine
- The Racket Guide Архивная копия от 14 мая 2013 на Wayback Machine
- The Racket Reference Архивная копия от 14 мая 2013 на Wayback Machine
- All Racket Documentation Архивная копия от 30 мая 2013 на Wayback Machine
- Языки программирования по алфавиту
- Языки программирования, появившиеся в 1994 году
- Функциональные языки программирования
- Объектно-ориентированные языки программирования
- Языки программирования с расширяемым синтаксисом
- Языки программирования семейства Лиспа
- Языки программирования для образования
- Свободное кроссплатформенное программное обеспечение
- Свободные компиляторы и интерпретаторы
- Реализации языка программирования Scheme