Rachetă (limbaj de programare)

Versiunea actuală a paginii nu a fost încă examinată de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită pe 16 martie 2022; verificările necesită 5 modificări .
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 ) ( 09.02.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] .

Istorie

Creare

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.

Dezvoltarea DrScheme

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] .

Rachetă

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] .

Racket Chez Scheme

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] .

Exemple de cod

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

Note

  1. Rachetă v8.4 . Arhivat din original pe 12 mai 2022. Preluat la 5 aprilie 2022.
  2. Strickland, TS; Fellesisen, Matthias DLS 2010: Contracte pentru clasele de primă clasă (2010). Arhivat din original pe 23 mai 2013.
  3. Sperber, Michael; Dybvig, R. Kent; Flatt, Matthew; Van Straaten, Anton, et al. Raport revizuit 6 privind schema de limbaj algoritmic (R6RS) . Comitetul Director al Schemei (august 2007). Preluat la 13 septembrie 2011. Arhivat din original la 23 mai 2013.
  4. Bun venit la Racket . Preluat la 15 august 2011. Arhivat din original la 23 mai 2013.
  5. Dialecte de rachetă și schemă . Preluat la 15 august 2011. Arhivat din original la 23 mai 2013.
  6. Flatt; găsitor; Krishnamurthi; Felleisen (1999). Limbaje de programare ca sisteme de operare (sau, Revenge of the Son of the Lisp Machine) . Conferința Internațională de Programare Funcțională.
  7. 1 2 Findler; Clements; Flanagan; plat; Krishnamurthi; Steckler; Felleisen. DrScheme: Un mediu de programare pentru Scheme  //  Journal of Functional Programming : jurnal. — 2001.
  8. TeachScheme! Proiect: Calcul și programarea pentru fiecare student . Arhivat din original la 1 mai 2012. Preluat la 22 mai 2013.
  9. Prezentare generală . Program prin proiectare. Preluat la 17 august 2011. Arhivat din original la 23 mai 2013.
  10. Macros Matter (3 mai 2007). Preluat la 8 august 2011. Arhivat din original la 23 mai 2013.
  11. 12 Flatt , M.; Findler, R.B.; Felleisen, M. (2006). „Schemă cu clase, mixuri și trăsături” (PDF) . Simpozion asiatic despre limbaje și sisteme de programare . Arhivat pe 10 mai 2012 la Wayback Machine
  12. Flatt, M.; Felleisen, M. (1998). „Unități: module interesante pentru limbi fierbinți” . Proiectarea și implementarea limbajului de programare . Arhivat pe 4 noiembrie 2011 la Wayback Machine
  13. Tobin-Hochstadt, S.; St-Amour, V.; Culpepper, R.; Flatt, M.; Felleisen, M. (2011). „Limbi ca biblioteci” (PDF) . Proiectarea și implementarea limbajului de programare . Arhivat pe 10 martie 2012 la Wayback Machine
  14. PLANETA . Consultat la 22 mai 2013. Arhivat din original la 30 mai 2013.
  15. ^ Matthews, J. (2006). „Implementarea componentelor cu PLAneT: Îl doriți unde?”. Atelier de Schemă și Programare Funcțională .
  16. 1 2 Rebuilding Racket's Graphics Layer (8 decembrie 2010). Preluat la 23 august 2011. Arhivat din original la 23 mai 2013.
  17. Clements, J.; Flatt, M.; Felleisen, M. (2001). „Modelarea unui pas algebric” (PDF) . Simpozion european despre limbaje de programare . Arhivat pe 10 mai 2012 la Wayback Machine
  18. 1 2 3 „Note de lansare Racket Core” . Consultat la 15 aprilie 2012. Arhivat din original pe 23 mai 2013.
  19. Flatt, M. (2002). Macrocomenzi componabile și compilabile. Conferinta Internationala de Programare Functionala .
  20. PLT Scheme versiunea 4.0 (12 iunie 2008). Preluat la 7 august 2012. Arhivat din original la 23 mai 2013.
  21. De la Schema PLT la Rachetă . racket-lang.org. Preluat la 17 august 2011. Arhivat din original la 23 mai 2013.
  22. Racket 5.2 (9 noiembrie 2011). Consultat la 16 iunie 2012. Arhivat din original la 23 mai 2013.
  23. Submodule (3 iunie 2012). Preluat la 7 august 2012. Arhivat din original la 23 mai 2013.
  24. Racket 5.3 (7 august 2012). Preluat la 7 august 2012. Arhivat din original la 23 mai 2013.
  25. Racket 5.3.1 (7 noiembrie 2012). Consultat la 7 noiembrie 2012. Arhivat din original la 23 mai 2013.
  26. Ryan Culpepper. Rachetă v6.0  (engleză) . blog.racket-lang.org (26 februarie 2014). Preluat la 3 februarie 2019. Arhivat din original la 11 noiembrie 2020.
  27. Vincent St Amour. Rachetă v7.0  (engleză) . blog.racket-lang.org (27 iulie 2018). Preluat la 3 februarie 2019. Arhivat din original la 10 martie 2019.
  28. Matthew Flatt. Stare Racket-on-Chez: ianuarie  2018 . blog.racket-lang.org (5 ianuarie 2018). Preluat la 26 iunie 2018. Arhivat din original la 28 iunie 2018.
  29. Matthew Flatt. Stare Racket-on-Chez: ianuarie 2019  (engleză) . blog.racket-lang.org (29 ianuarie 2019). Consultat la 3 februarie 2019. Arhivat din original pe 3 februarie 2019.
  30. John Clements. Rachetă v7.4 . blog.racket-lang.org. Preluat la 7 octombrie 2019. Arhivat din original pe 8 octombrie 2019.

Literatură

Lecții

Ghid de stil

Link -uri