maila | |
---|---|
Kieliluokka |
moniparadigma : oliosuuntautunut , proseduurillinen , heijastava , toiminnallinen , looginen , meta , kielisuuntautunut |
Esiintyi | 1994 |
Tekijä | PLT Inc. |
Tiedostotunniste _ | .rkt, .rktl, .rktd, .scrbl, .plt, .sstai.scm |
Vapauta | 8.4 [1] (9. helmikuuta 2022 ) |
Tyyppijärjestelmä | dynaaminen , tiukka , staattinen |
Murteet | Kirjoitettu Racket , Lazy Racket , Scribble , FrTime jne. |
Vaikutettu | Scheme , Eiffel [2] |
vaikutti | Kaava [3] |
Lisenssi | LGPL |
Verkkosivusto | racket-lang.org |
Alusta | cross-platform |
Racket (aiemmin PLTScheme) on yleiskäyttöinen moniparadigmaohjelmointikieli , joka kuuluu Lisp / Scheme -perheeseen . Tarjoaa ympäristön kielisuuntautuneelle ohjelmointille - yksi racketin tavoitteista on ohjelmointikielten luominen, kehittäminen ja toteuttaminen [4] [5] . Kieltä käytetään eri yhteyksissä: komentosarjakielenä , yleiskäyttöisenä kielenä, tietojenkäsittelytieteen opetuksessa, tieteellisessä tutkimuksessa.
Alusta tarjoaa käyttäjälle Racket-kielen toteutuksen, mukaan lukien kehitetyn ajonaikaisen ympäristön ( englanninkielinen runtime system ) [6] , erilaisia kirjastoja, JIT-kääntäjän jne. sekä DrRacket-kehitysympäristön (aiemmin DrScheme). ) kirjoitettu Racketillä [7] . Tätä ohjelmointiympäristöä käytetään MIT ProgramByDesign [en] kurssilla [ 8 [ 9] . Racket-ydinkielessä on tehokas makrojärjestelmä, jonka avulla voit luoda sulautettuja ja toimialuekohtaisia ohjelmointikieliä, kielirakenteita (esimerkiksi luokat ja moduulit ) ja Racket-murteita, joilla on eri semantiikka [10] [11] [12] [13] .
Järjestelmä on ilmainen avoimen lähdekoodin ohjelmisto , jota jaetaan LGPL :n ehtojen mukaisesti . Yhteisön kirjoittamia laajennuksia ja paketteja on saatavana PLaneT:stä [14] , järjestelmän verkkopohjaisesta jakelusta [15] .
Matthias Felleisen perusti PLT Inc1990-luvun puolivälissä aluksi tutkimusryhmänä ja sitten aloittelevien ohjelmoijien koulutusmateriaalien (luennot, harjoitukset/projektit, ohjelmistot) kehittämis- ja tuotantoprojektina. Tammikuussa 1995 päätettiin kehittää ohjelmoinnin oppimisympäristö Scheme -kielellä. Matthew Flatt rakensi MrEdin, alkuperäisen Racket- virtuaalikoneen käyttämällä libschemea, wxWidgettejä ja joitain muita ilmaisia järjestelmiä [16] . Seuraavien vuosien aikana tiimi, johon kuuluivat mm. Flatt, Robert Bruce Findler , Sriram Krishnamurti , Cormac Flanagan ja monet muut, julkaisi DrScheme-ympäristön, joka on suunniteltu aloitteleville piiriohjelmoijille ja alan tutkimukselle. pehmeän kirjoittamisen ( staattisen ja dynaamisen kirjoittamisen yhdistelmät ) [7] . Pääasiallinen ympäristön tukema ohjelmointikieli oli nimeltään PLT Scheme.
Samanaikaisesti tiimi alkoi järjestää lukion opettajille työpajoja, joissa opetettiin ohjelmien suunnittelua ja toiminnallista ohjelmointia . Kenttäkokeet näiden opettajien ja heidän oppilaidensa kanssa määrittelivät tuotekehityksen pääsuunnat.
DrSchemeä on täydennetty kielten oppimisella , algebrallisella stepperillä [17] , läpinäkyvällä REPL -silmukalla, haitoihin perustuvalla tulostusalijärjestelmällä ja monilla muilla innovaatioilla, jotka ovat tehneet DrSchemestä laadukkaan koulutustuotteen. Vuonna 2001 kielen kehittäjät kirjoittivat ja julkaisivat How to Design Programs ohjelmoinnin opetusfilosofiaan perustuen.
DrSchemen ensimmäisen sukupolven versiot esittelivät työkaluja " suurten ohjelmointien " käyttämiseen moduuleilla ja luokilla . Versiossa 42 lisättiin yksiköitä: moduulijärjestelmä - ensiluokkaiset objektit , joka mahdollistaa moduulien täydentämisen suurten järjestelmien kehittämisen aikana [18] . Toisaalta luokkajärjestelmää täydennettiin (erityisesti Java- tyylisillä liitännöillä ) ja toisaalta sitä pienennettiin (erityisesti moniperinnöstä poistettiin ) [11] . Kieli kehittyi useissa peräkkäisissä versioissa ja saavutti suosion versiolla 53, mikä nopeuttai edelleen työtä sen parissa ja seuraava versio 100 tuli vastineeksi "1.0".
Seuraava suuri versio, numero 200, esitteli uuden oletusmoduulijärjestelmän, joka on integroitu makroihin [18] . Modulaarinen järjestelmä varmistaa erityisesti, että ajonaikaiset laskelmat ja käännösaikalaskelmat erotetaan toisistaan "kielten tornin" tukemiseksi [19] . Toisin kuin yksiköt, nämä moduulit eivät ole ensiluokkaisia objekteja .
Versio 300 esitteli tuen Unicodelle , rajapintakirjastolle ulkoisilla funktioilla ja muutti luokkajärjestelmää [18] . Myöhemmin version 300 julkaisujen suorituskykyä parannettiin lisäämällä JIT-kääntäjä ja roskienkeräys , joka tukee objektisukupolvia .
Seuraavassa suuressa julkaisussa DrScheme siirtyi yleisesti hyväksyttyyn desimaalilukuihin perustuvaan versionumerointijärjestelmään . Versio 4.0 sisältää lyhenteen [ali]kielelle, jolla moduuli on kirjoitettu. Tässä julkaisussa esitellään myös muuttumattomat parit ja luettelot , tuki hienorakeiselle rinnakkaisuudelle ja staattisesti kirjoitettu murre [20] . #lang
7. kesäkuuta 2010 PLT Scheme nimettiin uudelleen Racketiksi [21] , samaan aikaan kun versio 5.0 julkaistiin. Myöhemmin, versiossa 5.1, taustalla oleva GUI-ohjelma kirjoitettiin uudelleen C++ :sta Racketiksi käyttämällä omaa käyttöliittymätyökalupakettia kaikilla alustoilla [16] . Versio 5.2 sisältää taustasyntaksin tarkistimen , uuden plotterikirjaston, tietokantakirjastot ja uuden parannetun REPL:n [22] . Versio 5.3 sisältää uusia toimintoja: alimoduulit valinnaisesti ladatuille moduuleille [23] , uudet optimointityökalut , JSON - kirjasto ja muita ominaisuuksia [24] . Versio 5.3.1 on parantanut DrRacketia merkittävästi: uusi dokumentaation katseluohjelma on lisätty, taustasyntaksin tarkistus on oletuksena käytössä [25] .
24.2.2014 julkaistun version 6.0 tärkein innovaatio oli uusi pakettijärjestelmä, Racket-jakelusarjasta tuli modulaarinen, se koostuu yli 200 paketista. Nyt voit asentaa Minimal Racketin, jossa näitä paketteja ei ole esiasennettu. Tuki JIT - käännökselle ARM -arkkitehtuurille on myös lisätty , Typed Racketin suorituskykyä on parannettu merkittävästi jne. [26] .
Heinäkuun 2018 lopussa julkaistun version 7.0 tärkeimmät innovaatiot liittyvät Racketin oman virtuaalikoneen korvaamisen valmisteluun Chez Schemellä [27] .
Vuoden 2017 alusta lähtien Racketin makro- ja moduulijärjestelmä on kirjoitettu uudelleen korvaamaan C - virtuaalikone Chez Schemellä sekä parantamaan Racketin siirrettävyyttä ja tuen helppoutta. Tämä Racketin haarukka tunnetaan nimellä Racket CS [28] . Tammikuussa 2019 Racket on Chez Scheme ilmoitettiin olevan täysin toimiva. Vaikka Racket CS:n käännetty koodi toimii tyypillisesti yhtä nopeasti kuin klassinen Racket-koodi, ja joskus jopa nopeammin, kokonaissuorituskykyä ei ole vielä havaittu riittävän tekemään Racket CS:stä Racketin oletustoteutus. Erityisesti Racket-järjestelmän käännösnopeus ja käynnistysaika laskivat [29] Racket 7.4:n versiosta alkaen, joka julkaistiin 8. elokuuta 2019, RacketCS-versio sai beta-version tilan, joka on ladattavissa viralliselta sivulta ohjelmointikieli [30] .
Triviaali " hello world " -ohjelma näyttäisi tältä:
# langracket " Hei , maailma!"Kun se suoritetaan, se tulostaa:
"Hei maailma!"Tässä hieman vähemmän triviaali ohjelma:
# lang racket ( vaaditaan 2 htdp/kuva ) ( anna sierpinski ([ n 8 ]) ( if ( nolla? n ) ( kolmio 2 'kiinteä 'punainen ) ( anna ([ t ( sierpinski ( - n 1 ))]) ( jäädyttää ( t :n yläpuolella ( t : n vieressä )))))))Tämä Racketin verkkosivustolta otettu ohjelma piirtää Sierpinskin kolmion , jonka sisäkkäisyvyys on 8.
Esimerkki generaattorin käytöstä:
# lang racket ( vaadi maila/generaattori ) ( määritä fib ( generaattori () ( anna silmukan (( x 1 ) ( y 1 )) ( tuotto x ) ( silmukka y ( + x y )))))Käyttämällä direktiiviä #langvoit kirjoittaa ohjelmia vaihtoehtoisilla Racket-murteilla. Tässä on esimerkki Typed Racketin faktoriaalista , staattisesti kirjoitetusta murteesta :
# lang typed/racket ( : fact ( Integer -> Integer )) ( define ( fact n ) ( cond [( zero? n ) 1 ] [ else ( * n ( fakta ( - n 1 )))]))Yhteensopivuustila Scheme -kielistandardin kanssa valitaan direktiivillä tai vastaavasti. #lang R6RS#lang R5RS
Lisp | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Ominaisuudet |
| ||||||||||||||
Toteutukset |
| ||||||||||||||
Laitteisto |
| ||||||||||||||
Yhteisö |
| ||||||||||||||
|