Raketti (ohjelmointikieli)

Kokeneet kirjoittajat eivät ole vielä tarkistaneet sivun nykyistä versiota, ja se voi poiketa merkittävästi 16. maaliskuuta 2022 tarkistetusta versiosta . tarkastukset vaativat 5 muokkausta .
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 ) ( 2022-02-09 )
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] .

Historia

Luominen

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 kehittäminen

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

Racket

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

Racket Chez Scheme

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

Koodiesimerkkejä

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

Muistiinpanot

  1. Racket v8.4 . Arkistoitu alkuperäisestä 12. toukokuuta 2022. Haettu 5. huhtikuuta 2022.
  2. Strickland, TS; Fellesisen, Matthias DLS 2010: Ensimmäisen luokan luokkien sopimukset (2010). Arkistoitu alkuperäisestä 23. toukokuuta 2013.
  3. Sperber, Michael; Dybvig, R. Kent; Flatt, Matthew; Van Straaten, Anton, et ai. Revised 6 Report on the Algorithmic Language Scheme (R6RS) . Järjestelmän ohjauskomitea (elokuu 2007). Haettu 13. syyskuuta 2011. Arkistoitu alkuperäisestä 23. toukokuuta 2013.
  4. Tervetuloa Racketiin . Haettu 15. elokuuta 2011. Arkistoitu alkuperäisestä 23. toukokuuta 2013.
  5. Rakettien ja kaavojen murteet . Haettu 15. elokuuta 2011. Arkistoitu alkuperäisestä 23. toukokuuta 2013.
  6. tasainen; etsijä; Krishnamurthi; Felleisen (1999). Ohjelmointikielet käyttöjärjestelminä (tai Lisp-koneen pojan kosto) . Kansainvälinen toiminnallisen ohjelmoinnin konferenssi.
  7. 1 2 Findler; Clements; Flanagan; tasainen; Krishnamurthi; Steckler; Felleisen. DrScheme: Ohjelmointiympäristö Schemelle  //  Journal of Functional Programming : päiväkirja. – 2001.
  8. Opetusjärjestelmä! Projekti: Laskenta ja ohjelmointi jokaiselle opiskelijalle . Arkistoitu alkuperäisestä 1. toukokuuta 2012. Haettu 22.5.2013.
  9. Yleiskatsaus . Suunnitteluohjelma. Haettu 17. elokuuta 2011. Arkistoitu alkuperäisestä 23. toukokuuta 2013.
  10. Makrot ovat tärkeitä (3. toukokuuta 2007). Haettu 8. elokuuta 2011. Arkistoitu alkuperäisestä 23. toukokuuta 2013.
  11. 12 Flatt , M.; Findler, R.B.; Felleisen, M. (2006). "Järjestelmä luokilla, sekoituksilla ja piirteillä" (PDF) . Aasialainen ohjelmointikieliä ja -järjestelmiä käsittelevä symposium . Arkistoitu 10. toukokuuta 2012 Wayback Machinessa
  12. Flatt, M.; Felleisen, M. (1998). "Yksikkö: hienot moduulit kuumille kielille" . Ohjelmointikielen suunnittelu ja toteutus . Arkistoitu 4. marraskuuta 2011 Wayback Machinessa
  13. Tobin-Hochstadt, S.; St-Amour, V.; Culpepper, R.; Flatt, M.; Felleisen, M. (2011). "Kielet kirjastoina" (PDF) . Ohjelmointikielen suunnittelu ja toteutus . Arkistoitu 10. maaliskuuta 2012 Wayback Machinessa
  14. PLANEETTI . Haettu 22. toukokuuta 2013. Arkistoitu alkuperäisestä 30. toukokuuta 2013.
  15. Matthews, J. (2006). "Komponenttien käyttöönotto PLaneT:n avulla: Haluatko sen missä?". Kaavio ja toiminnallisen ohjelmoinnin työpaja .
  16. 1 2 Racketin grafiikkakerroksen uudelleenrakentaminen (8. joulukuuta 2010). Haettu 23. elokuuta 2011. Arkistoitu alkuperäisestä 23. toukokuuta 2013.
  17. Clements, J.; Flatt, M.; Felleisen, M. (2001). "Algebrallisen askeleen mallintaminen" (PDF) . Eurooppalainen ohjelmointikielten symposiumi . Arkistoitu 10. toukokuuta 2012 Wayback Machinessa
  18. 1 2 3 "Racket Core Release Notes" . Haettu 15. huhtikuuta 2012. Arkistoitu alkuperäisestä 23. toukokuuta 2013.
  19. Flatt, M. (2002). Muodostettavat ja käännettävät makrot. Kansainvälinen toiminnallisen ohjelmoinnin konferenssi .
  20. PLT Scheme -versio 4.0 (12. kesäkuuta 2008). Haettu 7. elokuuta 2012. Arkistoitu alkuperäisestä 23. toukokuuta 2013.
  21. PLT-järjestelmästä mailaan . racket-lang.org. Haettu 17. elokuuta 2011. Arkistoitu alkuperäisestä 23. toukokuuta 2013.
  22. Racket 5.2 (9. marraskuuta 2011). Haettu 16. kesäkuuta 2012. Arkistoitu alkuperäisestä 23. toukokuuta 2013.
  23. Alamoduulit (3. kesäkuuta 2012). Haettu 7. elokuuta 2012. Arkistoitu alkuperäisestä 23. toukokuuta 2013.
  24. Racket 5.3 (7. elokuuta 2012). Haettu 7. elokuuta 2012. Arkistoitu alkuperäisestä 23. toukokuuta 2013.
  25. Racket 5.3.1 (7. marraskuuta 2012). Haettu 7. marraskuuta 2012. Arkistoitu alkuperäisestä 23. toukokuuta 2013.
  26. Ryan Culpepper. Racket v6.0  (englanti) . blog.racket-lang.org (26. helmikuuta 2014). Haettu 3. helmikuuta 2019. Arkistoitu alkuperäisestä 11. marraskuuta 2020.
  27. Vincent St Amour. Racket v7.0  (englanniksi) . blog.racket-lang.org (27. heinäkuuta 2018). Haettu 3. helmikuuta 2019. Arkistoitu alkuperäisestä 10. maaliskuuta 2019.
  28. Matthew Flatt. Racket-on-Chezin tila: tammikuu  2018 . blog.racket-lang.org (5. tammikuuta 2018). Haettu 26. kesäkuuta 2018. Arkistoitu alkuperäisestä 28. kesäkuuta 2018.
  29. Matthew Flatt. Racket-on-Chezin tila: tammikuu 2019  (englanniksi) . blog.racket-lang.org (29. tammikuuta 2019). Haettu 3. helmikuuta 2019. Arkistoitu alkuperäisestä 3. helmikuuta 2019.
  30. John Clements. Raketti v7.4 . blog.racket-lang.org. Haettu 7. lokakuuta 2019. Arkistoitu alkuperäisestä 8. lokakuuta 2019.

Kirjallisuus

Oppitunnit

Tyyliopas

Linkit