Movatterモバイル変換


[0]ホーム

URL:


Shko te përmbajtja
Wikipediaenciklopedia e lirë
Kërko

Haskell

Nga Wikipedia, enciklopedia e lirë
Për përdorime të tjera të kësaj fjale, shikoHaskell (kthjellim).
Haskell
ParadigmaProgramim plotësisht funksional
E projektuar ngaLennart Augustsson, Dave Barton, Brian Boutel, Warren Burton, Joseph Fasel, Kevin Hammond, Ralf Hinze,Paul Hudak,John Hughes, Thomas Johnsson, Mark Jones,Simon Peyton Jones,John Launchbury,Erik Meijer, John Peterson, Alastair Reid, Colin Runciman,Philip Wadler
Doli më1990; 36 vite më parë (1990)[1]
Emetimi i funditHaskell 2010[2] / korrik 2010; 15 vite më parë (2010-07)
Lëshimi fundit jo i qëndrueshëmHaskell 2020 announced[3]
ImplementimiGHC,Hugs, NHC, JHC,Yhc, UHC
DialektiGofer
Ndikuar ngaClean,[4]FP,[4]Gofer,[4]Hope and Hope+,[4]Id,[4]ISWIM,[4]KRC,[4]Lisp,[4]
Miranda,[4]ML andStandard ML,[4]Orwell,SASL,[4]Scheme,[4]SISAL[4]
Ndikoi nëAgda,[5]Bluespec,[6]C++11/Concepts,[7]
C#/LINQ,[8][9][10][11] CAL,[nevojitet citimi]Cayenne,[8]Clean,[8]Clojure,[12]
CoffeeScript,[13]Curry,[8]Elm,
Epigram,[nevojitet citimi]Escher,[14]F#,[15]Hack,[16]Idris,[17]
Isabelle,[8]Java/Generics,[8]LiveScript,[18]
Mercury,[8]Ωmega,PureScript,[19]Python,[8][20]Raku,[21]
Rust,[22]Scala,[8][23]Swift,[24]
Visual Basic 9.0[8][9]
SOCross-platform
Filename extension(s).hs, .lhs
Websitehaskell.org

Haskell (/ˈhæskəl/) është njëgjuhë programimi me qëllime të përgjithshme,të shtypura statike,plotësisht funksionale me konkluzion të tipit dhe vlerësim dembel.[25] Projektuar për mësimdhënie,kërkime dhe aplikime industriale,Haskell ka qenë pionier i disa veçorive të gjuhëve të programimit si klasat e tipit,të cilat mundësojnëmbingarkimin e sigurtë të operatorit për tipa dhehyrjen/daljen monadike (IO). Është emëruar paslogjikuesit Haskell Curry.[1]Implementimi kryesor i Haskell është kompilatori Haskell i Glasgow (GHC).

Semantikat e Haskell-it bazohet historikisht në ato të gjuhës programuese Miranda, e cila shërbeu për të fokusuar përpjekjet e grupit fillestar të punës Haskell. Specifikimi i fundit formal i gjuhës u bë në korrik të vitit 2010, ndërsa zhvillimi i GHC vazhdon të zgjerojë Haskell-in përmes zgjerimeve gjuhësore.

Haskell përdoret në akademi dhe industri.[26][27][28] Që prej majit të vitit 2021, Haskell ishte gjuha e 28-të më e njohur e programimit ngakërkimet e Google për mësime,[29] dhe përbëhet nga më pak se 1% e përdoruesve aktivë në depon e kodit burimorGitHub.[30]

Historia

[Redakto |Redakto nëpërmjet kodit]

Pas publikimit të Miranda nga Softueri Kërkimor i Kufizuar në vitin 1985, interesi për gjuhët funksionale dembele u rrit. Deri në vitin 1987, ekzistonin më shumë se një duzinë gjuhë programimi jo strikte, thjesht funksionale. Miranda ishte më e përdorura, por ishte softuer pronësor . Në konferencën mbi Gjuhët e Programimit Funksional dhe Arkitektura Kompjuterike (FPCA '87) nëPortland, Oregon, pati një konsensus të fortë që të formohej një komitet për të përcaktuar një standard të hapur për gjuhë të tilla. Qëllimi i komitetit ishte të konsolidontegjuhët funksionale ekzistuese në një gjuhë të përbashkët, e cila do të shërbente si bazë për kërkime të ardhshme në dizajnin e gjuhës funksionale.[25]

Haskell 1.0 deri në 1.4

[Redakto |Redakto nëpërmjet kodit]

Haskell u zhvillua nga një komitet, duke u përpjekur të bashkojë zgjidhje të gatshme, aty ku ishte e mundur.

Klasat e tipeve, të cilat mundësojnëtipin e sigurtë të mbingarkimit e operatorit, u propozuan fillimisht nga Philip Wadler dhe Stephen Blott për të adresuar trajtimin ad-hoc të llojeve të barazisë dhe mbingarkimin aritmetik në gjuhët e asaj kohe.[31]

Në versionet e hershme të Haskell deri dhe duke përfshirë versionin 1.2, ndërveprimi i përdoruesit dhehyrja/dalja (IO) trajtoheshin nga mekanizma të bazuar në rrjedha dhe ato të bazuara në vazhdueshmëri, të cilët konsideroheshin gjerësisht të pakënaqshëm.[32] Në versionin 1.3, IO monadic u prezantua, së bashku me gjeneralizimin e klasave të tipeve në llojet më të larta (ndërtuesit e tipeve). Së bashku me "Notacionin e Operatorit Diferencial", e cila siguron sheqer sintaksor për klasën e tipit Monad, kjo i dha Haskell një sistem efektesh që ruante transparencën referente dhe ishte i përshtatshëm.

Ndryshime të tjera të dukshme në versionet e hershme ishin qasja ndaj funksionit 'sekuencë', i cili krijon një varësi të të dhënave midis vlerave, dhe përdoret në gjuhët dembele për të shmangur konsumimin e tepërt të memories; duke lëvizur nga një klasë tipi në një funksion standard për ta bërë rifaktorimin më praktik.

Versioni i parë i Haskell ("Haskell 1.0") u përcaktua në vitin 1990.[1] Përpjekjet e komitetit rezultuan në një sërë përkufizimesh gjuhësore (1.0, 1.1, 1.2, 1.3, 1.4).

Hierarkia e klasave të tipit në preludin e Haskell-it që nga GHC 7.10. Përfshirja e Foldable dhe Transable (me ndryshimet përkatëse në nënshkrimet e tipit të disa funksioneve) dhe e Applicative si ndërmjetëse midis Functor dhe Monad, janë devijime nga standardi Haskell 2010.

Në fund të vitit 1997, seria arriti kulmin nëHaskell 98, që synonte të specifikonte një version të qëndrueshëm, minimal, portativ të gjuhës dhe një bibliotekë standarde shoqëruese për mësimdhënie, dhe si bazë për zgjerime të ardhshme. Komiteti mirëpriti krijimin e shtesave dhe varianteve të Haskell 98 nëpërmjet shtimit dhe përfshirjes së veçorive eksperimentale.[25]

Në shkurt 1999, standardi i gjuhës Haskell 98 u botua fillimisht siRaporti Haskell 98 .[25] Në janar 2003, u botua një version i rishikuar si"Haskell 98 Gjuha dhe Bibliotekat: Raporti i Rishikuar".[25] Kjo gjuhë vazhdon të evoluojë me shpejtësi, me zbatimin e Kompilatorit Glasgow Haskell (GHC) që përfaqëson standardin aktualde fakto.[33]

Në fillim të vitit 2006, filloi procesi i përcaktimit të një pasardhësi të standardit Haskell 98, i quajtur zyrtarishtHaskell Prime.[34] Ky synohej të ishte një proces i vazhdueshëm në rritje për të rishikuar përkufizimin e gjuhës, duke prodhuar një rishikim të ri të gjuhës deri në një herë në vit. Rishikimi i parë, i quajturHaskell 2010, u shpall në nëntor 2009 dhe u botua në korrik 2010.

Haskell 2010 është një përditësim në rritje i gjuhës, kryesisht duke përfshirë disa veçori të mirëpërdorura dhe të padiskutueshme të aktivizuara më parë nëpërmjet flamujve specifikë të kompilatorit.

  • Emrat e moduleve hierarkike. Emrat e moduleve lejohen të përbëhen nga sekuenca të ndara me pika të identifikuesve me shkronja të mëdha, në vend që të përmbajnë vetëm një identifikues të tillë.. Kjo lejon që modulet të emërtohen në një mënyrë hierarkike (p.sh.Data.List në vend tëList), megjithëse teknikisht modulet janë ende në një hapësirë emrash monolitike. Kjo shtesë u specifikua në një shtesë të Haskell 98 dhe në praktikë u përdor në mënyrë universale.
  • Ndërfaqja e funksionit të huaj (FFI) lejon lidhjet me gjuhë të tjera programimi. Vetëm lidhjet meC janë të specifikuara në Raport, por dizajni lejon lidhje edhe me gjuhë të tjera. Për ta mbështetur këtë, deklaratat e tipeve të të dhënave lejuan ato të mos përmbajnë asnjë konstruktorë, duke mundësuar lloje të forta nonce për të dhëna të huaja që nuk mund të krijoheshin në Haskell. Kjo shtesë është specifikuar më parë në një Shtojcë të Raportit Haskell 98 dhe është përdorur gjerësisht.
  • Të ashtuquajturat modeletn +k (përkufizimet e formësfact (n+1) = (n+1) * fact n) nuk lejoheshin më. Ky sheqer sintaksor kishte semantikë mashtruese, në të cilën kodi dukej sikur përdorte operatorin(+), por në fakt desugarohej në kod që përdorte (-) dhe (>=).
  • Rregullat e konkluzionit të tipeve u lehtësuan për të lejuar më shumë programe të kontrollonin tipet.
  • Disa problemesintaksore (ndryshime në gramatikën formale) u rregulluan: u shtuan mbrojtëse modeli, duke lejuar përputhjen e modeleve brenda mbrojtësve;rezolucioni ifiksimit të operatorit u specifikua në një mënyrë më të thjeshtë që pasqyronte praktikën aktuale; u trajtua një rast i favorshëm në ndërveprimin e sintaksës leksikore të gjuhës së operatorëve dhe komenteve, dhe ndërveprimi i shënimeve të bëra dhe "nëse-atëherë-tjetër" u ndryshuan për të eliminuar gabimet e papritura sintaksore.
  • PragmaLANGUAGE u specifikua. Deri në vitin 2010, dhjetëra shtesa të gjuhës ishin në përdorim të gjerë dhe GHC (mes kompilatorëve të tjerë) siguroi pragmënLANGUAGE për të specifikuar shtesat individuale me një listë identifikuesish. Kompilatorët e Haskell 2010 kërkohet të mbështesin shtesënHaskell2010 dhe inkurajohen të mbështesin disa të tjera, të cilat korrespondojnë me shtesat e shtuara në Haskell 2010.

Standardet e së ardhmes

[Redakto |Redakto nëpërmjet kodit]

Specifikimi tjetër formal ishte planifikuar për vitin 2020. Më 29 tetor 2021, me versionin GHC 9.2.1, u lëshua shtesa GHC2021. Ndërsa ky nuk është një specifikim formal i gjuhës, ai kombinon disa shtesa të qëndrueshme, të përdorura gjerësisht të GHC për Haskell 2010.

Veçoritë

[Redakto |Redakto nëpërmjet kodit]
Artikulli kryesor:Haskell features

Haskell përmban vlerësimin dembel,shprehjet lambda, përputhjen e modelit, kuptimin e listës, klasat e tipit dhepolimorfizmin e tipit . Është një gjuhë programimi plotësisht funksionale, që do të thotë se funksionet në përgjithësi nuk kanë efekte anësore . Ekziston një konstrukt i veçantë për të përfaqësuar efektet anësore, ortogonale me llojin e funksioneve. Një funksion i pastër mund të kthejë një efekt anësor që ekzekutohet më pas, duke modeluar funksionet e papastra të gjuhëve të tjera.

Haskell ka një sistem të fortë,statik të tipit të bazuar në konkluzionet e tipit Hindley-Milner . Risia e saj kryesore në këtë fushë janë klasat e tipit, e konceptuar fillimisht si një mënyrë parimore për të shtuarmbingarkimin në gjuhë,[35] por që më pas gjeti shumë përdorime të tjera.[36]

Konstrukti që përfaqëson efektet anësore është një shembull i një monade : një kornizë e përgjithshme që mund të modelojë llogaritje të ndryshme si trajtimin e gabimeve, jodeterminizmin, analizën dhe memorien transaksionale të softuerit . Ato përcaktohen si tipe të zakonshme të dhënash, por Haskell ofron disa sheqer sintaksor për përdorimin e tyre.

Haskell ka një specifikim të hapur, të publikuar,[25] dhe ka zbatime të shumta . Zbatimi i tij kryesor, kompilatori Glasgow Haskell (GHC), është njëkohësisht njëpërkthyes dhepërpiluesi kodit vendas që funksionon në shumicën e platformave. GHC shquhet për sistemin e tij të pasur të tipit që përfshin inovacionet e fundit si llojet e përgjithësuara algjebrike të të dhënave dhe familjet e tipeve. Loja e standardeve të gjuhës kompjuterike gjithashtu thekson zbatimin e saj me performancë të lartë tëkonkurrencës dheparalelizmit .

Një komunitet aktiv dhe në rritje ekziston rreth gjuhës, dhe më shumë se 5400 biblioteka dhe mjete me burim të hapur të palëve të treta janë të disponueshme në depon e paketave në internetHackage.[37]

Shembuj kodesh

[Redakto |Redakto nëpërmjet kodit]

Një"Përshëndetje, botë!" program në Haskell (vetëm rreshti i fundit është rreptësisht i nevojshëm):

moduleMain(main)where-- nuk nevojitet ne interpretuues, është e parazgjedhur ne modul skedarmain::IO()-- Kompilatori mund ta inferojë këtë përkufizim tipimain=putStrLn"Pëshëndetje Botë!"

Funksionifaktorial në Haskell, i përcaktuar në disa mënyra të ndryshme (rreshti i parë është shënimi i tipit, i cili është opsional dhe është i njëjtë për çdo zbatim):

factorial::(Integrala)=>a->a-- Përdorimi i rekruzionit (Me shprehjen "ifthenelse")factorialn=ifn<2then1elsen*factorial(n-1)-- Përdorimi i rekruzionitn (me modele te përputhshme)factorial0=1factorialn=n*factorial(n-1)-- Përdorimi i rekruzionit (me mbrojtje)factorialn|n<2=1|otherwise=n*factorial(n-1)-- Përdorimi i listës dhe funksioni i "product"factorialn=product[1..n]-- Përdorimi i përmbledhjes (implementon "product")factorialn=foldl(*)1[1..n]-- Stili pa pikafactorial=foldr(*)1.enumFromTo1

Përdorimi i kombinatorit me pikë fikse të Haskell lejon që ky funksion të shkruhet pa ndonjë rekursion të qartë.

importData.Function(fix)factorial=fixfacwherefacfx|x<2=1|otherwise=x*f(x-1)

Duke qenë se llojiInteger ka saktësi arbitrare, ky kod do të llogarisë vlera të tilla sifactorial 100000 (një numër 456,574-shifror), pa humbje të saktësisë.

Një zbatim i një algoritmi të ngjashëm me renditjen e shpejtë të listave, ku elementi i parë merret si strumbullar:

-- Lloji shënim (opsional,njësoj për të gjitha implementimet)quickSort::Orda=>[a]->[a]-- Përdorimi i të kuptuarit e listësquickSort[]=[]-- Lista boshe është renditurquickSort(x:xs)=quickSort[a|a<-xs,a<x]-- Rendit pjesën e majtë të listës++[x]++-- Fusni bohtin mes dy anëve të rendituraquickSort[a|a<-xs,a>=x]-- Rendit pjesën e djathtë të listës-- Përdorimi i filteritquickSort[]=[]quickSort(x:xs)=quickSort(filter(<x)xs)++[x]++quickSort(filter(>=x)xs)

Zbatimet

[Redakto |Redakto nëpërmjet kodit]

Të gjitha implementimet e listuara shpërndahen nën licencat me burim të hapur .

Zbatimet që plotësisht ose përafërsisht përputhen me standardin Haskell 98 përfshijnë:

  • Kompilatori Glasgow Haskell (GHC) kompilon në kodin vendas në shumë arkitektura të ndryshme procesorësh dhe në ANSI C, përmes njërës prej dy gjuhëve të ndërmjetme : C--, ose në versionet më të fundit, në kodin bit LLVM (dikur Makina Virtuale e Nivelit të Ulët).[38] GHC është bërë dialekt standardde facto Haskell. Ka biblioteka (p.sh., lidhjet me OpenGL) që punojnë vetëm me GHC. GHC u shpërnda edhe me platformën Haskell .
  • Jhc, një kompilator Haskell i shkruar nga John Meacham, thekson shpejtësinë dhe efikasitetin e programeve të krijuara dhe eksploron transformimet e reja të programeve.
  • Ajhc është një version i pasur i Jhc.
  • Kompilatori i i Utrecht Haskell (UHC) është një zbatim i Haskell nga Universiteti i Utrecht . Ai mbështet pothuajse të gjitha veçoritë e Haskell 98 plus shumë shtesa eksperimentale. Zbatohet duke përdorur gramatikat e atributeve dhe përdoret kryesisht për kërkime mbi sistemet e tipit të gjeneruar dhe zgjerimet gjuhësore.

Zbatimet që nuk mbahen më në mënyrë aktive përfshijnë:

  • Sistemi Gofer i Përdoruesit të Haskell (Hugs) është një përkthyesi kodit binar . Dikur ishte një nga implementimet më të përdorura, së bashku me kompilatorin GHC,[1] por tani është zëvendësuar kryesisht nga GHCi. Ai gjithashtu vjen me një bibliotekë grafike.
  • HBC është një zbatim i hershëm që mbështet Haskell 1.4. Ai u zbatua nga Lennart Augustsson, dhe bazua në Lazy ML . Nuk është zhvilluar në mënyrë aktive për disa kohë.
  • nhc98 është një kompilator kodi binar që fokusohet në minimizimin e përdorimit të memories.
    • Hartuesi i York Haskell (Yhc) ishte një version i pasur i nhc98, me synimet për të qenë më i thjeshtë, më i lëvizshëm, më efikas, dhe për të integruar mbështetje për Hat, gjurmuesin Haskell. Ai gjithashtu kishte një prapavijëJavaScript, duke i lejuar përdoruesit të ekzekutonin programet Haskell nëshfletuesit e internetit .

Implementimet që nuk janë plotësisht në përputhje me Haskell 98, dhe që përdorin një variant të gjuhës Haskell, përfshijnë:

  • Eta dhe Frege janë dialekte të Haskell që synojnëmakinën virtuale Java (JVM).
  • Gofer është një dialekt arsimor i Haskell, me një veçori të quajturklasa konstruktori, e zhvilluar nga Mark Jones. Ai është zëvendësuar nga Sistemi Gofer i Përdoruesit Haskell (Përqafimet).
  • Helium, një dialekt më i ri i Haskell. Fokusi është në lehtësimin e mësimit nëpërmjet mesazheve më të qarta të gabimeve duke çaktivizuar klasat e tipit si parazgjedhje.

Aplikacione të dukshme

[Redakto |Redakto nëpërmjet kodit]
  • Agda është një asistente provash e shkruar në Haskell.[39]
  • Cabal është një mjet për ndërtimin dhe paketimin e bibliotekave dhe programeve Haskell.[40]
  • Darcs është një sistem kontrolli i rishikimit i shkruar në Haskell, me disa veçori inovative, të tilla si kontrolli më i saktë i arnimeve për t'u aplikuar.
  • Kompilatori Glasgow Haskell(GHC) është gjithashtu shpesh një shtrat testimi për veçoritë e avancuara të programimit funksional dhe optimizimet në gjuhë të tjera programimi.
  • Git-annex është një mjet për të menaxhuar skedarët e të dhënave (të mëdha) nën kontrollin e versionit Git . Ai gjithashtu siguron një sistem të shpërndarë sinkronizimi të skedarëve (asistent git-annex).
  • Linspire Linux zgjodhi Haskell për zhvillimin e mjeteve të sistemit.[41]
  • Pandoc është një mjet për të kthyer një format shënjimi në një tjetër.
  • Pugs është një kompiltor dhepërkthyes përgjuhën e programimit të quajtur atëherëPerl 6, por që nga ajo kohë u riemërua Raku .
  • TidalCycles është një gjuhë e veçantë e domenit për kodimin e drejtpërdrejtë të modeleve muzikore, e ngulitur në Haskell.[42]
  • Xmonad është një menaxher i dritareve për sistemin e dritareve X, i shkruar plotësisht në Haskell.
  • GarganText[43] është një mjet bashkëpunues për të hartuar tekste përmes analizës semantike në çdoshfletues uebi, i shkruar plotësisht në Haskell dhe PureScript, i cili përdoret për shembull në komunitetin e kërkimit për të hartuar raporte dhe udhërrëfyes më të avancuara.[44]
  • Bluespec SystemVerilog (BSV) është një zgjerim gjuhësor i Haskell, për dizajnimine elektronikës . Është një shembull i një gjuhe specifike të domenit të integruar në Haskell. Më tej, mjetet e Bluespec, Inc. janë implementuar në Haskell.
  • Cryptol, një gjuhë dhe zinxhir mjetesh për zhvillimin dhe verifikimin e algoritmevetë kriptografisë, është implementuar në Haskell.
  • Facebook zbaton programet e tij anti-spam[45] në Haskell, duke ruajtur bibliotekën themelore të aksesit të të dhënave sisoftuer me burim të hapur.[46]
  • Platforma e blockchain Cardano është implementuar në Haskell.[47]
  • GitHub zbatoiSemantic, një bibliotekë me burim të hapur për analizën, ndryshimin dhe interpretimin e kodit burimor të pabesueshëm, në Haskell.[48]
  • Gjuha e modelimit financiar të Standard Chartered Mu është Haskell sintaksor që funksionon në një kohë të rreptë ekzekutimi.[49]
  • seL4, mikrokerneli i parë i verifikuar zyrtarisht, përdori Haskell si një gjuhë prototipimi për zhvilluesin e OS.[50]:p.2Në të njëjtën kohë, kodi Haskell përcaktoi një specifikim të ekzekutueshëm me të cilin arsyetohej, për përkthim automatik nga mjeti i vërtetimit të teoremës.[50]:p.3Kështu, kodi Haskell shërbeu si një prototip i ndërmjetëm përpara përsosjes përfundimtaretë C.[50]:p.3
  • Softueri i optimizimit të zinxhirit të furnizimit të dyqaneve Target është shkruar në Haskell.[51]
  • Co-Star[52]
  • Pjesa e pasme e Merkurit është shkruar në Haskell.[53]

Kornizat e dukshme të rrjetit të shkruara për Haskell përfshijnë:[54]

  • IHP
  • Servant
  • Snap
  • Yesod

Kritika

[Redakto |Redakto nëpërmjet kodit]

Jan-Willem Maessen, në 2002, dhe Simon Peyton Jones, në 2003, diskutuan problemet që lidhen me vlerësimin dembel, duke pranuar gjithashtu motivet teorike për të.[55] Përveç konsideratave praktike si përmirësimi i performancës,[56] ata vërejnë se vlerësimi dembel e bën më të vështirë për programuesit që të arsyetojnë për performancën e kodit të tyre (veçanërisht për përdorimin e hapësirës).

Bastiaan Heeren, Daan Leijen dhe Arjan van IJzendoorn në vitin 2003 vunë re gjithashtu disa pengesa për mësuesit e Haskell: "Sintaksa delikate dhe sistemi i tipit të sofistikuar të Haskell janë një shpatë me dy tehe – vlerësohet shumë nga programuesit me përvojë, por gjithashtu një burim zhgënjimi midis fillestarëve, meqenëse përgjithësimi i Haskell shpesh çon në mesazhe gabimi të paqarta."[57] Për të adresuar mesazhet e gabimit, studiuesit nga Universiteti Utrecht zhvilluan një përkthyes të avancuar të quajturHelium, i cili përmirësoi lehtësinë e përdorimit të mesazheve të gabimit duke kufizuar përgjithësinë e disa veçorive të Haskell. Në veçanti, ai çaktivizon klasat e tipit si parazgjedhje.[58]

Ben Lippmeier projektoi Disciple[59] si një dialekt të rreptë nga parazgjedhja (dembel nga shënimi i qartë) i Haskell me një sistem tip-dhe-efekt, për të trajtuar vështirësitë e Haskell në arsyetimin rreth vlerësimit dembel dhe në përdorimin e strukturave tradicionale të të dhënave si p.sh. vargje të ndryshueshme . Ai argumenton (f. 20) se "përditësimi shkatërrues i jep programuesit dy mjete të rëndësishme dhe të fuqishme ... një set strukturash të dhënash të ngjashme me vargjet për menaxhimin e koleksioneve të objekteve dhe … aftësinë për të transmetuar një vlerë të re në të gjitha pjesët e një programi me ngarkesë minimale për programuesin."

Robert Harper, një nga autorët e Standard ML,ka dhënë arsyet e tij përse nuk e përdor Haskell për të mësuar programim hyrës. Ndër këto janë vështirësia e arsyetimit për përdorimin e burimeve me vlerësim jo-strikt,fakti që vlerësimi dembel e ndërlikon përcaktimin e tipit të të dhënave dhe arsyetimin induktiv,[60] dhe "inferioriteti" i sistemit (të vjetër) të klasave të Haskell-it në krahasim me sistemin e moduleve të ML.[61]

Mjeti i ndërtimit të Haskell, Cabal, është kritikuar historikisht për trajtimin e dobët të versioneve të shumta të së njëjtës bibliotekë, një problem i njohur si "ferri i kabalit". Serveri Stackage dhe mjeti i ndërtimit të Stack, u krijuan në përgjigje të këtyre kritikave.[62] Vetë Cabal tani ka një sistem ndërtimi shumë më të sofistikuar, të frymëzuar thellësisht nga Nix,[63] i cili u bë i paracaktuar me versionin 3.0.

Gjuhë të ngjashme

[Redakto |Redakto nëpërmjet kodit]

Clean është një i afërm pak më i vjetër i Haskell. Devijimi i tij më i madh nga Haskell është përdorimi i tipeve unike në vend të monadave përhyrje/dalje (I/O) dhe efekteve anësore.

Një seri gjuhësh të inspiruara nga Haskell, por janë zhvilluar me sisteme të ndryshme të tipeve, duke përfshirë::

  • Agda, një gjuhë funksionale me tipa të varur .
  • Cayenne, me tipe të varura.
  • Elm, Një gjuhë funksionale për krijimin e aplikacioneve të front-end për web, pa mbështetje për klasa ose instanca të tipave të përcaktuara nga përdoruesi ose klasa të tipave të nivelit të lartë.
  • Epigram, një gjuhë funksionale me lloje të varura të përshtatshme për të vërtetuar vetitë e programeve.
  • Idris, një gjuhë funksionale për qëllime të përgjithshme me lloje të varura, e zhvilluar nëUniversitetin e St Andrews .
  • PureScript kalon në JavaScript.
  • Ωmega, një gjuhë strikte që lejon futjen e llojeve të reja dhe programimin në nivel tipi.

Gjuhë të tjera të ngjashme përfshijnë:

  • Curry, një gjuhë programimi funksionale/logjike e bazuar në Haskell.

Variantet e dukshme Haskell përfshijnë:

  • Haskell Gjenerik, një version i Haskell me mbështetje të sistemit të tipeve për programim gjenerik .
  • Hume, një gjuhë strikte funksionale për sistemet e integruara të bazuara në procese si automata pa shtetësi mbi një lloj tuplesh kanalesh të kutisë postare me një element ku gjendja mbahet nga reagimet në kutitë postare dhe një përshkrim hartografik nga daljet në kanale si instalime elektrike të kutisë, me një gjuhë dhe sintaksë të shprehjes si Haskell.

Konferenca dhe seminare

[Redakto |Redakto nëpërmjet kodit]

Komuniteti Haskell takohet rregullisht për aktivitete kërkimore dhe zhvillimore. Ngjarjet kryesore janë:

  • Konferenca Ndërkombëtare për Programimin Funksional (ICFP)
  • Simpoziumi Haskell (dikur Workshopi Haskell)
  • Punëtoria e Implementuesve Haskell
  • Përdoruesit komercialë të programimit funksional (CUFP)
  • ZuriHac, lloj Hackathon që mbahet çdo vit nëCyrih

Duke filluar nga viti 2006, ka ndodhur një serihakatonesh të organizuara, seria Hac, që synon përmirësimin e mjeteve dhe bibliotekave të gjuhës së programimit.[64]

Referime

[Redakto |Redakto nëpërmjet kodit]
  1. 1234Hudak etj. 2007.
  2. Marlow, Simon (24 nëntor 2009)."Announcing Haskell 2010".Haskell (Listë abonentësh). Marrë më12 mars 2011.{{cite mailing list}}:Mungon ose është bosh parametri|language= (Ndihmë!)
  3. Riedel, Herbert (28 prill 2016)."ANN: Haskell Prime 2020 committee has formed".Haskell-prime (Listë abonentësh). Marrë më6 maj 2017.{{cite mailing list}}:Mungon ose është bosh parametri|language= (Ndihmë!)
  4. 12345678910111213Peyton Jones 2003, f. xiGabim citimi: Etiketë<ref> e pavlefshme;emra të pavlefshëm, p.sh. shumë
  5. Norell, Ulf (2008)."Dependently Typed Programming in Agda"(PDF) (në anglisht). Gothenburg: Chalmers University. Marrë më9 shkurt 2012.
  6. Hudak etj. 2007, ff. 12–38, 43.
  7. Stroustrup, Bjarne; Sutton, Andrew (2011)."Design of Concept Libraries for C++"(PDF).Software Language Engineering. Arkivuar ngaorigjinali(PDF) më 10 shkurt 2012.{{cite journal}}:Mungon ose është bosh parametri|language= (Ndihmë!)
  8. 12345678910Hudak etj. 2007, ff. 12-45–46.
  9. 12Meijer, Erik (2006). "Confessions of a Used Programming Language Salesman: Getting the Masses Hooked on Haskell".Oopsla 2007.CiteSeerX 10.1.1.72.868.{{cite journal}}:Mungon ose është bosh parametri|language= (Ndihmë!)
  10. Meijer, Erik (1 tetor 2009)."C9 Lectures: Dr. Erik Meijer – Functional Programming Fundamentals, Chapter 1 of 13".Channel 9. Microsoft. Arkivuar ngaorigjinali më 16 qershor 2012. Marrë më9 shkurt 2012.{{cite web}}:Mungon ose është bosh parametri|language= (Ndihmë!)
  11. Drobi, Sadek (4 mars 2009)."Erik Meijer on LINQ".InfoQ. QConSF 2008: C4Media Inc. Marrë më9 shkurt 2012.{{cite news}}:Mungon ose është bosh parametri|language= (Ndihmë!)Mirëmbajtja CS1: Vendodhja (lidhja)
  12. Hickey, Rich."Clojure Bookshelf".Listmania!. Arkivuar ngaorigjinali më 3 tetor 2017. Marrë më3 tetor 2017.{{cite web}}:Mungon ose është bosh parametri|language= (Ndihmë!)
  13. Heller, Martin (18 tetor 2011)."Turn up your nose at Dart and smell the CoffeeScript".InfoWorld. Marrë më2020-07-15.{{cite news}}:Mungon ose është bosh parametri|language= (Ndihmë!)
  14. "Declarative programming in Escher"(PDF). Marrë më7 tetor 2015.{{cite web}}:Mungon ose është bosh parametri|language= (Ndihmë!)
  15. Syme, Don; Granicz, Adam; Cisternino, Antonio (2007).Expert F#.Apress. fq. 2.F# also draws from Haskell particularly with regard to two advanced language features calledsequence expressions andworkflows.{{cite book}}:Mungon ose është bosh parametri|language= (Ndihmë!)
  16. "Facebook Introduces 'Hack,' the Programming Language of the Future".WIRED. 20 mars 2014.{{cite magazine}}:Mungon ose është bosh parametri|language= (Ndihmë!)
  17. "Idris, a dependently typed language". Marrë më26 tetor 2014.{{cite web}}:Mungon ose është bosh parametri|language= (Ndihmë!)
  18. "LiveScript Inspiration". Marrë më4 shkurt 2014.{{cite web}}:Mungon ose është bosh parametri|language= (Ndihmë!)
  19. Freeman, Phil (2016)."PureScript by Example". Leanpub. Marrë më23 prill 2017.{{cite web}}:Mungon ose është bosh parametri|language= (Ndihmë!)
  20. Kuchling, A. M."Functional Programming HOWTO".Python v2.7.2 documentation. Python Software Foundation. Marrë më9 shkurt 2012.{{cite web}}:Mungon ose është bosh parametri|language= (Ndihmë!)
  21. "Glossary of Terms and Jargon".Perl Foundation Perl 6 Wiki.The Perl Foundation. Arkivuar ngaorigjinali më 21 janar 2012. Marrë më9 shkurt 2012.{{cite web}}:Mungon ose është bosh parametri|language= (Ndihmë!)
  22. "Influences – The Rust Reference".The Rust Reference. Marrë më2023-12-31.{{cite web}}:Mungon ose është bosh parametri|language= (Ndihmë!)
  23. Fogus, Michael (6 gusht 2010)."MartinOdersky take(5) toList".Send More Paramedics. Marrë më9 shkurt 2012.{{cite web}}:Mungon ose është bosh parametri|language= (Ndihmë!)
  24. Lattner, Chris (3 qershor 2014)."Chris Lattner's Homepage". Chris Lattner. Marrë më3 qershor 2014.The Swift language is the product of tireless effort from a team of language experts, documentation gurus, compiler optimization ninjas, and an incredibly important internal dogfooding group who provided feedback to help refine and battle-test ideas. Of course, it also greatly benefited from the experiences hard-won by many other languages in the field, drawing ideas from Objective-C, Rust, Haskell, Ruby, Python, C#, CLU, and far too many others to list.{{cite web}}:Mungon ose është bosh parametri|language= (Ndihmë!)
  25. 123456Peyton Jones 2003.
  26. Mossberg, Erik (2020-06-08),erkmos/haskell-companies (në anglisht), marrë më2020-06-22
  27. O'Sullivan, Bryan; Goerzen, John; Stewart, Donald Bruce (15 nëntor 2008).Real World Haskell: Code You Can Believe In (në anglisht). "O'Reilly Media, Inc.". fq. xxviii–xxxi.ISBN 978-0-596-55430-9.
  28. "Haskell in Production: Riskbook".Serokell Software Development Company (në anglisht). Marrë më2021-09-07.
  29. "PYPL PopularitY of Programming Language index".pypl.github.io (në anglisht). maj 2021. Arkivuar ngaorigjinali më 7 maj 2021. Marrë më16 maj 2021.
  30. Frederickson, Ben."Ranking Programming Languages by GitHub Users".www.benfrederickson.com (në anglisht). Marrë më6 shtator 2019.
  31. Wadler, Philip (tetor 1988)."How to make ad-hoc polymorphism less ad hoc" (në anglisht).
  32. Peyton Jones, Simon (2003)."Wearing the hair shirt: a retrospective on Haskell".Microsoft (në anglisht).
  33. "Haskell Wiki: Implementations" (në anglisht). Marrë më18 dhjetor 2012.
  34. "Welcome to Haskell'".The Haskell' Wiki (në anglisht). Arkivuar ngaorigjinali më 20 shkurt 2016. Marrë më11 shkurt 2016.
  35. Wadler, P.; Blott, S. (1989). "How to make ad-hoc polymorphism less ad hoc".Proceedings of the 16th ACM SIGPLAN-SIGACT symposium on Principles of programming languages – POPL '89 (në anglisht).ACM. fq. 60–76.doi:10.1145/75277.75283.ISBN 978-0-89791-294-5.
  36. Hallgren, T. (janar 2001)."Fun with Functional Dependencies, or Types as Values in Static Computations in Haskell".Proceedings of the Joint CS/CE Winter Meeting (në anglisht). Varberg, Sweden.
  37. "HackageDB statistics" (në anglisht). Hackage.haskell.org. Arkivuar ngaorigjinali më 3 maj 2013. Marrë më26 qershor 2013.
  38. "The LLVM Backend".GHC Trac (në anglisht). 29 mars 2019. Arkivuar ngaorigjinali më 7 prill 2017. Marrë më17 dhjetor 2024.
  39. Agda 2 (në anglisht), Agda Github Community, 2021-10-15, marrë më2021-10-16
  40. "The Haskell Cabal" (në anglisht). Marrë më8 prill 2015.
  41. "Linspire/Freespire Core OS Team and Haskell".Debian Haskell mailing list (në anglisht). maj 2006. Arkivuar ngaorigjinali më 27 dhjetor 2017. Marrë më14 qershor 2006.
  42. "Live code with Tidal Cycles".Tidal Cycles (në anglisht). Arkivuar ngaorigjinali më 12 shtator 2024. Marrë më2022-01-19.
  43. "Gargantext – Main" (në anglisht). 13 korrik 2023.
  44. David, Chavalarias (8 maj 2023).Toward a Research Agenda on Digital Media and Humanity Well-Being (Tezë) (në anglisht).
  45. "Fighting spam with Haskell".Facebook Code (në anglishte amerikane). 26 qershor 2015. Marrë më11 gusht 2019.
  46. "Open-sourcing Haxl, a library for Haskell".Facebook Code (në anglishte amerikane). 10 qershor 2014. Marrë më11 gusht 2019.
  47. "input-output-hk/cardano-node: The core component that is used to participate in a Cardano decentralised blockchain" (në anglisht). GitHub. Marrë më2022-03-18.
  48. Parsing, analyzing, and comparing source code across many languages: github/semantic (në anglisht), GitHub, 7 qershor 2019, marrë më7 qershor 2019
  49. "Commercial Users of Functional Programming Workshop Report"(PDF) (në anglisht). Marrë më10 qershor 2022.
  50. 123Gabim citimi: Etiketë<ref> e pavlefshme;asnjë tekst nuk u dha për refs e quajturaklein-sosp09
  51. "Tikhon Jelvis: Haskell at Target".YouTube (në anglisht). 22 prill 2017.
  52. "Why Co–Star uses Haskell".Co–Star (në anglisht). Marrë më30 shtator 2023.
  53. "Haskell in Production: Mercury".Serokell (në anglisht). Marrë më2024-10-11.
  54. "Web/Frameworks – HaskellWiki".wiki.haskell.org (në anglisht). Marrë më17 shtator 2022.
  55. [lidhje e vdekur]Simon Peyton Jones.
  56. "Lazy evaluation can lead to excellent performance, such as in The Computer Language Benchmarks Game" (në anglisht). 27 qershor 2006.
  57. Heeren, Bastiaan; Leijen, Daan; van IJzendoorn, Arjan (2003)."Helium, for learning Haskell"(PDF).Proceedings of the 2003 ACM SIGPLAN workshop on Haskell (në anglisht). fq. 62–71.doi:10.1145/871895.871902.ISBN 1-58113-758-3.
  58. "Helium Compiler Docs" (në anglisht). GitHub. Marrë më9 qershor 2023.
  59. "DDC – HaskellWiki" (në anglisht). Haskell.org. 3 dhjetor 2010. Marrë më26 qershor 2013.
  60. Robert Harper (25 prill 2011)."The point of laziness" (në anglisht).
  61. Robert Harper (16 prill 2011)."Modules matter most" (në anglisht).
  62. "Solving Cabal Hell".www.yesodweb.com (në anglisht). Marrë më11 gusht 2019.
  63. "Announcing cabal new-build: Nix-style local builds" (në anglisht). Marrë më1 tetor 2019.
  64. "Hackathon – HaskellWiki" (në anglisht).

Bibliografia

[Redakto |Redakto nëpërmjet kodit]
Raportet
Tekstet
Tutoriale
Historia
Marrë nga "https://sq.wikipedia.org/w/index.php?title=Haskell&oldid=2821802"
Kategoritë:
Kategori të fshehura:

[8]ページ先頭

©2009-2026 Movatter.jp