Preskočiť na obsah

Haskell (programovací jazyk)

z Wikipédie, slobodnej encyklopédie
(Presmerované z Haskell)

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

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]

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]

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. 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.
  2. 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)
  3. ↑ 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)
  4. 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)
  5. 1 2 3 4 Implementations [online]. HaskellWiki, 2024-03-09, [cit. 2026-11-05]. Dostupné online. (po anglicky)
  6. 1 2 Hugs 98 [online]. haskell.org, [cit. 2026-11-05]. Dostupné online. (po anglicky)
  7. 1 2 3 4 Jan Hric. Funkcionální programování – Haskell [online]. KTIML MFF UK, [cit. 2026-11-04]. Dostupné online. (po česky)
  8. 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)
  9. 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)
  10. ↑ 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)
  11. ↑ GAMARI, Ben. GHC 9.2.1 is now available [online]. haskell.org, 2021-10-29, [cit. 2026-11-05]. Dostupné online. (po anglicky)
  12. ↑ Version 9.2.1. Glasgow Haskell Compiler 9.2.1 User's Guide [online]. haskell.org, [cit. 2026-11-05]. Dostupné online. (po anglicky)
  13. 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)
  14. ↑ Helium compiler documentation (COMPILERDOCS.md) [online]. Helium4Haskell (GitHub), [cit. 2026-11-05]. Dostupné online. (po anglicky)
  15. ↑ The Glasgow Haskell Compiler [online]. haskell.org, [cit. 2026-11-05]. Dostupné online. (po anglicky)
  16. ↑ The nhc98 compiler [online]. York Functional Programming Group, 2010-07-09, [cit. 2026-11-05]. Dostupné online. (po anglicky)
  17. 1 2 3 The Haskell Symposium [online]. haskell.org, [cit. 2026-11-05]. Dostupné online. (po anglicky)
  18. 1 2 2025 Haskell Implementors' Workshop [online]. The Haskell Foundation, [cit. 2026-11-05]. Dostupné online. (po anglicky)

Iné projekty

[upraviť | upraviť zdroj]

Externé odkazy

[upraviť | upraviť zdroj]

Tento článok je čiastočný alebo úplný preklad článku Haskell na anglickej Wikipédii.