Raketa (programovací jazyk)

Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od verze recenzované 16. března 2022; kontroly vyžadují 5 úprav .
raketa
Jazyková třída multiparadigma :
objektově orientované , procedurální ,
reflektivní ,
funkční ,
logické ,
meta ,
jazykově orientované
Objevil se v 1994
Autor Společnost PLT Inc.
Přípona souboru .rkt, .rktl, .rktd, .scrbl, nebo .plt_.ss.scm
Uvolnění 8.4 [1]  (9. února 2022 ) ( 2022-02-09 )
Typový systém dynamický , přísný , statický
Dialekty Typed Racket , Lazy Racket , Scribble , FrTime atd.
Byl ovlivněn Schéma , Eiffel [2]
ovlivnil Schéma [3]
Licence LGPL
webová stránka racket-lang.org
Plošina multiplatformní

Racket (dříve PLTScheme) je univerzální multiparadigmatický programovací jazyk patřící do rodiny Lisp / Scheme . Poskytuje prostředí pro jazykově orientované programování – jedním z účelů rakety je tvorba, vývoj a implementace programovacích jazyků [4] [5] . Jazyk se používá v různých kontextech: jako skriptovací jazyk , jako jazyk pro všeobecné použití, ve výuce informatiky, ve vědeckém výzkumu.

Platforma poskytuje uživateli implementaci jazyka Racket, včetně vyvinutého runtime prostředí ( English  run time system ) [6] , různých knihoven, JIT kompilátoru atd., a také vývojového prostředí DrRacket (dříve známého jako DrScheme ) napsaný v Racket [ 7] . Toto programovací prostředí je použito v kurzu MIT ProgramByDesign [en] [ 8 [ 9] . Základní jazyk Racket obsahuje výkonný systém maker , který vám umožňuje vytvářet vložené a doménově specifické programovací jazyky, jazykové konstrukce (například třídy a moduly ) a dialekty Racket s různou sémantikou [10] [11] [12] [13] .

Systém je bezplatný a open source software distribuovaný za podmínek LGPL . Komunitou napsaná rozšíření a balíčky jsou dostupné z PLaneT [14] , webové distribuce systému [15] .

Historie

Tvorba

Matthias Felleisen založil PLT Inc. v polovině 90. let nejprve jako výzkumná skupina a poté jako projekt vývoje a výroby vzdělávacích materiálů pro začínající programátory (přednášky, cvičení/projekty, software). V lednu 1995 bylo rozhodnuto vyvinout výukové prostředí pro programování v jazyce Scheme . Matthew Flatt vytvořil MrEd, původní virtuální stroj Racket , pomocí libscheme, wxWidgets a některých dalších svobodných systémů [16] . V průběhu následujících let tým, který zahrnoval mimo jiné Flatta, Roberta Bruce Findlera , Sriram Krishnamurti , Cormac Flanagan a mnoho dalších, vydal prostředí DrScheme, určené pro začínající programátory obvodů a výzkum v této oblasti. měkkého psaní (kombinace statického a dynamického psaní ) [7] . Hlavní programovací jazyk podporovaný prostředím se nazýval PLT Scheme.

Paralelně s tím začal tým pořádat workshopy pro středoškolské učitele, kde je učil o programovém designu a funkcionálním programování . Terénní zkoušky s těmito učiteli a jejich studenty určily hlavní směry vývoje produktu.

DrScheme byl doplněn o výuku jazyků , algebraický  stepper [17] , transparentní smyčku REPL , tiskový subsystém založený na nevýhodách a mnoho dalších inovací, které z DrScheme udělaly kvalitní vzdělávací produkt. V roce 2001 byla napsána a publikována kniha How to Design Programs vývojáři jazyka na základě jejich filozofie výuky programování.

Vývoj DrScheme

Verze první generace DrScheme zavedly nástroje pro „ programování ve velkém “ pomocí modulů a tříd . Ve verzi 42 byly přidány jednotky: systém modulů - prvotřídní objekty , který umožňuje moduly doplňovat při vývoji velkých systémů [18] . Systém tříd byl na jedné straně doplněn (zejména o rozhraní ve stylu Java ) a na druhé straně redukován (zejména odstraněna vícenásobná dědičnost ) [11] . Jazyk se vyvíjel v několika po sobě jdoucích verzích a získal popularitu verzí 53, která dále urychlila práci na něm a další verze 100 se stala ekvivalentem „1.0“.

Další velká revize s číslem 200 zavedla nový výchozí modulový systém integrovaný s makry [18] . Modulární systém zejména zajišťuje oddělení výpočtů za běhu a výpočtů při kompilaci, aby podporovaly "věž jazyků" [19] . Na rozdíl od jednotek nejsou tyto moduly prvotřídními objekty .

Verze 300 zavedla podporu pro Unicode , knihovnu rozhraní s externími funkcemi a změnila systém tříd [18] . Později, pro vydání verze 300, byl výkon vylepšen přidáním JIT kompilátoru a garbage collection s podporou pro generování objektů .

V příštím hlavním vydání přešel DrScheme na obecně uznávaný systém číslování verzí založený na desetinných zlomcích . Verze 4.0 zavádí zkratku #langpro [sub]jazyk, ve kterém je modul napsán. V této verzi jsou také představeny neměnné páry a seznamy , podpora jemnozrnného paralelismu a staticky typovaný dialekt [20] .

Raketa

7. června 2010 bylo PLT Scheme přejmenováno na Racket [21] , což se shoduje s vydáním verze 5.0. Následně ve verzi 5.1 byl základní program GUI přepsán z C++ na Racket pomocí vlastní sady nástrojů uživatelského rozhraní na všech platformách [16] . Verze 5.2 obsahuje kontrolu syntaxe na pozadí , novou knihovnu plotrů, knihovny databází a nový vylepšený REPL [22] . Verze 5.3 obsahuje nové funkce: submoduly pro volitelně načtené moduly [23] , nové optimalizační nástroje , knihovnu JSON a další funkce [24] . Verze 5.3.1 výrazně zlepšila DrRacket: byl přidán nový prohlížeč dokumentace, ve výchozím nastavení je povolena kontrola syntaxe na pozadí [25] .

Hlavní novinkou verze 6.0, vydané 24. února 2014, byl nový systém balíčků, distribuční sada Racket se stala modulární, skládá se z více než 200 balíčků. Nyní můžete nainstalovat Minimal Racket, kde tyto balíčky nejsou předinstalované. Přibyla také podpora JIT kompilace pro architekturu ARM , výrazně se zlepšil výkon Typed Racket atd. [ 26] .

Hlavní novinky verze 7.0, vydané na konci července 2018, souvisí s přípravou nahrazení vlastního virtuálního stroje Racket Chez Scheme [27] .

Racket Chez Schéma

Od začátku roku 2017 byl systém maker a modulů Racketu přepsán tak, aby nahradil virtuální stroj C systémem Chez Scheme a také zlepšil přenositelnost a snadnou podporu pro Racket. Tato vidlice Racket je známá jako Racket CS [28] . V lednu 2019 bylo oznámeno, že Racket on Chez Scheme je plně funkční. Přestože zkompilovaný kód Racket CS obvykle běží stejně rychle jako klasický Racket kód a někdy i rychleji, celkový výkon dosud nebyl shledán dostatečným k tomu, aby se Racket CS stal výchozí implementací Racketu. Zejména klesla rychlost kompilace a doba spouštění systému Racket [29] Počínaje verzí Racket 7.4, která byla vydána 8. srpna 2019, získala varianta RacketCS status beta verze dostupné ke stažení z oficiální stránky programovací jazyk [30] .

Příklady kódu

Triviální program " ahoj světe " by vypadal takto:

# lang raketa "Ahoj, světe!"

Po spuštění vypíše:

"Ahoj světe!"

Zde je trochu méně triviální program:

# lang racket ( vyžadovat 2 htdp/obrázek ) ( let sierpinski ([ n 8 ]) ( if ( nula? n ) ( trojúhelník 2 'plná 'červená ) ( let ([ t ( sierpinski ( - n 1 ))]) ( zmrazit ( nad t ( vedle t ) )))))

Tento program, převzatý z webu Racket, nakreslí Sierpinského trojúhelník s hloubkou vnoření 8.

Příklad použití generátoru:

# lang raketa ( vyžadovat raketu/generátor ) ( definovat fib ( generátor () ( nechat smyčku (( x 1 ) ( y 1 )) ( výnos x ) ( smyčku y ( + x y ))))))

Pomocí směrnice #langmůžete psát programy v alternativních dialektech Racket. Zde je příklad faktoriálu v Typed Racket, staticky typovaném dialektu :

# lang typed/racket ( : fact ( Integer -> Integer )) ( define ( fact n ) ( cond [( zero? n ) 1 ] [ else ( * n ( fact ( - n 1 )))])))

Režim kompatibility s jazykovým standardem Scheme se volí direktivou , resp . #lang R6RS#lang R5RS

Poznámky

  1. Racket v8.4 . Archivováno z originálu 12. května 2022. Staženo 5. dubna 2022.
  2. Strickland, TS; Fellesisen, Matthias DLS 2010: Smlouvy pro prvotřídní třídy (2010). Archivováno z originálu 23. května 2013.
  3. Sperber, Michael; Dybvig, R. Kent; Flatt, Matěj; Van Straaten, Anton a kol. Revize 6 Zpráva o schématu algoritmického jazyka (R6RS) . Scheme Steering Committee (srpen 2007). Získáno 13. září 2011. Archivováno z originálu 23. května 2013.
  4. Vítejte v Racketu . Získáno 15. srpna 2011. Archivováno z originálu 23. května 2013.
  5. Dialects of Racket and Scheme . Získáno 15. srpna 2011. Archivováno z originálu 23. května 2013.
  6. Flatt; nálezce; Krishnamurthi; Felleisen (1999). Programovací jazyky ​​jako operační systémy (neboli Pomsta Syna stroje Lisp) . Mezinárodní konference o funkčním programování.
  7. 1 2 Findler; Clements; Flanagan; flatt; Krishnamurthi; Steckler; Felleisen. DrScheme: A Programming Environment for Scheme  //  Journal of Functional Programming : deník. — 2001.
  8. The TeachScheme! Projekt: Výpočetní technika a programování pro každého studenta . Archivováno z originálu 1. května 2012. Staženo 22. května 2013.
  9. Přehled . Program podle návrhu. Získáno 17. srpna 2011. Archivováno z originálu dne 23. května 2013.
  10. Na makrech záleží (3. května 2007). Získáno 8. srpna 2011. Archivováno z originálu dne 23. května 2013.
  11. 12 Flatt , M.; Findler, R. B.; Felleisen, M. (2006). „Schéma s třídami, mixy a rysy“ (PDF) . Asijské sympozium o programovacích jazycích a systémech . Archivováno 10. května 2012 na Wayback Machine
  12. Flatt, M.; Felleisen, M. (1998). "Jednotky: Skvělé moduly pro horké jazyky" . Návrh a implementace programovacího jazyka . Archivováno 4. listopadu 2011 na Wayback Machine
  13. Tobin-Hochstadt, S.; St-Amour, V.; Culpepper, R.; Flatt, M.; Felleisen, M. (2011). „Jazyky jako knihovny“ (PDF) . Návrh a implementace programovacího jazyka . Archivováno 10. března 2012 na Wayback Machine
  14. PLANETA . Získáno 22. května 2013. Archivováno z originálu 30. května 2013.
  15. Matthews, J. (2006). "Nasazení komponent s PLaneT: Chcete to kde?". Workshop schématu a funkcionálního programování .
  16. 1 2 Přestavba grafické vrstvy Racket (8. prosince 2010). Získáno 23. srpna 2011. Archivováno z originálu dne 23. května 2013.
  17. Clements, J.; Flatt, M.; Felleisen, M. (2001). „Modelování algebraického stepperu“ (PDF) . Evropské sympozium o programovacích jazycích . Archivováno 10. května 2012 na Wayback Machine
  18. 1 2 3 "Poznámky k vydání jádra rakety" . Získáno 15. dubna 2012. Archivováno z originálu 23. května 2013.
  19. Flatt, M. (2002). Složitelná a kompilovatelná makra. Mezinárodní konference o funkčním programování .
  20. Schéma PLT verze 4.0 (12. června 2008). Získáno 7. srpna 2012. Archivováno z originálu dne 23. května 2013.
  21. Od PLT schématu k Racketu . racket-lang.org. Získáno 17. srpna 2011. Archivováno z originálu dne 23. května 2013.
  22. Racket 5.2 (9. listopadu 2011). Získáno 16. června 2012. Archivováno z originálu 23. května 2013.
  23. Podmoduly (3. června 2012). Získáno 7. srpna 2012. Archivováno z originálu dne 23. května 2013.
  24. Raketa 5.3 (7. srpna 2012). Získáno 7. srpna 2012. Archivováno z originálu dne 23. května 2013.
  25. Raketa 5.3.1 (7. listopadu 2012). Získáno 7. listopadu 2012. Archivováno z originálu dne 23. května 2013.
  26. Ryan Culpepper. Racket v6.0  (anglicky) . blog.racket-lang.org (26. února 2014). Získáno 3. února 2019. Archivováno z originálu 11. listopadu 2020.
  27. Vincent St Amour. Racket v7.0  (anglicky) . blog.racket-lang.org (27. července 2018). Staženo 3. února 2019. Archivováno z originálu 10. března 2019.
  28. Matthew Flatt. Stav Racket-on-Chez: leden  2018 . blog.racket-lang.org (5. ledna 2018). Získáno 26. června 2018. Archivováno z originálu 28. června 2018.
  29. Matthew Flatt. Stav Racket-on-Chez: leden 2019  (anglicky) . blog.racket-lang.org (29. ledna 2019). Staženo 3. února 2019. Archivováno z originálu 3. února 2019.
  30. John Clements. Raketa v7.4 . blog.racket-lang.org. Získáno 7. října 2019. Archivováno z originálu dne 8. října 2019.

Literatura

Lekce

Průvodce stylem

Odkazy