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 ) |
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] .
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 på 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.
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] .
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] .
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] .
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
Läspa | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Egenskaper |
| ||||||||||||||
Genomföranden |
| ||||||||||||||
Hårdvara |
| ||||||||||||||
gemenskap |
| ||||||||||||||
|