Rachetă (limbaj de programare)

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare
Rachetă
limbaj de programare
rachetă logo.png
Autor PLT Inc.
Data de origine 1994
Ultima versiune 6.7 [1]
Utilizare {{{utilizare}}}
Paradigme Multi-paradigmă: funcțională , procedurală , modular , orientat pe obiect , logic , reflectorizant , meta
Tastare dinamic
Extensii comune .rkt , .rktl , .rktd , .scrbl , .plt , .ss , .scm
Influențată de Scheme , Eiffel [2]
Acesta a influențat Schema , [3] Rust , [4] [5] Clojure [6]
Implementare referință
Sistem de operare Cross-platform
Licență LGPL
Site-ul web racket-lang.org/

Rachetă (cunoscut anterior ca Schema PLT) este un multi-paradigma de uz general limbaj de programare de Lisp - Schema de familie. Unul dintre obiectivele din spatele design-ul este de a servi ca o platformă pentru proiectarea, crearea și punerea în aplicare a noilor limbi. [7] [8] Acesta este utilizat într - o varietate de contexte, cum ar fi scripting , programare de uz general, educație informatică și cercetare .

Distribuția oferă o implementare a limbajului (inclusiv un sofisticat sistem run-time , [9] de mai multe biblioteci și un compilator JIT ) , împreună cu un mediu de dezvoltare integrat numit DrRacket (cunoscut anterior ca DrScheme) scris în Rachetă sine. [10] Limba este cunoscut pentru versatil macro sistem care vă permite să creați cu ușurință noi limbi și dialecte cu diferite constructe sau diferite semantica. [11] [12] [13] [14]

Distribuția este open source , licențiat sub GNU Lesser General Public License (LGPL), [15] și comunitare construit extensii și pachete sunt disponibile printr - un manager de pachete centralizat.

Istorie

Dezvoltare

Matthias Felleisen fondat PLT în mijlocul -1990s , în primul rând ca un grup de cercetare, care curând după aceea a devenit un proiect orientat spre producția de materiale educaționale pentru programatori. În ianuarie 1995, grupul a decis să creeze un scheme- mediu de programare educațional bazat. Matthew Flatt a pus împreună MrEd, original mașină virtuală , de la libscheme, [16] wxWidgets și alte câteva sisteme gratuite. [17] În următorii ani o echipa de Flatt, Robby Findler , Shriram Krishnamurthi , Cormac Flanagan și multe altele au creat DrScheme, un mediu de dezvoltare pentru programatori novice , care au constituit , de asemenea , un mediu de cercetare pentru tastarea moale . [10] Limba principală susținută de DrScheme a fost apoi numit Schema PLT.

În paralel, echipa a început desfășurarea de ateliere pentru profesori de liceu, predare design și programare funcțional . Testele de teren efectuate pe acești profesori și elevii lor au fost indicii importante pentru dezvoltarea ghid.

În următorii ani grupul PLT a adăugat un instrument cunoscut sub numele de stepper algebric, pentru evaluarea pas cu pas a expresiilor, [18] o buclă read-eval-print interpret, o imprimantă bazată pe constructor, împreună cu alte câteva instrumente. În 2001 echipa a patru dezvoltatori principale (Felleisen, Findler, Flatt și Krishnamurthi) a publicat o carte care rezumă filozofia lor de educație de programare, intitulat Cum să programe de proiectare .

Versiuni

Prima generație de revizuiri ale PLT limba Schema a introdus constructe pentru programare pe scară largă, cu adăugarea de module și clase . Versiunea 42 de unități introduse, un sistem de primă clasă module, complementare la cursuri pentru dezvoltarea de programe de mari dimensiuni. [19] Sistemul de clasă a văzut introducerea de Java - stil interfețe și eliminarea unor caracteristici, cum ar fi moștenire multiplă . [12] Din moment ce versiunea 53 limba a câștigat o oarecare popularitate, și o versiune majoră a fost versiunea 100, comparabil cu versiunea 1.0 într - un sistem de versionare semantic .

Următoarea lansare majora a fost de 200, care a introdus un nou sistem de modul implicit, care se integrează cu sistemul de macro, [19] să asigure separarea dintre evaluările efectuate în timpul rulării și compilarii timp , permițând astfel să se creeze un „turn de limbi“ . [20] Spre deosebire de unități, aceste module nu sunt elemente de primă clasă .

Versiunea 300 a introdus Unicode suport, FFI , și trucurile pentru sistemul de clasă. [19] de presă ulterioare în 300 ramură au o performanță îmbunătățită de execuție, cu adăugarea unui compilator JIT și un sistem implicit pentru colectarea gunoiului de generații .

Cu noua versiune majoră, proiectul sa mutat la o numerotare versiune mai convențională. Versiunea 4.0 a introdus #lang comanda rapidă pentru a specifica limba în care un modul este scris, precum și imuabile perechi și liste, suport pentru granulat fin de calcul paralel , și un tastat-static dialectul. [21]

Redenumire

La 07 iunie 2010, coroborat cu 5,0 eliberare, schema PLT a fost redenumit Rachetă. [22] În versiunea 5.1 backend GUI a fost rescris de la C ++ la Rachetă în sine, folosind un sistem de widget nativ pe toate platformele. [17] Versiunea 5.2 a văzut introducerea unui sistem de cod static de analiză, o nouă bibliotecă plotare, o bibliotecă de interfață de baze de date, și un nou REPL, mai extinse. [23] Versiunea 5.3 a introdus, printre alte noutăți, o caracteristică ce permite încărcarea opțională a submodules, [24] noi instrumente de optimizare, o JSON bibliotecă. [25] În versiunea 5.3.1 unele caracteristici au fost adăugate la DrRacket: verifica sintaxa a fost activată în mod implicit, și a fost adăugat un sistem de examinare de documentare. [26]

În versiunea 6.0 a fost introdus un nou sistem de administrare a pachetelor, cu reorganizarea repertoriului și divizarea distribuției într-un set de pachete mai mici, care să permită o instalare minimală a Rachetă cu pachete doar pentru caracteristicile dorite. [27]

Caracteristici

Nucleul Rachetă include macro - uri , module , închideri lexicale , recursivitate coada , continuarea parțială , [28] parametri, contracte , [29] fire de verde și sisteme de operare fire . [30] [31] [32] Limbajul include , de asemenea , unele primitivele, cum ar fi eventspace și custozi, care managementul resurselor de control și permit invocarea și gestionarea programelor externe. [9] Limbajul este extensibil prin sistemul deosebit de versatil macro, care , împreună cu sistemul de modul și personalizate analizatorilor vă permite să controlați și să modificați limba în toate aspectele sale [33] Multe construcții din aceeași limbă Rachetă sunt puse în aplicare ca macro - uri, inclusiv un mixin sistem de clasă, [12] și modelul de potrivire mecanism.

Rachetă a fost prima mai mare de programare , pentru limba de a introduce un sistem de contract. [34] contracte răket sunt inspirate de Eiffel proiectare prin contract , care este extinsă pentru a include valori de ordin superior, funcțiile de primă clasă , obiecte, referințe și alte funcționalități. De exemplu, un obiect supus unui contract garantează controlul contractelor, atunci când sunt invocate metodele sale.

Compilatorul Rachetă traduce sursa in bytecode , care este executată de către Rachetă mașina virtuală . Pe x86 și PowerPC sistemele bytecode este compilat în cod nativ în timpul rulării de către un compilator JIT .

În 2004, PLANET a fost introdus, un manager de pachete integrate în sistemul de module care vă permite să importe și să utilizeze biblioteci terțe părți într-un mod transparent. PLANET include , de asemenea propriul sistem de versionare , pentru a evita iad dependență de situații. [35] În 2014 , o mare parte din codul Rachetă a fost mutat într - un nou sistem de pachet separat de principala codebase , gestionat de un client numit Raco. Noul sistem pachet oferă mai puține funcții decât PLANET. [36]

sistemul Macro

Una dintre caracteristicile principale care distinge Rachetă de celelalte limbi ale familiei Lisp este intrinsec extensibilitate . Caracteristici extensibilitate Racket sunt construite în sistemul de formă, pentru a permite un control sintaxa la nivelul formularului. [14] De exemplu, sintactic formă #%app poate fi rescrisă pentru a schimba semantica apelului funcției . În mod similar, #%module-begin de #%module-begin a #%module-begin forma sintactică vă permite să efectuați o parsare statică arbitrară a întregului modul. [14] Orice modul poate fi folosit ca un limbaj, datorită #lang notației, iar programatorul poate controla aproape fiecare aspect al limbajului în sine.

Extensibilitatea furnizate de modulele este combinat cu schema analog igienică macro sistem, care oferă funcționalități suplimentare asupra Lisp S-expresie sistem de manipulare,[37] [38] Schema 84 sistem macro sau reguli sintactice ale R5RS . Cu aceste caracteristici, programatorii pot adăuga caracteristici și de a crea anumite limbi, care sunt complet imposibil de distins de caracteristici încorporate în limba lui.

Sistemul macro Rachetă a fost utilizat pentru punerea în aplicare a dialecte, inclusiv tastată Rachetă, o versiune a limbajului , care oferă un sistem de tip, [39] și Lazy Rachetă, un dialect care utilizează un gol leneș sistem. [40] Alte dialecte sunt FrTime ( programare reactivă funcțională ), Scribble (o limbă pentru producerea de documentare), [41] Prezentare (o limbă pentru a face diapozitive ), [42] și multe altele. [43] [44] Rachetă prevede unele biblioteci care facilitează punerea în aplicare a noilor limbi. [14]

Noile limbi nu se limitează la S-exprimare sintaxa bazată, permițând definirea interpretoare arbitrare, de exemplu , folosind biblioteca de instrumente oferite de Rachetă însuși parsare. [45]

Mediu de dezvoltare

Distribuția Rachetă oferă un IDE [10] numit DrRacket, un continuation- pe bază de server web , [46] o interfață grafică cu utilizatorul , [17] și o serie de alte instrumente. Rachetă poate fi de asemenea folosit ca un instrument de scripting, de exemplu , în Unix shell script - uri. Se poate analiza parametrii liniei de comandă, executați instrumente externe, și includ biblioteci.

DrRacket

DrRacket (cunoscut anterior ca DrScheme) este un mediu de dezvoltare disponibil pentru Microsoft Windows , MacOS , Unix și Linux , adesea folosit ca un instrument educațional în cursurile de programare introductive, dezvoltat inițial ca un instrument pentru proiectul TeachScheme! (mai târziu pentru a deveni ProgramByDesign ), a început de la Northeastern University , în colaborare cu alte universități pentru predare de programare în licee.

Editorul oferă evidențierea sintaxei , de potrivire între paranteze, depanator și pas cu pas algebrice. Acesta vă permite să alegeți diferite „niveluri“ (incepator, intermediar, etc.), pentru a simplifica mediul pentru elevi. Acesta a construit-in-suport pentru biblioteci și un sistem de analiză statică utilă pentru programatori cu experiență. Oferă un browser forme, testarea integrată și acoperire vina sistemului, restructurează de sprijin, precum și un sistem de acces de documentare.

Exemple

Un exemplu de salut mondial în Rachetă este următoarea:

 racheta #lang / baza
"Salut Lume!"

că , atunci când executat afișează mesajul "Hello, World!" .

Următorul este un exemplu de definire a unei recursive funcții pentru calcularea factorialului :

 #lang racheta
(Defini (fapt n)
  (Cond [(zero? N) 1]
        [Altfel (* n (fapt (- n 1)))]))

Aplicații și utilizări

În plus față de utilizarea sa ca un instrument de predare și de cercetare, Racket a fost conceput ca un limbaj de uz general pentru utilizarea pe sistemele de producție. Din acest motiv, distribuirea oferă biblioteci extinse de acest sistem de sprijin și de programare de rețea, dezvoltare web, [46] o interfață pentru a accesa sistemul de operare apeluri, FFI , [47] diverse regex implementări, Lexer generatoare și interpretoare , [45] de programare logică , și un set de instrumente widget .

Printre caracteristicile Rachetă utile pentru dezvoltarea de aplicații comerciale sunt capacitatea de a genera executabilele native in pentru Windows , MacOS și Unix / Linux , roluit și debuggeri incluse în mediul de dezvoltare integrat și un test de unitate cadru.

Rachetă este utilizat în proiecte comerciale și aplicații web. Printre exemple, Hacker News site - ul folosește Arc , care este dezvoltat în Rachetă. Naughty Dog a folosit Rachetă ca un limbaj de scripting pentru mai multe jocuri video . [48]

Rachetă este utilizat pentru predarea algebră prin design de joc în bootstrap curriculum - ul programului. [49]

Notă

  1. ^ Rachetă v6.7 , pe Racheta blog.
  2. ^ TS Strickland și Matthias Fellesisen, DLS 2010: Contracte pentru clasele de primă clasă (PDF), pe ccs.neu.edu, 2010.
  3. ^ Michael Sperber, R. Kent Dybvig, Matthew Flatt și Anton Van Straaten,revizuit 6 Raport privind schema algoritmice Language (R6RS) , pe r6rs.org, Comitetul director Schema, august 2007. Accesat 13 septembrie 2011.
  4. ^ Întrebări Planet2 , la mail.mozilla.org.
  5. ^ Rust Bibliografie , pe github.com.
  6. ^ Ambrose Bonnaire-Sergent, o abordare practică sistem opțional de tip pentru Clojure, Universitatea din Australia de Vest, 2012.
  7. ^ Bine ati venit la Rachetă , la docs.racket-lang.org. Adus la 15 august 2011 .
  8. ^ Dialecte de Rachetă și schema , la docs.racket-lang.org. Adus la 15 august 2011 .
  9. ^ A b Flatt, Findler, Krishnamurthi și Felleisen, limbaje de programare ca sisteme de operare (sau, Razbunarea Fiului Mașinii Lisp), Conferința internațională privind programarea funcțională, 1999.
  10. ^ A b c Findler, Clements, Flanagan, Flatt, Krishnamurthi, Steckler și Felleisen,DrScheme: O programare Mediu pentru Schema (PDF), în Journal of Programare funcțională, 2001.
  11. ^ Macrocomenzi Materia , blog.racket-lang.org, 03 mai, 2007. 8 Adus de luna august 2011.
  12. ^ A b c M. Flatt, RB Findler și M. Felleisen, schema cu clasele, Mixins și Trasaturi (PDF), în Simpozionul asiatice pe Limbaje de programare și sisteme, 2006.
  13. ^ M. Flatt și M. Felleisen, Unități: Module cool pentru Hot limbi , în limbajul de programare Design si Implementare, 1998.
  14. ^ A b c d S. Tobin-Hochstadt, V. St-Amour, R. Culpepper, M. Flatt și M. Felleisen,limbi ca Biblioteci (PDF), în limbaj de programare de proiectare și de punere în aplicare, 2011.
  15. ^ Rachetă: Software - ul de licență , la download.racket-lang.org. Accesat la 20 octombrie 2015 .
  16. ^ Brent W. Jr. Benson, libscheme: Schema ca Biblioteca C , în Proceedings al Simpozionului USENIX pe nivel foarte ridicat Limbi, Santa Fe, NM, Asociația USENIX, 26-28 octombrie 1994, pag. 7-19, ISBN 978-1-880446-65-2 . Adus pe 7 iulie 2013 .
  17. ^ A b c Reconstruirea Rachetă lui Graphics Layer , pe blog.racket-lang.org, 08 decembrie, 2010. Adus de 23 august 2011 (arhivate de original pe 23 mai 2013).
  18. ^ J. Clements, M. Flatt și M. Felleisen, Modelare un algebrice Stepper (PDF), în Simpozionul European privind Limbaje de programare, 2001.
  19. ^ A b c Racket Core Note de lansare (TXT), la docs.racket-lang.org. Adus de 15 aprilie 2012 (arhivate de original pe 23 mai 2013).
  20. ^ M. Flatt, asamblabile și compilable Macrocomenzi, în Conferința internațională privind programarea funcțională, 2002.
  21. ^ PLT Schema versiunea 4.0 , pe blog.racket-lang.org, 12 iunie 2008. Adus 7 august 2012 (arhivate de original pe 23 mai 2013).
  22. ^ De la Schema PLT la Rachetă , pe racket-lang.org. Adus la 17 august 2011 .
  23. ^ Rachetă 5.2 , la blog.racket-lang.org, PLT, Inc, 9 noiembrie 2011. Adus de 16 iunie 2012.
  24. ^ Submodule , pe blog.racket-lang.org, 3 iunie 2012. Adus 7 august 2012.
  25. ^ Rachetă 5.3 , la blog.racket-lang.org, PLT, Inc, 7 august 2012. Adus 7 august 2012.
  26. ^ Rachetă 5.3.1 , la blog.racket-lang.org, PLT, Inc, 7 noiembrie 2012. Adus de 07 noiembrie 2012.
  27. ^ Rachetă 6.0 , la blog.racket-lang.org, PLT, Inc, 26 februarie 2014. Adus de 23 februarie 2016.
  28. ^ M. Flatt, G. Yu, RB Findler și M. Felleisen, Adăugarea Delimitat și Control asamblabilă la o programare de producție Mediu (PDF), în Conferința internațională privind programarea funcțională 2007.
  29. ^ Contracte , la docs.racket-lang.org.
  30. ^ Fire , la docs.racket-lang.org.
  31. ^ Futures , la docs.racket-lang.org.
  32. ^ Locuri , la docs.racket-lang.org.
  33. ^ Matei Flatt, Crearea Limbile în Rachetă , în Comunicații ACM, 2012. Adus 8 aprilie 2012.
  34. ^ RB Findler și M. Felleisen, Contracte pentru funcții de nivel superior (PDF), în Conferința internațională privind programarea funcțională, 2002.
  35. ^ J. Matthews, Componenta de implementare planet: Ai Unde vrei? , În schema și Programare funcțională Workshop 2006.
  36. ^ Sistemul pachetului Rachetă și a planetei , la blog.racket-lang.org.
  37. ^ Matei Flatt,asamblabile și compilable Macrocomenzi, ai Când vrei? (PDF), în Conferința internațională privind programarea funcțională, 2002.
  38. ^ Flatt, Culpepper, Darais, Findler, Macrocomenzi care lucrează împreună; Compilarii-Time Legaturi, extinderea parțială, și De Contexte definiție
  39. ^ S. Tobin-Hochstadt și M. Felleisen, Proiectarea si implementarea Schemei tastată, în Principii de Limbaje de programare, 2008.
  40. ^ E. Barzilay și J. Clements, Lenea fără toate munca grea: Combinarea leneș și limbi stricte de predare, în programarea funcțională și declarativă în Educație, 2005.
  41. ^ M. Flatt, E. Barzilay și RB Findler, Scribble: Închiderea Cartea în Ad Hoc Instrumentele de documentare, în Conferința internațională privind programarea funcțională 2009.
  42. ^ RB Findler și M. Flatt, Prezentare: Prezentări funcționale, în Conferința internațională privind programarea funcțională, 2004.
  43. ^ M. Felleisen, RB Findler, M. Flatt și S. Krishnamurthi, A I funcțională / O Sistem (sau distracție pentru copii bobocilor) (PDF), în Conferința internațională privind programarea funcțională 2009.
  44. ^ M. Felleisen, RB Findler, M. Flatt și S. Krishnamurthi,Structura și Interpretarea Curriculumul Informatică (PDF), în Journal of Programare funcțională, 2004.
  45. ^ A b Parser Instrumente: lex și yacc stil Parsing , la docs.racket-lang.org. Adus la 16 august 2011 .
  46. ^ A b Krishnamurthi, Hopkins, McCarthy, Graunke, Pettyjohn și Felleisen, implementarea și utilizarea PLT Schema Web Server (PDF), în Journal of ordin superior și programare Simbolice, 2007.
  47. ^ E. Barzilay și D. Orlovsky, interfața externă pentru PLT Schema (PDF), în schema și Programare funcțională, 2004.
  48. ^ DSL mzScheme funcționale în dezvoltarea jocului , la cufp.org. Adus la 8 mai 2012 .
  49. ^ Bootstrap , la bootstrapworld.org. Accesat la 11 august 2015 .

Bibliografie

linkuri externe

Controlul autorității LCCN (RO) sh2013000901
Informatică Portal IT : accesați intrările Wikipedia care se ocupă cu IT