ZuriHac: ukuziqhelanisa nenkqubo esebenzayo

NgoJuni walo nyaka, kwidolophu encinci yaseSwitzerland yaseRapperswil, isiganeko esibizwa ngokuba ZuriHac. Ngeli xesha idibanise ngaphezu kwamakhulu amahlanu abathandi beHaskell, ukusuka kwabaqalayo ukuya kubaseki bolwimi. Nangona abaququzeleli bebiza esi siganeko njenge-hackathon, akusiyo inkomfa okanye i-hackathon kwingqiqo yeklasi. Ifomathi yayo yahlukile kubadwelisi benkqubo bemveli. Sifunde ngeZuriHac ngethamsanqa, sathatha inxaxheba kuyo, kwaye ngoku sijonga njengomsebenzi wethu ukuxelela malunga nokufunyanwa okungaqhelekanga!

ZuriHac: ukuziqhelanisa nenkqubo esebenzayo

Ngathi

Eli nqaku lilungiswe ngabafundi ababini beminyaka ye-3 yenkqubo "yeMathematika eSebenzisiweyo kunye ne-Informatics" kwiYunivesithi yoPhando lweSizwe lweSikolo esiPhakamileyo sezoQoqosho - iSt. Petersburg: uVasily Alferov no-Elizaveta Vasilenko. Ukuthanda inkqubo esebenzayo kuthi sobabini kwaqala ngothotho lweentetho ezenziwa nguD. N. Moskvin kunyaka wesibini weyunivesithi. Ngoku uVasily uthatha inxaxheba kwiNkqubo yeKhowudi yeHlobo yeGoogle, apho asebenzisa iigrafu ze-algebraic eHaskell phantsi kwesikhokelo seqela leprojekthi. Alga. U-Elizaveta usebenzise izakhono ezifunyenweyo zeprogramu esebenzayo kwikhosi yomsebenzi onikezelwe ekuphunyezweni kwe-algorithm echasene nomanyano kunye nesicelo esilandelayo kwithiyori yohlobo.

Ubume besiganeko

Abaphulaphuli ekujoliswe kubo ngabanini beeprojekthi zomthombo ovulekileyo, abadwelisi benkqubo abafuna ukuthatha inxaxheba kuphuhliso lwabo, abaphandi benkqubo esebenzayo, kunye nabantu abanomdla nje ngeHaskell. Kulo nyaka, kwindawo, iHSR Hochschule fΓΌr Technik Rapperswil, abaphuhlisi abavela kwiiprojekthi ze-Haskell ezivulekileyo ezingaphezu kwamashumi amahlanu ezivela kwihlabathi lonke bahlanganisene ukuze bathethe ngeemveliso zabo kwaye bafumane abantu abatsha abanomdla kuphuhliso lwabo.

ZuriHac: ukuziqhelanisa nenkqubo esebenzayo

Ifoto evela kuTwitter ZuriHac

Iskimu silula kakhulu: kufuneka ubhale iziphakamiso ezimbalwa malunga neprojekthi yakho kwangaphambili kwaye uzithumele kubaququzeleli, abaya kuthumela ulwazi malunga neprojekthi yakho kwiphepha lesiganeko. Ukongeza, ngosuku lokuqala, ababhali beeprojekthi banemizuzwana engamashumi amathathu ukuba baxelele ngokufutshane ukusuka kwinqanaba ukuba benza ntoni kwaye yintoni ekufuneka yenziwe. Emva koko abantu abanomdla bafuna ababhali kwaye babuze ngokubanzi malunga nemisebenzi.

Asinazo iiprojekthi zethu ezivulekileyo okwangoku, kodwa sifuna ngokwenene ukufaka isandla kwezikhoyo, ngoko ke sabhalisa njengabathathi-nxaxheba rhoqo. Kwisithuba seentsuku ezintathu, sisebenze namaqela amabini abaphuhlisi. Kuyavela ukuba isifundo esidibeneyo sekhowudi kunye nonxibelelwano oluphilayo lwenza ukuba intsebenziswano phakathi kwababhali beeprojekthi kunye nabanegalelo ibe nemveliso kakhulu - eZuriHac sakwazi ukuqonda iindawo ezazintsha kuthi kwaye sakwazi ukunceda amaqela amabini ahluke ngokupheleleyo, ukugqiba umsebenzi omnye kwindawo nganye. yeeprojekthi.

Ukongeza kuqeqesho oluxabisekileyo, iintetho ezininzi kunye neeklasi zenkosi nazo zanikwa eZuriHac. Sikhumbula ngokukhethekileyo iintetho ezimbini. Ekuqaleni kwabo, u-Andrey Mokhov ovela kwiYunivesithi yaseNewcastle wathetha malunga neefuctors ezikhethiweyo ezisebenzayo - udidi lweentlobo ezimele zibe ziphakathi phakathi kwezinto ezisebenzayo kunye neemonads. Kwenye intetho, omnye wabasunguli beHaskell, uSimon Peyton Jones, wathetha malunga nendlela i-inference inference esebenza ngayo kwi-GHC compiler.

ZuriHac: ukuziqhelanisa nenkqubo esebenzayo

Intetho kaSimon Peyton Jones. Ifoto evela kuTwitter ZuriHac

Iiklasi ze-master ezibanjelwe ngexesha le-hackathon zahlulwa zibe ngamacandelo amathathu ngokuxhomekeke kwinqanaba loqeqesho lwabathathi-nxaxheba. Imisebenzi enikwe abathathi-nxaxheba abajoyine uphuhliso lweeprojekthi yaphawulwa kwakhona ngenqanaba lobunzima. Uluntu oluncinci kodwa olunobuhlobo lwabadwelisi benkqubo abasebenzayo bamkela ngovuyo abantu abatsha kwizikhundla zabo. Ukuqonda iintetho zika-Andrei Mokhov kunye noSimon Peyton Jones, nangona kunjalo, ikhosi yeprogram esebenzayo esiyithathayo eyunivesithi yayiluncedo kakhulu.

Ubhaliso lomsitho lusimahla kubo bobabini abathathi-nxaxheba abaqhelekileyo kunye nababhali beprojekthi. Sifake izicelo zokuthatha inxaxheba ekuqaleni kukaJuni, emva koko sathunyelwa ngokukhawuleza kuluhlu lokulinda kuluhlu lwabathathi-nxaxheba abaqinisekisiweyo.

Kwaye ngoku siza kuthetha ngeeprojekthi ekuphuhlisweni esithathe inxaxheba kuzo.

IPandoc

IPandoc ngumguquleli jikelele wamaxwebhu okubhaliweyo, enyanisweni, ukusuka kuyo nayiphi na ifomati kuyo nayiphi na. Umzekelo, ukusuka kwi-docx ukuya kwi-pdf, okanye ukusuka kwi-Markdown ukuya kwi-MediaWiki. Umbhali wayo, uJohn MacFarlane, unjingalwazi wefilosofi kwiYunivesithi yaseCalifornia, eBerkeley. Ngokubanzi, iPandoc idume kakhulu, kwaye abanye babahlobo bethu bothuka xa beva ukuba iPandoc yayibhalwe eHaskell.

ZuriHac: ukuziqhelanisa nenkqubo esebenzayo

Uluhlu lweefomati zoxwebhu ezixhaswa yiPandoc. Kukho igrafu epheleleyo kwisayithi, kodwa lo mfanekiso awungeni kwinqaku.

Kunjalo, iPandoc ayiboneleli ngoguqulo oluthe ngqo kwiperi nganye yeefomati. Ukuxhasa uguquko olubanzi olunjalo, isisombululo soyilo esisemgangathweni sisetyenziswa: okokuqala, lonke uxwebhu luguqulelwa kumelo olukhethekileyo lwangaphakathi oluphakathi, kwaye ke uxwebhu olukwifomathi eyahlukileyo luveliswa kulo melo lwangaphakathi. Abaphuhlisi babiza ukumelwa kwangaphakathi "AST", emele i-Abstract Syntax Tree, okanye umthi wesintaksi abstract. Ungajonga umelo oluphakathi ngokulula kakhulu: konke okufuneka ukwenze kukuseta ifomathi yemveliso ibe "yemveli"

$ cat example.html
<h1>Hello, World!</h1>

$ pandoc -f html -t native example.html
[Header 1 ("hello-world",[],[]) [Str "Hello,",Space,Str "World!"]]

Abafundi abaye basebenza kunye noHaskell ubuncinci banokucinga ngalo mzekelo omncinci ukuba iPandoc ibhalwe kwiHaskell: isiphumo salo myalelo luphawu lomtya wezakhiwo zangaphakathi zePandoc, ezenziwe ngokufana nendlela eqhele ukwenziwa ngayo. eHaskell umzekelo, kwithala leencwadi elisemgangathweni.

Ke, apha unokubona ukuba ukumelwa kwangaphakathi kubume obuphindaphindayo, kwindawo nganye yangaphakathi apho kukho uluhlu. Umzekelo, kwinqanaba eliphezulu kukho uluhlu lwento enye - iheader yenqanaba lokuqala kunye neempawu "hello-world",[],[]. Kufihlwe ngaphakathi kwesi sihloko luhlu lwamagama "Molo," lulandelwa sisithuba kunye nomtya othi "Ihlabathi!".

Njengoko ubona, ukumelwa kwangaphakathi akwahlukanga kakhulu kwi-HTML. Ingumthi apho i-node yangaphakathi nganye inikezela ngolwazi oluthile malunga nokufomathwa kwenzala yayo, kwaye amaqabunga aqulethe imixholo yokwenene yoxwebhu.

Ukuba siyehla ukuya kwinqanaba lokuphunyezwa, uhlobo lwedatha yalo lonke uxwebhu luchazwa ngolu hlobo:

data Pandoc = Pandoc Meta [Block]

Apha iBlock ngokuchanekileyo i-vertices yangaphakathi ekhankanywe ngasentla, kwaye i-Meta yi-metainformation malunga noxwebhu, njengesihloko, umhla wokudala, ababhali - oku kwahlukileyo kwiifomati ezahlukeneyo, kwaye i-Pandoc izama, ukuba kunokwenzeka, ukugcina ulwazi olunjalo xa uguqulela ukusuka kwifomati ukuya kwi ifomathi.

Phantse bonke abakhi bohlobo lweBloko - umzekelo, i-Header okanye iPara (umhlathi) - bathathe iimpawu kunye noluhlu lwee-vertices ezisezantsi njengeengxoxo - Inline, njengomthetho. Umzekelo, i-Space okanye i-Str ngabakhi bohlobo lwe-Inline, kunye nethegi ye-HTML iphinda ijike ibe yi-Inline ekhethekileyo. Asiboni nto ekunikezeni inkcazo epheleleyo yezi ntlobo, kodwa qaphela ukuba inokufumaneka apha apha.

Okubangela umdla kukuba, uhlobo lwePandoc luyi-monoid. Oku kuthetha ukuba kukho uhlobo oluthile loxwebhu olungenanto, kwaye amaxwebhu anokubekwa kunye. Oku kulungele ukusetyenziswa xa kubhalwa iziFundi - ungaqhekeza uxwebhu lube ngamacandelo usebenzisa ingqiqo engenamkhethe, cazulula nganye nganye ngokwahlukeneyo, kwaye emva koko ubeke yonke into kunye kuxwebhu olunye. Kule meko, i-metainformation iya kuqokelelwa kuzo zonke iindawo zoxwebhu kanye.

Xa uguqula, yithi, ukusuka kwiLaTeX ukuya kwi-HTML, okokuqala imodyuli ekhethekileyo ebizwa ngokuba yiLaTeXReader iguqula uxwebhu lwegalelo kwiAST, emva koko enye imodyuli ebizwa ngokuba yiHTMLWriter iguqula iAST kwiHTML. Ndiyabulela kule zakhiwo, akukho mfuneko yokubhala inani le-quadratic lokuguqulwa - kwanele ukubhala uMfundi kunye noMbhali kwifomathi entsha nganye, kwaye zonke izibini ezinokuthi ziguqulelwe ziya kuxhaswa ngokuzenzekelayo.

Kucacile ukuba i-architecture enjalo nayo inezithintelo zayo, ixesha elide lixelwe ziingcali kwinkalo ye-architecture software. Eyona nto ibalulekileyo yindleko yokwenza utshintsho kumthi we-syntax. Ukuba utshintsho lunzulu ngokwaneleyo, kuya kufuneka utshintshe ikhowudi kubo bonke abaFundi nabaBhali. Ngokomzekelo, enye yeengxaki ezijongene nabaphuhlisi bePandoc ixhasa iifomathi zetafile ezinzima. Ngoku iPandoc inokwenza kuphela iitafile ezilula kakhulu, ezinesihloko, iikholamu kunye nexabiso kwiseli nganye. Umzekelo, uphawu lwe-colspan kwi-HTML luyakungahoywa. Esinye sezizathu zolu kuziphatha kukungabikho kweskimu esidibeneyo sokumela iitheyibhile kuzo zonke okanye ubuncinane kwiifomathi ezininzi - ngokufanelekileyo, akucaci ukuba iitheyibhile kufuneka zigcinwe kumelo lwangaphakathi. Kodwa nasemva kokukhetha umbono othile, kuya kufuneka ukuba utshintshe ngokupheleleyo bonke abafundi kunye nababhali abaxhasa ukusebenza ngeetafile.

Ulwimi lweHaskell alukhethwanga kuphela ngenxa yothando olukhulu lwababhali lwenkqubo esebenzayo. I-Haskell yaziwa ngobuchule bayo bokuseta umbhalo. Omnye umzekelo lithala iparsec lilayibrari esebenzisa ngokukhutheleyo iikhonsepthi zeprogramu esebenzayo - i-monoids, i-monads, i-applicative kunye ne-fuctors engenye - ukubhala abahlaluli abangekho mthethweni. Amandla apheleleyo eParsec anokubonwa umzekelo ukusuka kwi-HaskellWiki, apho umhlalutyi opheleleyo wolwimi lwenkqubo olulula olufunekayo lucalulwe. Ewe kunjalo, iParsec ikwasetyenziswa ngokusebenzayo kwiPandoc.

Ukuchazwa ngokufutshane, iimonads zisetyenziselwa ukwahlulahlula ngokulandelelana, xa enye into iza kuqala, kwaye enye. Umzekelo, kulo mzekelo:

whileParser :: Parser Stmt
whileParser = whiteSpace >> statement

Okokuqala kufuneka ubale isithuba, kwaye emva koko ingxelo-enohlobo lweParser Stmt.

Ezinye iifuctors zisetyenziselwa ukubuyisela umva ukuba ukwahlulahlula kuyasilela. Umzekelo,

statement :: Parser Stmt
statement = parens statement <|> sequenceOfStmt

Kuthetha ukuba kufuneka uzame ukufunda ingxelo kwizibiyeli, okanye uzame ukufunda iinkcazo ezininzi ngokulandelelanayo.

Iifuctors ezisebenzayo zisetyenziswa ikakhulu njengeendlela ezimfutshane zeemonads. Umzekelo, vumela umsebenzi wetok ufunde umqondiso othile (lo ngumsebenzi wokwenyani ovela kwiLaTeXReader). Makhe sijonge le ndibaniselwano

const <$> tok <*> tok

Iya kufunda amathokheni amabini ngokulandelelana kwaye ibuyisele eyokuqala.

Kuzo zonke ezi klasi, i-Haskell inabasebenzisi abahle bomfuziselo, okwenza inkqubo ye-Reader ibonakale njengobugcisa be-ASCII. Yijonge nje le khowudi imangalisayo.

Imisebenzi yethu yayinxulumene neLaTeXReader. Umsebenzi kaVasily yayikukuxhasa i-mbox kunye nemiyalelo ye-hbox, eluncedo ekubhaleni iipakethe kwiLaTeX. U-Elizabeth wayenoxanduva lokuxhasa umyalelo we-epigraph, okuvumela ukuba wenze ii-epigraphs kumaxwebhu e-LaTeX.

Hatrace

Iindlela zokusebenza ezifana ne-UNIX zihlala ziphumeza umnxeba wenkqubo yeptrace. Iluncedo kwi-debugging kunye nokulinganisa ubume benkqubo, ikuvumela ukuba ulandele umnxeba wenkqubo eyenziwa yinkqubo. Umzekelo, into eluncedo kakhulu yomtya isebenzisa i-ptrace ngaphakathi.

IHatrace lithala leencwadi elibonelela ngojongano lwe-ptrace eHaskell. Inyani yeyokuba i-ptrace ngokwayo intsonkothe ​​kakhulu kwaye kunzima kakhulu ukuyisebenzisa ngokuthe ngqo, ngakumbi kwiilwimi ezisebenzayo.

UHatrace ubaleka njengomtya ekuqaleni kwaye wamkela iingxoxo ezifanayo. Iyahluka kumtya kuba ikwalithala leencwadi elibonelela ngojongano olulula kune ptrace nje.

Ngoncedo lwe-hatrace, sele sibambe i-bug enye engathandekiyo kwi-GHC Haskell compiler - ibulawa ngexesha elingalunganga, ivelisa iifayile zento engalunganga kwaye ayizibuyiseli xa iqaliswa kwakhona. Iscripting ngeefowuni zesistim yenze ukuba kube lula ukuvelisa kwakhona impazamo ngendlela enye, ngelixa ukubulala okungahleliwe kuphinde kwavelisa impazamo malunga neeyure ezimbini.

Songeze inkqubo yokufowunela ujongano kwithala leencwadi-uElizaveta wongeze ibrk, kwaye uVasily wongeze immap. Ngokusekelwe kwiziphumo zomsebenzi wethu, kunokwenzeka ukuba usebenzise ngokulula nangokuchaneka iingxoxo zale minxeba yenkqubo xa usebenzisa ithala leencwadi.

umthombo: www.habr.com

Yongeza izimvo