ü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. ) |
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 .
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 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
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] .
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] .
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
Selypít | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Jellemzők |
| ||||||||||||||
Megvalósítások |
| ||||||||||||||
Hardver |
| ||||||||||||||
Közösség |
| ||||||||||||||
|