Racket

náhľad|180x180bod|Logo programovacieho jazyka Racket
**Racket** je univerzálny, multiparadigmatický programovací jazyk, založený na dialekte Lispu Scheme. Bol navrhnutý ako platforma pre vytváranie a implementáciu programovacích jazykov. Používa sa aj na skriptovanie, vzdelávanie v oblasti informatiky a výskum. Názov Racket sa používa nielen na označovanie samotného programovacieho jazyka aj na označovanie celej rodiny programovacích jazykov a nástrojov podporovaných Racketom.

Základný Racket je známy pre jeho rozšírený makro systém, ktorý povoľuje vytváranie vnorených a doménovo-špecifických jazykov, jazykových konštrukcií (triedy, moduly, …) a samostatných dialektov Racketu s rôznou sémantikou.

Ide o slobodný a otvorený softvér rozširovaný pod licenciami Apache 2.0 a MIT. Rozšírenia a balíčky, ktoré napíšu členovia komunity môžu byť nahrané do Správcu balíčkov Racketu.

## Vývoj
V polovici deväťdesiatych rokov minulého storočia založil Matthias Felleisen korporáciu PLT. Najprv to bola výskumná skupina, po krátkom čase sa z nej však stal projekt orientovaný na vytváranie pedagogických materiálov (ako lekcie, úlohy, projekty, softvér,…) pre začínajúcich programátorov. 

V januári 1995 sa skupina rozhodla vyvinúť vzdelávacie programovacie prostredie založené na Scheme. Matthew Flatt z libscheme, wxWidgets a niekoľkých ďalších voľných systémov spravil nahrubo prvú verziu MrEd, originálneho virtuálneho stroja pre Racket.

Počas nasledujúcich rokov, tím zložený z Flatta, Robbyho Findlera, Shrirama Krishnamurthiho, Cormaca Flanagana a ďalších vytvorili programovacie prostredie pre začínajúcich programátorov v Scheme a výskumné prostredie pre soft typing nazvané DrScheme. Hlavný vývojový jazyk, ktorý tento DrScheme podporoval sa nazýval PLT Scheme.

Tím medzitým začal organizovať workshopy pre stredoškolských učiteľov a začali ich učiť funkčné programovanie a navrhovať programy. Terénne testy s učiteľmi a ich študentmi im poskytli základné indície ako smerovať vývoj. Počas ďalších rokov pridalo PLT mnoho ďalších inovácií do DrScheme, vytvárajúc z neho kvalitné prostredie pre pegogické vytváranie programov. Napísali a vydali aj ich prvú učebnicu *“Ako navrhovať programy”*.

Vyšlo aj *“The Racket Manifesto”*, ktoré popisuje motívaciu, ktorá viedla k vývoju Racketu, vyhodnocuje ho a opisuje možnosti budúcich vylepšení.

## Programovacie prostredie
Jazyková platforma poskytuje self-hosted IDE nazvané DrRacket, webový server, grafické používateľské rozhranie a ďalšie nástroje. Keďže ide o skriptovací nástroj s knižnicami, môže byť použitý aj na skriptovanie unixového shellu. Dokáže parsovať argumenty z príkazového riadka a spracovať externé nástroje.

### DrRacket IDE
DrRacket (pôvodne DrScheme) sa používa najmä v úvodných informatických kurzoch, ktoré učia Scheme alebo Racket. Je obľúbený najmä pre jeho jednoduchosť a atraktivitu pre programátorov - začiatočníkov. IDE bolo pôvodne vytvorené na použitie s TeachScheme! projektom (teraz už ProgramByDesign), čo bol projekt niekoľkých univerzít na vzbudenie záujmu o štúdium iinformatika u stredoškolákov.

Editor poskytuje zvýrazňujúcu sa syntax a run-time chyby, párovanie zátvoriek, debugger a algebraický stepper. Jednou z jeho pre študentov priateľských vlastností je, že obsahuje podporu na niekoľkých “jazykových levelov”, teda študent začiatočník, pokročilý študent a pod. Ďalej má integrovanú podporu knižníc a sofistikované nástroje na analýzu pre pokročilejších programátorov. Naviac, modulovo-orientované programovanie je podporované modulovým prehliadačom, podporov refaktorovania a ďalšími vylepšeniami. Poskytuje integrovaný, kontextovo-senzitívny prístup k širokému hyperlinkovanému pomocnému systému nazvanému “Help Desk”.

Je k dispozícii pre  Windows, MacOS, Unix a Linux.

## Aplikácie a praktické využitie
Racket bol navrhnutý ako jazyk so všeobecným využitím na vytváranie systémov. Teda distributívna verzia Racketu obsahuje rozsiahlu knižnicu, ktorá pokrýva systémy a sieťové programovanie, web development, jednotné prostredie k podliehajúcemu operačnému systému, dynamické prostredie pre cudzie funkcie (foreign function interface), niekoľko rôznych typov regulárnych výrazov, lexikálne a parsovacie generátory, logické programovanie a úplný framework pre grafické používateľské rozhranie.

Racket má aj rôzne vlastnosti praktické pre komerčný jazyk, napríklad schopnosť kompilovať samostatné spustiteľné súbory pod operačnými systémmi Windows, MacOS a Unix, unit testing framework a profiler a debugger obsiahnuté v integrovanom vývojovom prostredí (IDE).

Využíva ho niekoľko komerčných projektov a webových aplikácií. Napríklad stránka Hacker News beží na Arcu, ktorý bol vytvorený v Rackete a Naughty dog ho využíva ako skriptovací jazyk v niekoľkých videohrách.

Používa sa aj na výučbu algebry pre študentov cez herný dizajn v Bootstrap programe.

## Ukážka kódu
Takto vyzerá triviálny hello world program:
```racket
#lang racket
"Hello, World!"
```
Zbehnutím tohto programu dostaneme výstup:

Tu je trochu menej triviálny program, ktorým získame Serpinského trojuholník s hĺbkou 8:
náhľad|Výstup tohto programu v DrRacket

```racket
#lang racket
(require 2htdp/image)

(let sierpinski ([n 8])
  (if (zero? n)
    (triangle 2 'solid 'red)
    (let ([t (sierpinski (- n 1))])
      (freeze (above t (beside t t))))))
```
Používaním #lang príkazu zdrojový kód môže byť napísaný v rôznych dialektoch. Tu je ukážka programu pre faktoriál napísanom v Typed Racket, ktorý je staticky typovaný:
```racket
#lang typed/racket

(: fact (Integer -> Integer))
(define (fact n)
  (if (zero? n) 1 (* n (fact (- n 1)))))
```


## Webové odkazy
* Oficiálna stránka (v angličtine)

## Zdroje

Kategória:Funkcionálne jazyky
Kategória:Vývoj softvéru
Kategória:Vzniklo v 1995