Racket (programmeringsspråk)

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 16 mars 2022; kontroller kräver 5 redigeringar .
racket
Språkklass multiparadigm :
objektorienterad , procedurell ,
reflekterande ,
funktionell ,
logisk ,
meta ,
språkorienterad
Framträdde i 1994
Författare PLT Inc.
Filtillägg _ .rkt, .rktl, .rktd, .scrbl, .plt, .sseller.scm
Släpp 8.4 [1]  (9 februari 2022 ) ( 2022-02-09 )
Typ system dynamisk , strikt , statisk
Dialekter Skrivet Racket , Lazy Racket , Scribble , FrTime , etc.
Blivit påverkad Scheme , Eiffel [2]
påverkas Schema [3]
Licens LGPL
Hemsida racket-lang.org
Plattform plattformsoberoende

Racket (tidigare PLTScheme) är ett multiparadigmprogrammeringsspråk för allmänt bruk som tillhör familjen Lisp / Scheme . Ger en miljö för språkorienterad programmering - ett av syftena med racket är skapandet, utvecklingen och implementeringen av programmeringsspråk [4] [5] . Språket används i olika sammanhang: som skriptspråk , som allmänspråk, i undervisningen i datavetenskap, i vetenskaplig forskning.

Plattformen förser användaren med en implementering av Racket-språket, inklusive en utvecklad runtime-miljö ( engelsk runtime  system ) [6] , olika bibliotek, en JIT-kompilator , etc., samt DrRacket-utvecklingsmiljön (tidigare känd som DrScheme) ) skrivet i Racket [ 7] . Denna programmeringsmiljö används i MIT ProgramByDesign [en] kursen [ 8 [ 9] . Racket-språket har ett kraftfullt makrosystem som låter dig skapa inbäddade och domänspecifika programmeringsspråk, språkkonstruktioner (till exempel klasser och moduler ) och Racket-dialekter med olika semantik [10] [11] [12] [13] .

Systemet är gratis och öppen källkod som distribueras under villkoren i LGPL . Community-skrivna tillägg och paket är tillgängliga från PLaneT [14] , systemets webbaserade distribution [15] .

Historik

Skapande

Matthias Felleisen grundade PLT Inc. i mitten av 1990-talet, först som en forskargrupp, och sedan som ett projekt för att utveckla och producera utbildningsmaterial för nybörjare programmerare (föreläsningar, övningar/projekt, mjukvara). I januari 1995 beslutades att utveckla en lärmiljö för programmering Scheme-språket . Matthew Flatt byggde MrEd, den ursprungliga virtuella Racket-maskinen , med hjälp av libscheme, wxWidgets och några andra fria system [16] . Under de följande åren släppte ett team som inkluderade bland andra Flatt, Robert Bruce Findler , Sriram Krishnamurti , Cormac Flanagan och många andra DrScheme-miljön, designad för nybörjare kretsprogrammerare och forskning inom området av mjuk typning (kombinationer av statisk och dynamisk typning ) [7] . Det huvudsakliga programmeringsspråket som stöds av miljön hette PLT Scheme.

Parallellt med detta började teamet hålla workshops för gymnasielärare och lära dem om programdesign och funktionell programmering . Fältförsök med dessa lärare och deras elever bestämde huvudinriktningarna för produktutveckling.

DrScheme har kompletterats med språkinlärning , en algebraisk  stepper [17] , en transparent REPL- loop, ett nackdelarbaserat utskriftsundersystem och många andra innovationer som har gjort DrScheme till en pedagogisk kvalitetsprodukt. 2001 skrevs och publicerades How to Design Programs av utvecklarna av språket , baserat på deras filosofi att lära ut programmering.

Utveckling av DrScheme

Den första generationens versioner av DrScheme introducerade verktyg för " programmering i stora " med hjälp av moduler och klasser . I version 42 tillkom enheter: ett system av moduler - förstklassiga objekt , som gör att moduler kan kompletteras under utvecklingen av stora system [18] . Å ena sidan kompletterades klasssystemet (i synnerhet med gränssnitt i Java -stil), och å andra sidan reducerades det (särskilt multipla arv togs bort ) [11] . Språket utvecklades över ett antal på varandra följande versioner och blev populärt med version 53, vilket ytterligare accelererade arbetet med det och nästa version 100 blev motsvarigheten till "1.0".

Nästa stora revision, numrerad 200, introducerade ett nytt standardmodulsystem integrerat med makron [18] . I synnerhet ser det modulära systemet till att körtidsberäkningar och kompileringstidsberäkningar är åtskilda för att stödja "språktornet" [19] . Till skillnad från enheter är dessa moduler inte förstklassiga objekt .

Version 300 introducerade stöd för Unicode , ett gränssnittsbibliotek med externa funktioner och ändrade klasssystemet [18] . Senare, för versioner av version 300, förbättrades prestandan genom att lägga till en JIT-kompilator och sopsamling med stöd för objektgenerering .

Vid nästa stora utgåva bytte DrScheme till det allmänt accepterade versionsnumreringssystemet baserat på decimalbråk . Version 4.0 introducerar en förkortning #langför det [under]språk som modulen är skriven på. Också introducerade i denna utgåva är oföränderliga par och listor , stöd för finkornig parallellism och en statiskt typad dialekt [20] .

Racket

Den 7 juni 2010 döptes PLT Scheme om till Racket [21] , vilket sammanföll med releasen av version 5.0. Därefter, i version 5.1, skrevs det underliggande GUI-programmet om från C++ till Racket med hjälp av sin egen verktygslåda för användargränssnitt på alla plattformar [16] . Version 5.2 innehåller en bakgrundssyntaxkontroll , ett nytt plotterbibliotek , databasbibliotek och en ny förbättrad REPL [22] . Version 5.3 innehåller ny funktionalitet: undermoduler för valfritt laddade moduler [23] , nya optimeringsverktyg , ett JSON- bibliotek och andra funktioner [24] . Version 5.3.1 har avsevärt förbättrat DrRacket: en ny dokumentationsvisare har lagts till, bakgrundssyntaxkontroll är aktiverat som standard [25] .

Den huvudsakliga innovationen av version 6.0, som släpptes den 24 februari 2014, var ett nytt paketsystem, Racket-distributionssatsen blev modulär, den består av mer än 200 paket. Nu kan du installera Minimal Racket, där dessa paket inte är förinstallerade. Stöd för JIT-kompilering för ARM -arkitekturen har också lagts till , prestandan för Typed Racket har förbättrats avsevärt, etc. [26] .

De viktigaste innovationerna av version 7.0, som släpptes i slutet av juli 2018, är relaterade till förberedelserna för att ersätta Rackets egen virtuella maskin med Chez Scheme [27] .

Racket Chez Scheme

Sedan början av 2017 har Rackets makro- och modulsystem skrivits om för att ersätta den virtuella C -maskinen med Chez Scheme , samt förbättra portabiliteten och enklare stöd för Racket. Denna gaffel av Racket är känd som Racket CS [28] . I januari 2019 tillkännagavs att Racket on Chez Scheme är fullt fungerande. Även om Racket CS-kompilerad kod vanligtvis körs lika snabbt som klassisk Racket-kod, och ibland till och med snabbare, har den övergripande prestandan ännu inte visat sig vara tillräcklig för att göra Racket CS till standardimplementeringen av Racket. I synnerhet sjunkit kompileringshastigheten och starttiden för Racket-systemet [29] Från och med versionen av Racket 7.4, som släpptes den 8 augusti 2019, fick RacketCS-varianten status som en betaversion tillgänglig för nedladdning från den officiella sidan för programmeringsspråket [30] .

Kodexempel

Ett trivialt " hej världen "-program skulle se ut så här:

# lang racket "Hej världen!"

När den körs kommer den att mata ut:

"Hej världen!"

Här är ett lite mindre trivialt program:

# lang racket ( kräver 2 htdp/bild ) ( låt sierpinski ([ n 8 ]) ( if ( noll? n ) ( triangel 2 'fast ' röd ) ( låt ([ t ( sierpinski ( - n 1 ))]) ( frys ( över t ( bredvid t t ))))))

Detta program, hämtat från Rackets webbplats, kommer att rita en Sierpinski-triangel med ett häckningsdjup på 8.

Ett exempel på användning av en generator:

# lang racket ( kräver racket/generator ) ( definiera fib ( generator () ( låt loop (( x 1 ) ( y 1 )) ( ge x ) ( loop y ( + x y )))))

Med hjälp av direktivet #langkan du skriva program på alternativa Racket-dialekter. Här är ett exempel på en faktorial i Typed Racket, en statiskt typad dialekt :

# lang typed/racket ( : fact ( Heltal -> Heltal )) ( definiera ( fakta n ) ( cond [( noll? n ) 1 ] [ annat ( * n ( faktum ( - n 1 )))]))

Kompatibilitetsläget med Scheme -språkstandarden väljs av direktivet respektive . #lang R6RS#lang R5RS

Anteckningar

  1. Racket v8.4 . Arkiverad från originalet den 12 maj 2022. Hämtad 5 april 2022.
  2. Strickland, TS; Fellesisen, Matthias DLS 2010: Kontrakt för förstaklassklasser (2010). Arkiverad från originalet den 23 maj 2013.
  3. Sperber, Michael; Dybvig, R. Kent; Flatt, Matthew; Van Straaten, Anton, et al. Reviderad 6 Rapport om det algoritmiska språkschemat (R6RS) . Scheme Steering Committee (augusti 2007). Hämtad 13 september 2011. Arkiverad från originalet 23 maj 2013.
  4. Välkommen till Racket . Hämtad 15 augusti 2011. Arkiverad från originalet 23 maj 2013.
  5. Dialekter av racket och schema . Hämtad 15 augusti 2011. Arkiverad från originalet 23 maj 2013.
  6. Flatt; hittare; Krishnamurthi; Felleisen (1999). Programmeringsspråk som operativsystem (eller Revenge of the Son of the Lisp Machine) . Internationell konferens om funktionell programmering.
  7. 1 2 Findler; Clements; Flanagan; platt; Krishnamurthi; Steckler; Felleisen. DrScheme: A Programming Environment for Scheme  //  Journal of Functional Programming : journal. — 2001.
  8. Teach Scheme! Projekt: Beräkning och programmering för varje student . Arkiverad från originalet den 1 maj 2012. Hämtad 22 maj 2013.
  9. Översikt . Program by Design. Hämtad 17 augusti 2011. Arkiverad från originalet 23 maj 2013.
  10. Makron är viktiga (3 maj 2007). Hämtad 8 augusti 2011. Arkiverad från originalet 23 maj 2013.
  11. 12 Flatt , M.; Findler, R.B.; Felleisen, M. (2006). "Schema med klasser, mixins och egenskaper" (PDF) . Asiatiskt symposium om programmeringsspråk och system . Arkiverad 10 maj 2012 på Wayback Machine
  12. Flatt, M.; Felleisen, M. (1998). "Enheter: Coola moduler för heta språk" . Design och implementering av programmeringsspråk . Arkiverad 4 november 2011 på Wayback Machine
  13. Tobin-Hochstadt, S.; St-Amour, V.; Culpepper, R.; Flatt, M.; Felleisen, M. (2011). "Språk som bibliotek" (PDF) . Design och implementering av programmeringsspråk . Arkiverad 10 mars 2012 på Wayback Machine
  14. PLANET . Hämtad 22 maj 2013. Arkiverad från originalet 30 maj 2013.
  15. Matthews, J. (2006). "Komponentdistribution med PLaneT: Vill du ha den var?". Schema och funktionell programmering Workshop .
  16. 1 2 Bygger om rackets grafiklager (8 december 2010). Hämtad 23 augusti 2011. Arkiverad från originalet 23 maj 2013.
  17. Clements, J.; Flatt, M.; Felleisen, M. (2001). "Modellera en algebraisk stepper" (PDF) . Europeiskt symposium om programmeringsspråk . Arkiverad 10 maj 2012 på Wayback Machine
  18. 1 2 3 "Racket Core Release Notes" . Hämtad 15 april 2012. Arkiverad från originalet 23 maj 2013.
  19. Flatt, M. (2002). Komponerbara och kompilerbara makron. Internationell konferens om funktionell programmering .
  20. PLT Scheme version 4.0 (12 juni 2008). Hämtad 7 augusti 2012. Arkiverad från originalet 23 maj 2013.
  21. Från PLT-schema till racket . racket-lang.org. Hämtad 17 augusti 2011. Arkiverad från originalet 23 maj 2013.
  22. Racket 5.2 (9 november 2011). Hämtad 16 juni 2012. Arkiverad från originalet 23 maj 2013.
  23. Undermoduler (3 juni 2012). Hämtad 7 augusti 2012. Arkiverad från originalet 23 maj 2013.
  24. Racket 5.3 (7 augusti 2012). Hämtad 7 augusti 2012. Arkiverad från originalet 23 maj 2013.
  25. Racket 5.3.1 (7 november 2012). Hämtad 7 november 2012. Arkiverad från originalet 23 maj 2013.
  26. Ryan Culpepper. Racket v6.0  (engelska) . blog.racket-lang.org (26 februari 2014). Hämtad 3 februari 2019. Arkiverad från originalet 11 november 2020.
  27. Vincent St Amour. Racket v7.0  (engelska) . blog.racket-lang.org (27 juli 2018). Hämtad 3 februari 2019. Arkiverad från originalet 10 mars 2019.
  28. Matthew Flatt. Racket-on-Chez-status: januari  2018 . blog.racket-lang.org (5 januari 2018). Hämtad 26 juni 2018. Arkiverad från originalet 28 juni 2018.
  29. Matthew Flatt. Racket-on-Chez-status: januari 2019  (engelska) . blog.racket-lang.org (29 januari 2019). Hämtad 3 februari 2019. Arkiverad från originalet 3 februari 2019.
  30. John Clements. Racket v7.4 . blog.racket-lang.org. Hämtad 7 oktober 2019. Arkiverad från originalet 8 oktober 2019.

Litteratur

Lektioner

Stilguide

Länkar