Haskell (programovací jazyk)
Haskell je štandardizovaný funkcionálny programovací jazyk s voľnou sémantikou (lenivé vyhodnocovanie) pomenovaný po logikovi Haskellovi Currym.[1]:29[2]:xiii Bol vytvorený v 90. rokoch 20. storočia.[1]:14 Štandard Haskell 98 definuje minimálnu a portabilnú verziu jazyka využiteľnú na výuku alebo ako základ ďalších rozšírení.[3] Jeho nástupcom je revízia Haskell 2010, ohlásená v novembri 2009 (pozri nižšie).[2]:xiv[4] Jazyk sa rýchlo vyvíja, predovšetkým vďaka implementácii GHC (pozri nižšie), ktorá predstavuje súčasný de facto štandard;[5] implementácia Hugs sa už ďalej nevyvíja.[6]
Medzi zaujímavé vlastnosti jazyka Haskell patrí podpora rekurzívnych funkcií a údajových štruktúr, pattern matching, expanzia zoznamov a strážne výrazy.[7]:7, 20, 42 Takáto kombinácia schopností umožňuje tvorbu funkcií, ktoré by sa v procedurálnych jazykoch implementovali ťažko, zatiaľ, čo v Haskelli sú triviálne. Haskell je v roku 2002 funkcionálny jazyk, na ktorom sa vykonáva najviac výskumu. Bolo vyvinutých niekoľko variantov: paralelizovateľné verzie od MIT a Glasgowskej univerzity, obe sa nazývajú Haskell; paralelnejšie a distribuovanejšie verzie nazývané Distributed Haskell (bývalý Goffin) a Eden; verzia implementujúca špekulatívne vyhodnocovanie nazývaná Eager Haskell a niekoľko objektovo orientovaných verzií: Haskell++, O'Haskell a Mondrian.
Existuje aj jazyk podobný Haskellu, ktorý ponúka nový spôsob podpory vývoja GUI nazývaný Concurrent Clean. Jeho najväčšou odchýlkou od Haskellu je použitie jedinečných typov a monáda.
Mark Jones vyvinul výučbovú verziu jazyka nazývanú Gofer.[8]:29, 40 Bola nahradená systémom HUGS (Haskell User's Gofer System), pozri implementácie dolu.[8]:30
História
[upraviť | upraviť zdroj]Výbor, ktorý jazyk navrhol, počítal s tým, že vzniknú jeho rozšírenia a varianty; na workshope Haskell Workshop v roku 2005 sa dospelo k zhode, že široko používaných rozšírení oficiálneho jazyka, ktoré podporuje viacero implementácií, je už toľko, že sa oplatí definovať ďalšiu iteráciu jazykového štandardu.[2]:xiv Tak vzniklo úsilie nazvané Haskell Prime (Haskell′), zamýšľané ako pomerne konzervatívne rozšírenie Haskellu 98, ktoré preberá nové vlastnosti len tam, kde sú dobre pochopené a všeobecne prijaté.[2]:xiv[9] Po niekoľkých rokoch sa ukázalo, že jediná rozsiahla revízia jazyka je príliš veľká úloha; jazyk sa mal preto vyvíjať po malých krokoch, pričom každá revízia mala začleniť len niekoľko dobre pochopených rozšírení a zmien a nové revízie sa očakávali raz ročne.[2]:xiv
Prvou takou revíziou je Haskell 2010, ktorú v novembri 2009 ohlásil Simon Marlow v mene výboru Haskell 2010.[4] Revízia prevzala desať zmien, okrem iného rozhranie na volanie funkcií z iných jazykov (FFI, angl. foreign function interface), hierarchické názvy modulov (napríklad Data.Bool), stráže so vzormi (angl. pattern guards) a pragmu LANGUAGE, a zrušila vzory tvaru (n + k).[4][2]:xiv Prekladač GHC podporuje Haskell 2010 od verzie 7.0.1 z novembra 2010.[9]
Vo februári 2010 bol vymenovaný výbor pre ďalšiu revíziu Haskell 2011, ktorý bol neskôr rozpustený; v septembri 2015 bola vypísaná výzva na nominácie do nového výboru.[9] V apríli 2016 vznikol dvadsaťčlenný výbor, ktorého cieľom bola nová správa o jazyku Haskell 2020.[10] Verzia 9.2.1 prekladača GHC, vydaná 29. októbra 2021, zaviedla súbor rozšírení GHC2021.[11] Ten stavia na Haskelli 2010, pridáva niekoľko stabilných a konzervatívnych rozšírení, odstraňuje zastarané a je predvoleným súborom, ak nie je výslovne zvolený iný, napríklad Haskell2010.[12]
Príklady
[upraviť | upraviť zdroj]Definícia funkcie faktoriálu:
fac 0 = 1
fac n = n * fac (n - 1)
Iná definícia faktoriálu (používa funkciu product zo štandardnej knižnice Haskellu):[2]:121
fac n = product [1..n]
Naivná implementácia funkcie vracajúcej n-tý prvok Fibonacciho postupnosti:
fib 0 = 0
fib 1 = 1
fib n = fib (n - 2) + fib (n - 1)
Funkcia vracajúca čísla Fibonacciho postupnosti s lineárnou výpočtovou zložitosťou.
fibs@(_:rest) = 0 : 1 : (zipWith (+) fibs rest)
Predchádzajúca funkcia vytvorí nekonečný zoznam, čo je možné vďaka lenivému vyhodnocovaniu.[7]:72 Je možné ho implementovať ako
fib n = fibs !! n
(!! je operátor, ktorý vráti n-tý prvok zoznamu).[7]:32
Elegantný zápis triediaceho algoritmu quicksort:[7]:42
qsort [] = []
qsort (pivot:tail) =
qsort left ++ [pivot] ++ qsort right
where
left = [y | y <- tail, y < pivot]
right = [y | y <- tail, y >= pivot]
Implementácie
[upraviť | upraviť zdroj]Nasledujúce implementácie celkom (alebo takmer celkom) vyhovujú štandardu Haskell 98 a sú distribuované pod open source licenciou. V súčasnosti neexistujú komerčné implementácie.
- Hugs je interpreter bajtkódu. Ponúka rýchly preklad programov a znesiteľnú rýchlosť spúšťania. Je vhodný predovšetkým na výučbové účely.[13]
- Glasgow Haskell Compiler kompiluje do natívneho kódu niekoľkých rôznych počítačových architektúr a do jazyka C. GHC je pravdepodobne najpopulárnejšia implementácia a existuje preň pomerne veľké množstvo užitočných knižníc (napr. väzby na OpenGL).
- nhc98 je ďalším kompilátor bajtkódu, ale jeho programy bežia výrazne rýchlejšie ako s HUGS. Nhc98 sa zameriava na minimalizáciu použitia pamäte a preto je ideálny na použitie na starších počítačoch.[13]
- HBC je ďalší kompilátor natívneho kódu. Jeho vývoj pred dlhším časom ustal, ale je stále použiteľný.[13]
- Helium novším dialektom Haskellu. Zameriava sa na jednoduché naučenie. Typové triedy podporuje v obmedzenej forme a začiatočníci ich môžu vypnúť.[14]
GHC dnes podporuje celý jazyk Haskell 2010 a množstvo rozšírení, kompiluje programy priamo do natívneho kódu alebo pomocou LLVM a jeho interaktívne prostredie GHCi prekladá programy do bajtkódu; k novembru 2026 sú jeho poslednými vydaniami verzie 9.14.1 (19. decembra 2025) a 9.12.4 (27. marca 2026).[15] Haskell Wiki odporúča inštalovať GHC pomocou nástrojov GHCup alebo Haskell Tool Stack; predtým odporúčaná distribúcia Haskell Platform je zastaraná.[5]
Vývoj Hugs bol ukončený a jeho stránky sú ponechané ako historický zdroj.[6] Haskell Wiki ho spolu s nhc98, jeho odnožou York Haskell Compiler (Yhc) a HBC zaraďuje medzi neudržiavané implementácie.[5] Posledná verzia nhc98, 1.22, vyšla 9. júla 2010; prekladač funguje len na 32-bitových architektúrach alebo na 64-bitových počítačoch s 32-bitovým režimom kompatibility.[16] Medzi implementácie štandardu Haskell 2010 radí Haskell Wiki okrem GHC aj Utrecht Haskell Compiler (UHC) z Utrechtskej univerzity, ktorý podporuje takmer všetky vlastnosti Haskellu 98 a Haskellu 2010 a mnohé experimentálne rozšírenia, ďalej LLVM Haskell Compiler (LHC) a MicroHs od Lennarta Augustssona.[5]
Rozšírenia
[upraviť | upraviť zdroj]- O'Haskell je rozšírenie Haskellu, pridáva objektovo orientované vlastnosti a podporu pre konkurentné programovanie.
Konferencie a podujatia
[upraviť | upraviť zdroj]Haskell Symposium je každoročné sympózium usporadúvané v spojení s medzinárodnou konferenciou o funkcionálnom programovaní International Conference on Functional Programming (ICFP) pod záštitou skupiny SIGPLAN organizácie Association for Computing Machinery (ACM).[17] Venuje sa všetkým aspektom návrhu, sémantiky, teórie, aplikácií, implementácie a výučby Haskellu; pred rokom 2008 sa nazývalo Haskell Workshop.[17] Od roku 2019 jeho riadiaci výbor zastrešuje aj samostatné podujatie Haskell Implementors' Workshop, fórum pre ľudí, ktorí sa zaujímajú o návrh a vývoj implementácií, nástrojov a knižníc Haskellu.[17][18] Workshop sa v minulosti konal spolu s ICFP; jeho 17. ročník sa 6. júna 2025 konal vo švajčiarskom Rapperswile spolu s podujatím ZuriHac.[18]
Referencie
[upraviť | upraviť zdroj]- 1 2 Martin Drozda. Funkcionálne programovanie. 1. Úvod do funkcionálneho programovania, vlastnosti funkcionálneho programovania, Glasgow Haskell kompilátor [online]. Fakulta elektrotechniky a informatiky STU v Bratislave, [cit. 2026-11-04]. Dostupné online.
- 1 2 3 4 5 6 7 Simon Marlow (ed.). Haskell 2010 Language Report [online]. haskell.org, [cit. 2026-11-04]. Dostupné online. (po anglicky)
- ↑ Simon Peyton Jones. Preface. Haskell 98 Language and Libraries: The Revised Report [online]. haskell.org, 2002-12, [cit. 2026-11-04]. Dostupné online. (po anglicky)
- 1 2 3 MARLOW, Simon. Announcing Haskell 2010 [online]. haskell.org (diskusná konferencia Haskell), 2009-11-24, [cit. 2026-11-05]. Dostupné online. (po anglicky)
- 1 2 3 4 Implementations [online]. HaskellWiki, 2024-03-09, [cit. 2026-11-05]. Dostupné online. (po anglicky)
- 1 2 Hugs 98 [online]. haskell.org, [cit. 2026-11-05]. Dostupné online. (po anglicky)
- 1 2 3 4 Jan Hric. Funkcionální programování – Haskell [online]. KTIML MFF UK, [cit. 2026-11-04]. Dostupné online. (po česky)
- 1 2 Paul Hudak, John Hughes, Simon Peyton Jones, Philip Wadler. A History of Haskell: Being Lazy With Class [online]. Microsoft Research, 2007-04-16, [cit. 2026-11-04]. Dostupné online. (po anglicky)
- 1 2 3 Welcome to Haskell' [online]. The Haskell' Wiki, [cit. 2026-11-05]. Dostupné online. Archivované 2016-02-20 z originálu. (po anglicky)
- ↑ RIEDEL, Herbert Valerio. ANN: Haskell Prime 2020 committee has formed [online]. haskell.org (diskusná konferencia Haskell-prime), 2016-04-28, [cit. 2026-11-05]. Dostupné online. (po anglicky)
- ↑ GAMARI, Ben. GHC 9.2.1 is now available [online]. haskell.org, 2021-10-29, [cit. 2026-11-05]. Dostupné online. (po anglicky)
- ↑ Version 9.2.1. Glasgow Haskell Compiler 9.2.1 User's Guide [online]. haskell.org, [cit. 2026-11-05]. Dostupné online. (po anglicky)
- 1 2 3 Haskell Compilers and Interpreters [online]. haskell.org, 2004-06-29, [cit. 2026-11-04]. Dostupné online. Archivované 2005-12-30 z originálu. (po anglicky)
- ↑ Helium compiler documentation (COMPILERDOCS.md) [online]. Helium4Haskell (GitHub), [cit. 2026-11-05]. Dostupné online. (po anglicky)
- ↑ The Glasgow Haskell Compiler [online]. haskell.org, [cit. 2026-11-05]. Dostupné online. (po anglicky)
- ↑ The nhc98 compiler [online]. York Functional Programming Group, 2010-07-09, [cit. 2026-11-05]. Dostupné online. (po anglicky)
- 1 2 3 The Haskell Symposium [online]. haskell.org, [cit. 2026-11-05]. Dostupné online. (po anglicky)
- 1 2 2025 Haskell Implementors' Workshop [online]. The Haskell Foundation, [cit. 2026-11-05]. Dostupné online. (po anglicky)
Iné projekty
[upraviť | upraviť zdroj]
Commons ponúka multimediálne súbory na tému Haskell (programovací jazyk)
Externé odkazy
[upraviť | upraviť zdroj]- Domovská stránka Haskellu (po anglicky)
- Haskell Wiki Archivované 2005-05-07 na Wayback Machine (po anglicky)
- Jemný úvod do Haskell 98 (po anglicky) (pdf formát)
- Evolúcia programátora Haskellu (po anglicky) (jemne humorný prehľad rozličných štýlov programovania dostupných v Haskelle)
- Online Bibliografia výskumu Haskellu Archivované 2008-09-15 na Wayback Machine (po anglicky)
- Humor Haskellu Archivované 2005-03-24 na Wayback Machine (po anglicky)
Zdroj
[upraviť | upraviť zdroj]Tento článok je čiastočný alebo úplný preklad článku Haskell na anglickej Wikipédii.