rachetă | |
---|---|
Clasa de limba |
multi- paradigma : orientat pe obiecte , procedural , reflexiv , functional , logic , meta , orientat pe limbaj |
Aparut in | 1994 |
Autor | PLT Inc. |
Extensie de fișier | .rkt, .rktl, .rktd, .scrbl, .plt, .sssau.scm |
Eliberare | 8.4 [1] (9 februarie 2022 ) |
Tip sistem | dinamic , strict , static |
Dialectele | Rachetă dactilografiată , Rachetă leneșă , Mâzgălire , FrTime , etc. |
A fost influențat | Scheme , Eiffel [2] |
influențat | Schema [3] |
Licență | LGPL |
Site-ul web | racket-lang.org |
Platformă | multiplatformă |
Racket (anterior PLTScheme) este un limbaj de programare multi- paradigma de uz general aparținând familiei Lisp / Scheme . Oferă un mediu pentru programarea orientată pe limbaj - unul dintre scopurile racket-ului este crearea, dezvoltarea și implementarea limbajelor de programare [4] [5] . Limbajul este folosit în diverse contexte: ca limbaj de scripting , ca limbaj de uz general, în predarea informaticii, în cercetarea științifică.
Platforma oferă utilizatorului o implementare a limbajului Racket, inclusiv un mediu de rulare dezvoltat ( sistem de rulare în engleză ) [6] , diverse biblioteci, un compilator JIT etc., precum și mediul de dezvoltare DrRacket (cunoscut anterior ca DrScheme). ) scris în Racket [ 7] . Acest mediu de programare este folosit în cursul MIT ProgramByDesign [en] [ 8 [ 9] . Limbajul de bază Racket are un sistem macro puternic care vă permite să creați limbaje de programare încorporate și specifice domeniului , construcții de limbaj (de exemplu, clase și module ) și dialecte Racket cu semantică diferită [10] [11] [12] [13] .
Sistemul este un software gratuit și cu sursă deschisă distribuit în conformitate cu termenii LGPL . Extensiile și pachetele scrise de comunitate sunt disponibile de la PLAneT [14] , distribuția bazată pe web a sistemului [15] .
Matthias Felleisen a fondat PLT Inc. la mijlocul anilor 1990, inițial ca grup de cercetare, iar apoi ca proiect de dezvoltare și producere a materialelor educaționale pentru programatori începători (prelegeri, exerciții/proiecte, software). În ianuarie 1995, s-a decis dezvoltarea unui mediu de învățare pentru programare în limbajul Scheme . Matthew Flatt a construit MrEd, mașina virtuală Racket originală , folosind libscheme, wxWidgets și alte sisteme gratuite [16] . În anii următori, o echipă care a inclus, printre alții, Flatt, Robert Bruce Findler , Sriram Krishnamurti , Cormac Flanagan și mulți alții, a lansat mediul DrScheme, conceput pentru programatorii de circuite începători și pentru cercetare în domeniu de tastare soft (combinații de tastare statică și dinamică ) [7] . Principalul limbaj de programare suportat de mediu a fost numit PLT Scheme.
Paralel cu aceasta, echipa a început să organizeze ateliere pentru profesorii de liceu, învățându-i despre proiectarea programelor și programarea funcțională . Testele pe teren cu acești profesori și studenții lor au determinat direcțiile principale pentru dezvoltarea produsului.
DrScheme a fost suplimentat cu învățarea limbilor străine , un stepper algebric [17] , o buclă REPL transparentă , un subsistem de imprimare bazat pe contra și multe alte inovații care au făcut din DrScheme un produs educațional de calitate. În 2001, How to Design Programs a fost scris și publicat de dezvoltatorii limbajului , pe baza filozofiei lor de a preda programarea.
Versiunile de prima generație ale DrScheme au introdus instrumente pentru „ programarea în mare ” folosind module și clase . În versiunea 42, au fost adăugate unități: un sistem de module - obiecte de primă clasă , care permite ca modulele să fie completate în timpul dezvoltării sistemelor mari [18] . Pe de o parte, sistemul de clase a fost suplimentat (în special, cu interfețe în stilul Java ), iar pe de altă parte, a fost redus (în special, moștenirea multiplă a fost eliminată ) [11] . Limbajul a evoluat de-a lungul mai multor versiuni succesive și a câștigat popularitate prin versiunea 53, ceea ce a accelerat și mai mult munca la el, iar următoarea versiune 100 a devenit echivalentul „1.0”.
Următoarea revizuire majoră, numerotată 200, a introdus un nou sistem de module implicit integrat cu macrocomenzi [18] . În special, sistemul modular asigură că calculele de timp de rulare și calculele de timp de compilare sunt separate pentru a susține „turnul limbilor” [19] . Spre deosebire de unități, aceste module nu sunt obiecte de primă clasă .
Versiunea 300 a introdus suport pentru Unicode , o bibliotecă de interfață cu funcții externe și a schimbat sistemul de clasă [18] . Mai târziu, pentru versiunile versiunii 300, performanța a fost îmbunătățită prin adăugarea unui compilator JIT și a unei colecții de gunoi cu suport pentru generarea de obiecte .
Până la următoarea versiune majoră, DrScheme a trecut la sistemul de numerotare a versiunilor general acceptat, bazat pe fracții zecimale . Versiunea 4.0 introduce o abreviere #langpentru [sub]limba în care este scris modulul. De asemenea, în această versiune sunt introduse perechi și liste imuabile , suport pentru paralelism cu granulație fină și un dialect tipizat static [20] .
Pe 7 iunie 2010, Schema PLT a fost redenumită în Racket [21] , coincizând cu lansarea versiunii 5.0. Ulterior, în versiunea 5.1, programul GUI de bază a fost rescris din C++ în Racket folosind propriul set de instrumente de interfață cu utilizatorul pe toate platformele [16] . Versiunea 5.2 include un verificator de sintaxă de fundal , o nouă bibliotecă de plotter, biblioteci de baze de date și un nou REPL îmbunătățit [22] . Versiunea 5.3 include o nouă funcționalitate: submodule pentru module încărcate opțional [23] , noi instrumente de optimizare , o bibliotecă JSON și alte caracteristici [24] . Versiunea 5.3.1 a îmbunătățit semnificativ DrRacket: a fost adăugat un nou vizualizator de documentație, verificarea sintaxei de fundal este activată implicit [25] .
Principala inovație a versiunii 6.0, lansată pe 24 februarie 2014, a fost un nou sistem de pachete, kitul de distribuție Racket a devenit modular, este format din peste 200 de pachete. Acum puteți instala Minimal Racket, unde aceste pachete nu sunt preinstalate. S-a adăugat și suportul pentru compilarea JIT pentru arhitectura ARM , performanța Typed Racket a fost îmbunătățită semnificativ, etc. [26] .
Principalele inovații ale versiunii 7.0, lansată la sfârșitul lunii iulie 2018, sunt legate de pregătirea înlocuirii mașinii virtuale proprii Racket cu Chez Scheme [27] .
De la începutul anului 2017, sistemul de macro și module Racket a fost rescris pentru a înlocui mașina virtuală C cu Chez Scheme , precum și pentru a îmbunătăți portabilitatea și ușurința suportului pentru Racket. Această furcă a lui Racket este cunoscută ca Racket CS [28] . În ianuarie 2019, Racket on Chez Scheme a fost anunțat a fi pe deplin funcțional. Deși codul compilat Racket CS rulează de obicei la fel de rapid ca codul clasic Racket și, uneori, chiar mai rapid, performanța generală nu s-a dovedit încă suficientă pentru a face din Racket CS implementarea implicită a Racket. În special, viteza de compilare și timpul de pornire a sistemului Racket au scăzut [29] Începând cu versiunea Racket 7.4, lansată pe 8 august 2019, varianta RacketCS a primit statutul de versiune beta disponibilă pentru descărcare de pe pagina oficială a limbajul de programare [30] .
Un program banal „ hello world ” ar arăta astfel:
# lang racket „Bună, lume!”Când rulează, va scoate:
"Salut Lume!"Iată un program puțin mai puțin banal:
# lang rachetă ( necesită 2 htdp/imagine ) ( lasă sierpinski ([ n 8 ]) ( dacă ( zero? n ) ( triunghiul 2 'solid 'roşu ) ( lasă ([ t ( sierpinski ( - n 1 ))]) ( îngheța ( deasupra t ( lângă t t ))))))Acest program, preluat de pe site-ul web Racket, va desena un triunghi Sierpinski cu o adâncime de cuibărit de 8.
Un exemplu de utilizare a unui generator:
# lang rachetă ( necesită rachetă/generator ) ( define fib ( generator () ( let loop (( x 1 ) ( y 1 )) ( randament x ) ( bucla y ( + x y )))))Folosind directiva #lang, puteți scrie programe în dialecte alternative Racket. Iată un exemplu de factorial în Typed Racket, un dialect tipizat static :
# lang tastat/rachetă ( : fapt ( Integer -> Integer )) ( definiți ( fapt n ) ( cond [( zero? n ) 1 ] [ else ( * n ( fapt ( - n 1 )))]))Modul de compatibilitate cu standardul limbajului Scheme este selectat de directivă sau , respectiv. #lang R6RS#lang R5RS
Lisp | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Caracteristici |
| ||||||||||||||
Implementări |
| ||||||||||||||
Hardware |
| ||||||||||||||
Comunitate |
| ||||||||||||||
|