Racket (programozási nyelv)

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt közreműködők, és jelentősen eltérhet a 2022. március 16-án felülvizsgált verziótól ; az ellenőrzések 5 szerkesztést igényelnek .
ütő
Nyelvóra több paradigma :
objektumorientált , procedurális ,
reflektív ,
funkcionális ,
logikai ,
meta ,
nyelvorientált
Megjelent 1994
Szerző PLT Inc.
Fájlkiterjesztés _ .rkt, .rktl, .rktd, .scrbl, .plt, .ssvagy.scm
Kiadás 8.4 [1]  (2022. február 9. ) ( 2022-02-09 )
Típusrendszer dinamikus , szigorú , statikus
Dialektusok Gépelt ütő , Lazy Racket , Scribble , FrTime stb.
Befolyásolt Scheme , Eiffel [2]
befolyásolta Séma [3]
Engedély LGPL
Weboldal racket-lang.org
Felület platformközi

A Racket (korábban PLTScheme) egy általános célú többparadigmájú programozási nyelv , amely a Lisp / Scheme családhoz tartozik . Környezetet biztosít a nyelvorientált programozáshoz - az racket egyik célja a programozási nyelvek létrehozása, fejlesztése és megvalósítása [4] [5] . A nyelvet különféle kontextusokban használják: szkriptnyelvként , általános célú nyelvként, számítástechnika oktatásában, tudományos kutatásban.

A platform a felhasználó számára a Racket nyelv implementációját biztosítja, beleértve a fejlett futási környezetet ( angol runtime  system ) [6] , különböző könyvtárakat, JIT fordítót stb., valamint a DrRacket fejlesztői környezetet (korábbi nevén DrScheme) ) Racketben írva [7] . Ezt a programozási környezetet az MIT ProgramByDesign [en] kurzus [ 8 [ 9] használja . A Racket alapnyelv egy erőteljes makrórendszerrel rendelkezik , amely lehetővé teszi beágyazott és tartomány-specifikus programozási nyelvek, nyelvi konstrukciók (például osztályok és modulok ) és Racket dialektusok létrehozását különböző szemantikával [10] [11] [12] [13] .

A rendszer ingyenes és nyílt forráskódú szoftver , amelyet az LGPL feltételei szerint terjesztenek . A közösség által írt bővítmények és csomagok a PLaneT-től [14] , a rendszer web-alapú terjesztésétől [15] érhetők el .

Történelem

Létrehozás

Matthias Felleisen megalapította a PLT Inc.-t. az 1990-es évek közepén kezdetben kutatócsoportként, majd kezdő programozók számára oktatási anyagok fejlesztésére és gyártására irányuló projektként (előadások, gyakorlatok/projektek, szoftverek). 1995 januárjában úgy döntöttek, hogy egy tanulási környezetet fejlesztenek ki a Scheme nyelvű programozáshoz . Matthew Flatt megépítette az MrEd-et, az eredeti Racket virtuális gépet libscheme, wxWidgets és néhány más ingyenes rendszer segítségével [16] . A következő években egy csapat, amelyben többek között Flatt, Robert Bruce Findler , Sriram Krishnamurti , Cormac Flanagan és még sokan mások voltak, kiadta a DrScheme környezetet, amelyet a kezdő áramkör-programozók és a területen végzett kutatók számára terveztek. lágy gépelés ( statikus és dinamikus gépelés kombinációi ) [7] . A környezet által támogatott fő programozási nyelv a PLT Scheme volt.

Ezzel párhuzamosan a csapat workshopokat kezdett középiskolai tanárok számára, ahol programtervezésre és funkcionális programozásra tanította őket . Ezekkel a tanárokkal és diákjaikkal végzett tereppróbák határozták meg a termékfejlesztés fő irányait.

A DrScheme kiegészült nyelvtanulással , algebrai  léptetővel [17] , átlátszó REPL hurokkal, hátrányokon alapuló nyomtatási alrendszerrel és sok más olyan újítással, amelyek a DrScheme-t minőségi oktatási termékké tették. 2001-ben a How to Design Programs -t a nyelv fejlesztői írták és adták ki , programozásoktatási filozófiájuk alapján.

A DrScheme fejlesztése

A DrScheme első generációs verziói olyan eszközöket vezettek be, amelyek modulokat és osztályokat használnak a " nagyon programozáshoz" . A 42-es verzióban egységekkel egészült ki: a modulok rendszere - első osztályú objektumok , amely lehetővé teszi a modulok kiegészítését a nagy rendszerek fejlesztése során [18] . Egyrészt az osztályrendszert kiegészítették (főleg Java stílusú interfészekkel ), másrészt csökkentették (főleg a többszörös öröklődést eltávolították ) [11] . A nyelv több egymást követő verzióban fejlődött, és az 53-as verzióval vált népszerűvé, ami tovább gyorsította a munkát, és a következő 100-as verzió az "1.0" megfelelője lett.

A következő nagyobb, 200-as revízió egy új alapértelmezett, makróval integrált modulrendszert vezetett be [18] . A moduláris rendszer különösen azt biztosítja, hogy a futásidejű számítások és a fordítási idejű számítások el legyenek különítve, hogy támogassák a "nyelvek tornyát" [19] . Az egységekkel ellentétben ezek a modulok nem első osztályú objektumok .

A 300-as verzió bevezette a Unicode támogatását , egy interfész könyvtárat külső függvényekkel , és megváltoztatta az osztályrendszert [18] . Később, a 300-as verzió kiadásainál a teljesítményt egy JIT fordító és szemétgyűjtő hozzáadásával javították az objektumgenerálások támogatásával .

A következő nagyobb kiadásban a DrScheme áttért az általánosan elfogadott , tizedes törteken alapuló verziószámozási rendszerre . A 4.0-s verzió egy rövidítést vezet be azon [al]nyelvre, amelyen a modul íródott. Ebben a kiadásban a változatlan párok és listák , a finomszemcsés párhuzamosság támogatása és a statikusan begépelt dialektus is bekerült [20] . #lang

Ütő

2010. június 7-én a PLT Scheme átnevezték Racket [21] névre , ami egybeesik az 5.0-s verzió megjelenésével. Ezt követően az 5.1-es verzióban az alapul szolgáló grafikus felhasználói felület programot C++ -ról Racket-re írták át a saját felhasználói felület eszköztárával minden platformon [16] . Az 5.2-es verzió tartalmaz egy háttérszintaxis - ellenőrzőt , egy új plotter-könyvtárat, adatbázis-könyvtárakat és egy új, továbbfejlesztett REPL-t [22] . Az 5.3-as verzió új funkciókat tartalmaz: almodulokat az opcionálisan betöltött modulokhoz [23] , új optimalizáló eszközöket , JSON - könyvtárat és egyéb funkciókat [24] . Az 5.3.1-es verzióban a DrRacket jelentősen továbbfejlesztett: új dokumentáció-nézegető került hozzáadásra, a háttérszintaktikai ellenőrzés alapértelmezés szerint engedélyezve van [25] .

A 2014. február 24-én megjelent 6.0-s verzió fő innovációja egy új csomagrendszer volt, a Racket disztribúciós készlet modulárissá vált, több mint 200 csomagból áll. Most már telepítheti a Minimal Racketet, ahol ezek a csomagok nincsenek előre telepítve. Az ARM architektúra JIT-fordításának támogatása is hozzáadásra került , a Typed Racket teljesítménye jelentősen javult stb. [26] .

A 2018. július végén megjelent 7.0-s verzió főbb újításai a Racket saját virtuális gépének Chez Scheme -re való lecserélésének előkészítéséhez kapcsolódnak [27] .

Racket Chez Scheme

2017 eleje óta a Racket makró- és modulrendszerét átírták, hogy a C virtuális gépet a Chez Scheme -re cseréljék , valamint javítsák a Racket hordozhatóságát és egyszerűbb támogatását. A Racket ezen villája Racket CS [28] néven ismert . 2019 januárjában bejelentették, hogy a Racket on Chez Scheme teljesen működőképes. Bár a Racket CS által lefordított kód általában olyan gyorsan fut, mint a klasszikus Racket kód, és néha még gyorsabban is, az általános teljesítmény még nem bizonyult elegendőnek ahhoz, hogy a Racket CS legyen a Racket alapértelmezett megvalósítása. Különösen a Racket rendszer fordítási sebessége és indítási ideje csökkent [29] A Racket 7.4 2019. augusztus 8-án megjelent verziójától kezdve a RacketCS változat béta verzió státuszát kapta, amely letölthető a hivatalos oldalról. a programozási nyelv [30] .

Kódpéldák

Egy triviális " hello world " program így nézne ki:

# langracket "Hello , World!"

Futásakor a következőt adja ki:

"Helló Világ!"

Íme egy kicsit kevésbé triviális program:

# lang racket ( 2 htdp/kép szükséges ) ( legyen sierpinski ([ n 8 ]) ( if ( zero? n ) ( 2. háromszög 'szilárd 'piros ) ( let ([ t ( sierpinski ( - n 1 ))]) ( lefagyasztani ( t felett ( t mellett ) ))))))

Ez a program, amelyet a Racket webhelyéről vettünk, egy Sierpinski-háromszöget fog rajzolni , amelynek beágyazási mélysége 8.

Példa a generátor használatára:

# lang racket ( ütő/generátor szükséges ) ( fib definiálása ( generátor () ( hagyja hurkot (( x 1 ) ( y 1 )) ( hozam x ) ( hurok y ( + x y )))))

A direktíva használatával #langprogramokat írhat alternatív Racket dialektusokban. Íme egy példa a Typed Racket faktoriálisra , egy statikusan gépelt dialektusra :

# lang typed/racket ( : fact ( Integer -> Integer )) ( define ( tény n ) ( cond [( zero? n ) 1 ] [ else ( * n ( tény ( - n 1 )))]))

A Scheme nyelvi szabvánnyal való kompatibilitási módot a vagy a direktíva választja ki . #lang R6RS#lang R5RS

Jegyzetek

  1. Racket v8.4 . Archiválva az eredetiből 2022. május 12-én. Letöltve: 2022. április 5.
  2. Strickland, TS; Fellesisen, Matthias DLS 2010: Szerződések első osztályú osztályokra (2010). Archiválva az eredetiből 2013. május 23-án.
  3. Sperber, Michael; Dybvig, R. Kent; Flatt, Matthew; Van Straaten, Anton és mtsai. Revised 6 Report on the Algorithmic Language Scheme (R6RS) . A rendszer irányító bizottsága (2007. augusztus). Letöltve: 2011. szeptember 13. Az eredetiből archiválva : 2013. május 23..
  4. Üdvözöljük a Racketben . Letöltve: 2011. augusztus 15. Az eredetiből archiválva : 2013. május 23..
  5. Az ütő és a séma dialektusai . Letöltve: 2011. augusztus 15. Az eredetiből archiválva : 2013. május 23..
  6. Lapos; kereső; Krishnamurthi; Felleisen (1999). Programozási nyelvek mint operációs rendszerek (vagy a Lisp-gép fiának bosszúja) . Nemzetközi Funkcionális Programozási Konferencia.
  7. 1 2 Findler; Clements; Flanagan; lapos; Krishnamurthi; Steckler; Felleisen. DrScheme: Programing Environment for Scheme  //  Journal of Functional Programming : folyóirat. – 2001.
  8. A TeachScheme! Projekt: Számítástechnika és programozás minden tanuló számára . Az eredetiből archiválva : 2012. május 1. Letöltve: 2013. május 22.
  9. Áttekintés . Program by Design. Letöltve: 2011. augusztus 17. Az eredetiből archiválva : 2013. május 23..
  10. A makrók számítanak (2007. május 3.). Letöltve: 2011. augusztus 8. Az eredetiből archiválva : 2013. május 23.
  11. 12 Flatt , M.; Findler, R. B.; Felleisen, M. (2006). „Séma osztályokkal, keverékekkel és tulajdonságokkal” (PDF) . Ázsiai szimpózium a programozási nyelvekről és rendszerekről . Archiválva : 2012. május 10. a Wayback Machine -nél
  12. Flatt, M.; Felleisen, M. (1998). "Egységek: Cool Modules for Hot Languages" . Programozási nyelv tervezése és megvalósítása . Archiválva : 2011. november 4. a Wayback Machine -nél
  13. Tobin-Hochstadt, S.; St-Amour, V.; Culpepper, R.; Flatt, M.; Felleisen, M. (2011). „Nyelvek mint könyvtárak” (PDF) . Programozási nyelv tervezése és megvalósítása . Archiválva : 2012. március 10. a Wayback Machine -nél
  14. BOLYGÓ . Letöltve: 2013. május 22. Az eredetiből archiválva : 2013. május 30.
  15. Matthews, J. (2006). „Alkatrészek telepítése a PlaneT segítségével: Hol szeretné?”. Séma és funkcionális programozási műhely .
  16. 1 2 A Racket grafikus rétegének újraépítése (2010. december 8.). Letöltve: 2011. augusztus 23. Az eredetiből archiválva : 2013. május 23..
  17. Clements, J.; Flatt, M.; Felleisen, M. (2001). „Algebrai léptető modellezése” (PDF) . Európai Programozási Nyelvek Szimpózium . Archiválva : 2012. május 10. a Wayback Machine -nél
  18. 1 2 3 "Racket Core kiadási megjegyzések" . Letöltve: 2012. április 15. Az eredetiből archiválva : 2013. május 23..
  19. Flatt, M. (2002). Összeállítható és lefordítható makrók. Nemzetközi Funkcionális Programozási Konferencia .
  20. A PLT-séma 4.0-s verziója (2008. június 12.). Letöltve: 2012. augusztus 7. Az eredetiből archiválva : 2013. május 23..
  21. A PLT-sémától az ütőig . racket-lang.org. Letöltve: 2011. augusztus 17. Az eredetiből archiválva : 2013. május 23..
  22. Racket 5.2 (2011. november 9.). Letöltve: 2012. június 16. Az eredetiből archiválva : 2013. május 23..
  23. Almodulok (2012. június 3.). Letöltve: 2012. augusztus 7. Az eredetiből archiválva : 2013. május 23..
  24. Racket 5.3 (2012. augusztus 7.). Letöltve: 2012. augusztus 7. Az eredetiből archiválva : 2013. május 23..
  25. Racket 5.3.1 (2012. november 7.). Letöltve: 2012. november 7. Az eredetiből archiválva : 2013. május 23..
  26. Ryan Culpepper. Racket v6.0  (angol) . blog.racket-lang.org (2014. február 26.). Letöltve: 2019. február 3. Az eredetiből archiválva : 2020. november 11.
  27. Vincent St Amour. Racket v7.0  (angol) . blog.racket-lang.org (2018. július 27.). Letöltve: 2019. február 3. Az eredetiből archiválva : 2019. március 10.
  28. Matthew Flatt. Racket-on-Chez állapota: 2018. január  . blog.racket-lang.org (2018. január 5.). Letöltve: 2018. június 26. Az eredetiből archiválva : 2018. június 28.
  29. Matthew Flatt. Racket-on-Chez állapota: 2019. január  (angolul) . blog.racket-lang.org (2019. január 29.). Letöltve: 2019. február 3. Az eredetiből archiválva : 2019. február 3..
  30. John Clements. Racket v7.4 . blog.racket-lang.org. Letöltve: 2019. október 7. Az eredetiből archiválva : 2019. október 8..

Irodalom

Leckék

Stílus útmutató

Linkek