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

Racket
Изображение логотипа
Класс языка мультипарадигмальный:
объектно-ориентированный, процедурный,
рефлективный,
функциональный,
логический,
мета,
языково-ориентированный
Появился в 1994
Автор PLT Inc.
Разработчик Matthias Felleisen[вд]
Расширение файлов .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) — мультипарадигменный язык программирования общего назначения, принадлежащий семейству 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!»

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

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

Литература

Уроки

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

Ссылки

Read other articles:

Administrative post of the Ministry of Commerce Commerce Secretary of Pakistanمُعْتَمَد تجارت پاکستانAppointerPrime Minister of PakistanWebsiteMinistry of Commerce The Commerce Secretary of Pakistan (Urdu: مُعْتَمَد تجارت پاکستان) is the Federal Secretary for the Ministry of Commerce. The position holder is a BPS-22 grade officer, usually belonging to the Pakistan Administrative Service. The Commerce Secretary is considered to be a coveted position in...

 

Town in County Donegal, Ireland Town in Ulster, IrelandBallybofey Bealach FéichTownBallybofeyLocation in IrelandCoordinates: 54°48′00″N 7°47′24″W / 54.8°N 7.790°W / 54.8; -7.790CountryIrelandProvinceUlsterCountyCounty DonegalElevation30 m (100 ft)Population (2016)[1]4,852Time zoneUTC+0 (WET) • Summer (DST)UTC+1 (IST (WEST))Irish Grid ReferenceH194946Websiteballybofeystranorlar.com Historical populationYearPop.±%18211,671...

 

Начинающим Сообщество Порталы Избранное Проекты Запросы Оценивание География История Общество Персоналии Религия Спорт Техника Наука Искусство Философия Портал   Лучшие статьи   Проект   Обсуждение проекта   Участники проекта   Посредничество Добро пожал...

Belahan dada seorang wanita Belahan dada (bahasa Inggris: cleavage) adalah cekungan sempit atau cekungan di antara payudara manusia. Bagian atas belahan dada dapat ditonjolkan oleh pakaian seperti garis leher berpotongan rendah yang memperlihatkan bagian tersebut. Joseph Breen, kepala Administrasi Kode Produksi industri film AS, menciptakan istilah Cleavage dalam arti saat ini ketika mengevaluasi film The Outlaw tahun 1943, yang dibintangi oleh Jane Russell. Istilah ini dijelaskan dalam majal...

 

Video game franchise This article is about the media franchise. For the character, see Sonic the Hedgehog (character). For other uses, see Sonic the Hedgehog (disambiguation). Sonic the HedgehogCreated byYuji NakaNaoto OhshimaHirokazu YasuharaOriginal workSonic the Hedgehog (1991)OwnerSegaYears1991–presentPrint publicationsBook(s)Printed media listComicsComic book listFilms and televisionFilm(s)Films listShort film(s)Web series listAnimated seriesAnimated series listGamesVideo game(s)List o...

 

Bihar

American cartoonist Austin BriggsBorn(1908-09-08)September 8, 1908Humboldt, MinnesotaDiedOctober 10, 1973(1973-10-10) (aged 65)ParisNationalityAmericanArea(s)Cartoonist Austin Briggs (September 8, 1908 – October 10, 1973) was a cartoonist and illustrator. Born in Humboldt, Minnesota he grew up in Detroit, Michigan before moving to New York City as a teenager. After working for a while at an advertising agency, he began providing illustrations for the upmarket pulp magazine Blue Boo...

 

The Borgarsyssel Museum at Sarpsborg The main entrance of the Borgarsyssel Museum The Borgarsyssel Museum is a museum located at Sarpsborg in Viken county, Norway. The museum was named after Borgarsysla, the Old Norse name of Østfold county.[1][2] It was founded in 1921 and documents Østfold's cultural history from the Middle Ages. The open-air collection includes about twenty historic buildings. It is located at the site of the ruins of the Medieval St. Nicholas's Church, w...

 

Human fed to typhus-infected lice Cages with typhus-carrying lice strapped onto a person's thigh. During World War II, feeding the lice with human subjects' blood was the only way to produce a viable typhus vaccine. A louse-feeder was a job in interwar and Nazi-occupied Poland, at the Lviv Institute for Study of Typhus and Virology and the associated Institute in Kraków, Poland. Louse-feeders were human sources of blood for lice infected with typhus, which were then used to research possible...

Russian Islamic and Turkic historian (1869–1930) You can help expand this article with text translated from the corresponding article in Russian. (May 2023) Click [show] for important translation instructions. View a machine-translated version of the Russian article. Machine translation, like DeepL or Google Translate, is a useful starting point for translations, but translators must revise errors as necessary and confirm that the translation is accurate, rather than simply copy-pastin...

 

U.S. corporate executive from Citi Private Bank Ida LiuBornOrinda, California, U.S.NationalityAmericanEducationWellesley College (BA)Wharton School of the University of Pennsylvania (Merrill Lynch MBA)OccupationBanking executiveTitleGlobal Head of Citi Private BankChildren2 Ida Liu (Chinese: 劉宏敏) is a Chinese American banking executive and currently the Global Head of Citi Private Bank, a position which she has held since April 2021. She previously headed Citi Private Bank in North Amer...

 

Wasserturm Elmshorn Wasserturm Daten Denkmalschutz: Kulturdenkmal von besonderer Bedeutung Baujahr: 1902 Turmhöhe: 43,5 m Nutzhöhe: 39,5 m Behälterart: Intze 1 Volumen des Behälters: 550 m³ Stilllegung: 1989 Ursprüngliche Nutzung: Städtische Wasserversorgung Heutige Nutzung: Café, Kerzenzieherei Der Elmshorner Wasserturm an der Jahnstraße wurde 1902 errichtet. Der 43,5 m hohe Wasserturm ist ein eingetragenes Kulturdenkmal. Inhaltsverzeichnis 1 Bau 2 Ursprüngliche Nutzung 3 Heutige N...

Software company Precisely Holdings, LLCTypePrivateIndustryData ManagementFounded1968; 55 years ago (1968) in Englewood Cliffs, New JerseyFounderDuane Whitlow and Stan RintelHeadquartersEnglewood Cliffs, New Jersey, U.S. (1970s–1980s)Woodcliff Lake, New Jersey (1980s–2010s)Pearl River, New York, U.S. (2010s)Burlington, Massachusetts, U.S. (2020s)Key peopleJosh Rogers (CEO)Revenue$600 million (2020)[1]Number of employees2,000 (2019, 2021)[2][3]Webs...

 

American actor (born 1983) Manish DayalDayal at the 2017 Berlin International Film Festival premiere of Viceroy's HouseBornManish Patel (1983-06-17) June 17, 1983 (age 40)[1]Orangeburg, South Carolina, U.S.OccupationActorSpouseSnehal PatelChildren2 Manish Patel (born June 17, 1983), known professionally as Manish Dayal, is an American actor. He is best known for his roles as Raj Kher in The CW hit teen series 90210 as well as in the films The Hundred Foot Journey (2014) and Vicer...

 

район / муниципальный районНоволакский район Село Зори-Отар 43°07′00″ с. ш. 46°29′00″ в. д.HGЯO Страна  Россия Входит в Дагестан Включает 13 муниципальных образований Адм. центр село Новолакское Глава районной администрации Айдиев Магомед-Гаджи Шихамирович П...

Mountain in Switzerland Piz MezPiz Mez from RadonsHighest pointElevation2,718 m (8,917 ft)Prominence72 m (236 ft)[1]Parent peakUnnamed summit (2,752 m)Isolation2.6 km (1.6 mi) Coordinates46°32′1″N 9°32′54″E / 46.53361°N 9.54833°E / 46.53361; 9.54833GeographyPiz MezLocation in Switzerland LocationGraubünden, SwitzerlandParent rangeOberhalbstein AlpsClimbingEasiest routeFrom Radons Piz Mez is a mounta...

 

Railway station in Melbourne, Australia HallamPTV commuter rail stationWestbound view from Platform 2 in November 2022General informationLocationHallam Road,Hallam, Victoria 3803City of CaseyAustraliaCoordinates38°01′04″S 145°16′13″E / 38.0179°S 145.2702°E / -38.0179; 145.2702Owned byVicTrackOperated byMetro TrainsLine(s)PakenhamDistance37.45 kilometres fromSouthern CrossPlatforms2 sideTracks2Connections BusConstructionStructure typeElevatedParking590 space...

 

Adult video game distribution platform NutakuNutaku's 2018 logo, neutral colored.IndustryAdult, Video GamesFoundedJanuary 2015; 8 years ago (January 2015)HeadquartersMontreal, Quebec, CanadaProductsPC GamesOnline gamesFree-to-play gamesDownloadable gamesMobile gamesOwnerAyloWebsitenutaku.com (SFW)nutaku.net (NSFW) Nutaku is an adult gaming platform with primarily hentai games. Located in Canada, Nutaku offers games with mature content. The platform focuses on browser, downloadabl...

Association football player (born 2000) Wassim Aouachria Aouachria with Aldershot Town in 2021Personal informationFull name Wassim Chouaib Aouachria[1]Date of birth (2000-05-12) 12 May 2000 (age 23)[2]Place of birth Roubaix, FranceHeight 1.88 m (6 ft 2 in)[3]Position(s) ForwardTeam informationCurrent team Galway UnitedNumber 31Youth career2006–2013 Aubagne2013–2019 Marseille2019–2022 Charlton AthleticSenior career*Years Team Apps (Gls)2020–2...

 

German armored division This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: 10th SS Panzer Division Frundsberg – news · newspapers · books · scholar · JSTOR (December 2015) (Learn how and when to remove this template message) 10th SS Panzer Division Frundsberg10. SS-Panzerdivision FrundsbergDivisional insigniaAc...

 

Strategi Solo vs Squad di Free Fire: Cara Menang Mudah!