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 ) |
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] .
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í.
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] .
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] .
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] .
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
Lisp | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Charakteristika |
| ||||||||||||||
Implementace |
| ||||||||||||||
Hardware |
| ||||||||||||||
Společenství |
| ||||||||||||||
|