I-ZuriHac: ukuzijwayeza ukuhlela okusebenzayo

NgoJuni walo nyaka, edolobheni elincane laseSwitzerland iRapperswil, umcimbi obizwa ngokuthi ZuriHac. Kulokhu ihlanganise abathandi be-Haskell abangaphezu kwamakhulu amahlanu, kusukela kwabaqalayo kuya kubasunguli bolimi. Nakuba abahleli bebiza lo mcimbi ngokuthi i-hackathon, akuyona ingqungquthela noma i-hackathon ngomqondo wakudala. Ifomethi yayo ihlukile kubahleli bezinhlelo bendabuko. Sifunde ngeZuriHac ngenhlanhla, sabamba iqhaza kuyo, futhi manje sikubheka njengomsebenzi wethu ukutshela mayelana nokutholwa okungajwayelekile!

I-ZuriHac: ukuzijwayeza ukuhlela okusebenzayo

О нас

Lesi sihloko silungiselelwe abafundi ababili bonyaka we-3 wohlelo lwe-"Applied Mathematics and Informatics" e-National Research University Higher School of Economics - eSt. Petersburg: uVasily Alferov no-Elizaveta Vasilenko. Uthando lwezinhlelo ezisebenzayo kithi sobabili lwaqala ngochungechunge lwezinkulumo zika-D. N. Moskvin ngonyaka wesibili wenyuvesi. U-Vasily njengamanje ubamba iqhaza ohlelweni lwe-Google Summer of Code, lapho asebenzisa khona amagrafu e-algebraic e-Haskell ngaphansi kokuqondisa kwethimba lephrojekthi. Alga. U-Elizaveta usebenzise amakhono okuhlela asebenzayo azuziwe emsebenzini onikelwe ekusetshenzisweni kwe-algorithm ephikisana nokuhlanganisa nokusebenzisa okwalandela kuthiyori yohlobo.

Ifomethi yomcimbi

Izithameli okuqondiwe kuzo abanikazi bamaphrojekthi omthombo ovulekile, abahleli bezinhlelo abafuna ukubamba iqhaza ekuthuthukisweni kwabo, abacwaningi bohlelo olusebenzayo, kanye nabantu abathanda i-Haskell. Kulo nyaka, onjiniyela abavela kumaphrojekthi we-Haskell wemithombo evulekile engaphezu kwamashumi amahlanu abavela emhlabeni wonke bahlangene endaweni - i-HSR Hochschule fΓΌr Technik Rapperswil - ukuze bakhulume ngemikhiqizo yabo futhi benze abantu abasha babe nentshisekelo ekuthuthukisweni kwayo.

I-ZuriHac: ukuzijwayeza ukuhlela okusebenzayo

Isithombe esivela ku-Twitter ZuriHac

Uhlelo lulula kakhulu: udinga ukubhala iziphakamiso ezimbalwa mayelana nephrojekthi yakho kusengaphambili futhi uzithumele kubahleli, abazothumela ulwazi mayelana nephrojekthi yakho ekhasini lomcimbi. Ngaphezu kwalokho, ngosuku lokuqala, abalobi bamaphrojekthi banemizuzwana engamashumi amathathu ukuze batshele kafushane kusukela esiteji ukuthi benzani nokuthi yini okudingeka yenziwe. Bese abantu abanentshisekelo bafuna ababhali bese bebuza ngokuningiliziwe mayelana nemisebenzi.

Asinawo amaphrojekthi ethu avuliwe okwamanje, kodwa sifuna ngempela ukufaka isandla kwesevele ikhona, ngakho sibhalise njengabahlanganyeli abavamile. Ngokuhamba kwezinsuku ezintathu, sisebenze namaqembu amabili onjiniyela. Kuvele ukuthi ukutadisha ngokuhlanganyela ikhodi nokuxhumana okubukhoma kwenza ukusebenzisana phakathi kwababhali bephrojekthi nabanikelayo kukhiqize kakhulu - eZuriHac sakwazi ukuqonda izindawo ezazizintsha kithina futhi sakwazi ukusiza amaqembu amabili ahluke ngokuphelele, siqeda umsebenzi owodwa kwelinye ngalinye. yamaphrojekthi.

Ngaphezu kokuzijwayeza okubalulekile, izinkulumo ezimbalwa namakilasi amakhosi nawo anikezwa eZuriHac. Sikhumbula ngokukhethekile izinkulumo ezimbili. Ekuqaleni kwabo, u-Andrey Mokhov waseNyuvesi yaseNewcastle wakhuluma ngamafuctors asebenzayo akhethiwe - ikilasi lezinhlobo okufanele zibe maphakathi phakathi kwama-fuctors asebenzayo nama-monads. Kwenye inkulumo, omunye wabasunguli be-Haskell, uSimon Peyton Jones, ukhulume ngokuthi uhlobo lwe-inference lusebenza kanjani kumdidiyeli we-GHC.

I-ZuriHac: ukuzijwayeza ukuhlela okusebenzayo

Inkulumo kaSimon Peyton Jones. Isithombe esivela ku-Twitter ZuriHac

Amakilasi ochwepheshe aqhutshwa ngesikhathi se-hackathon ahlukaniswe izigaba ezintathu kuye ngezinga lokuqeqeshwa kwabahlanganyeli. Imisebenzi enikezwe ababambiqhaza abajoyine ukuthuthukiswa kwamaphrojekthi nayo imakwe ngezinga lobunzima. Umphakathi omncane kodwa onobungane wabahleli bezinhlelo abasebenzayo ubamukela ngenjabulo abasanda kungena ezinhlwini zabo. Ukuze siqonde izinkulumo zika-Andrei Mokhov noSimon Peyton Jones, noma kunjalo, izifundo zokuhlela ezisebenzayo esizithathe eyunivesithi zaziwusizo kakhulu.

Ukubhalisela umcimbi kumahhala kubo bobabili ababambiqhaza abavamile nababhali bephrojekthi. Sithumele izicelo zokubamba iqhaza ekuqaleni kukaJuni, okwathi ngemva kwalokho sasuswa ngokushesha ohlwini lwabalindile sayiswa ohlwini lwabahlanganyeli abaqinisekisiwe.

Futhi manje sizokhuluma ngamaphrojekthi ekuthuthukisweni esibambe iqhaza kuwo.

Pandoc

Pandoc iyisiguquli sendawo yonke semibhalo yombhalo, empeleni, ukusuka kunoma iyiphi ifomethi kuya kunoma iyiphi. Isibonelo, ukusuka ku-docx kuye ku-pdf, noma ukusuka ku-Markdown kuya ku-MediaWiki. Umbhali wayo, uJohn MacFarlane, unguprofesa wefilosofi eNyuvesi yaseCalifornia, eBerkeley. Ngokuvamile, i-Pandoc idume kakhulu, futhi abanye babangane bethu bamangala lapho bezwa ukuthi i-Pandoc yayibhalwe ngesi-Haskell.

I-ZuriHac: ukuzijwayeza ukuhlela okusebenzayo

Uhlu lwamafomethi amadokhumenti asekelwa i-Pandoc. Kukhona negrafu yonke esizeni, kodwa lesi sithombe asingeni esihlokweni.

Impela, i-Pandoc ayinikezi ukuguqulwa okuqondile kwawo wonke amafomethi. Ukuze kusekelwe uguquko olubanzi kangaka, kusetshenziswa isixazululo sezakhiwo esijwayelekile: okokuqala, wonke umbhalo uhunyushelwa ekumeleleni okukhethekile kwangaphakathi kwangaphakathi, bese kukhiqizwa idokhumenti ngefomethi ehlukile kulokhu kumelwa kwangaphakathi. Abathuthukisi babiza ukumelwa kwangaphakathi ngokuthi β€œAST”, okusho i-Abstract Syntax Tree, noma isihlahla se-syntax esingabonakali. Ungabheka ukumelwa okuphakathi kalula kakhulu: okudingeka ukwenze nje ukusetha ifomethi yokuphumayo ibe β€œyendabuko”

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

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

Abafundi abasebenze noHaskell okungenani kancane sebevele bacabange kulesi sibonelo esincane sokuthi i-Pandoc ibhalwe ku-Haskell: okukhiphayo kwalo myalo ukumelela kwezintambo zezakhiwo zangaphakathi ze-Pandoc, ezidalwe ngokufana nokuthi ngokuvamile kwenziwa kanjani. ku-Haskell, isibonelo, kumtapo wolwazi ojwayelekile.

Ngakho-ke, lapha ungabona ukuthi ukumelwa kwangaphakathi kuyisakhiwo esiphindaphindayo, endaweni ngayinye yangaphakathi okunohlu lwayo. Isibonelo, ezingeni eliphezulu kunohlu lwento eyodwa - unhlokweni weleveli yokuqala onezibaluli ezithi β€œhello-world”,[],[]. Kufihlwe ngaphakathi kwalo unhlokweni uhlu lweyunithi yezinhlamvu ethi β€œSawubona,” olulandelwa yisikhala nochungechunge oluthi β€œUmhlaba!”.

Njengoba ubona, ukumelwa kwangaphakathi akufani kakhulu ne-HTML. Kuyisihlahla lapho inodi ngayinye yangaphakathi inikeza ulwazi oluthile mayelana nokufometha kwenzalo yayo, futhi amaqabunga aqukethe okuqukethwe kwangempela kwedokhumenti.

Uma sehlela ezingeni lokuqalisa, uhlobo lwedatha yawo wonke idokhumenti luchazwa kanje:

data Pandoc = Pandoc Meta [Block]

Lapha i-Block ifana ngqo nama-vertices angaphakathi okukhulunywe ngawo ngenhla, futhi i-Meta iwukwaziswa okwengeziwe mayelana nedokhumenti, njengesihloko, usuku lokudala, ababhali - lokhu kwehlukile kumafomethi ahlukene, futhi i-Pandoc izama, uma kungenzeka, ukulondoloza ulwazi olunjalo lapho ihumusha isuka kufomethi iye kuye. ifomethi.

Cishe bonke abakhi bohlobo Lwebhulokhi - isibonelo, Isihloko noma Isigaba (ipharagrafu) - bathatha izibaluli kanye nohlu lwamagama aphakeme asezingeni eliphansi njengezimpikiswano - Emgqeni, njengomthetho. Isibonelo, i-Space noma i-Str ingabakhi bohlobo lwe-Inline, futhi ithegi ye-HTML iphinde iguquke ibe yi-Inline yayo ekhethekile. Asiboni phuzu ekunikezeni incazelo ephelele yalezi zinhlobo, kodwa qaphela ukuthi ingatholakala lapha lapha.

Kuyathakazelisa ukuthi uhlobo lwe-Pandoc luyi-monoid. Lokhu kusho ukuthi kunohlobo oluthile lwedokhumenti engenalutho, nokuthi amadokhumenti anganqwabelana ndawonye. Lokhu kulula ukukusebenzisa lapho ubhala Izincwadi Zokufunda - ungahlephula idokhumenti ibe izingxenye usebenzisa ingqondo enengqondo, uhlaziye ngayinye ngokwehlukana, bese uhlanganisa yonke into ibe idokhumenti eyodwa. Kulokhu, ukwaziswa okwengeziwe kuzoqoqwa kuzo zonke izingxenye zedokhumenti ngesikhathi esisodwa.

Lapho uguqula, ake sithi, usuka ku-LaTeX uye ku-HTML, okokuqala imojuli ekhethekile ebizwa ngokuthi i-LaTeXReader iguqula idokhumenti yokufaka ibe yi-AST, bese enye imojula ebizwa ngokuthi i-HTMLWriter iguqule i-AST ibe yi-HTML. Ngenxa yalesi sakhiwo, asikho isidingo sokubhala inombolo ye-quadratic yokuguqulwa - kwanele ukubhala i-Reader and Writer yefomethi entsha ngayinye, futhi wonke amapheya angaba khona okuguqulwa azosekelwa ngokuzenzakalelayo.

Kuyacaca ukuthi ukwakheka okunjalo nakho kunezithiyo, okubikezelwe isikhathi eside ochwepheshe emkhakheni wezokwakha isoftware. Okubaluleke kakhulu izindleko zokwenza izinguquko esihlahleni se-syntax. Uma ushintsho lubucayi ngokwanele, kuzodingeka ushintshe ikhodi kubo bonke Abafundi Nababhali. Isibonelo, enye yezinselelo ezibhekene nabathuthukisi be-Pandoc isekela amafomethi wetafula ayinkimbinkimbi. Manje i-Pandoc ingakha amathebula alula kakhulu kuphela, anesihloko, amakholomu kanye nenani kuseli ngayinye. Isibonelo, isibaluli se-colspan ku-HTML sizomane singanakwa. Esinye sezizathu zalokhu kuziphatha ukuntuleka kwesikimu esihlanganisiwe sokumelela amathebula kuwo wonke noma okungenani amafomethi amaningi - ngakho-ke, akucaci ukuthi amathebula kufanele agcinwe kanjani ekumeleleni kwangaphakathi. Kodwa ngisho nangemva kokukhetha umbono othile, uzodinga ukushintsha ngokuphelele bonke Abafundi Nababhali abasekela ukusebenza ngamathebula.

Ulimi lwesiHaskell alukhethwanga kuphela ngenxa yothando olukhulu lwababhali lokuhlela okusebenzayo. I-Haskell yaziwa ngamakhono ayo amakhulu okucubungula umbhalo. Isibonelo esisodwa umtapo wolwazi i-parsec iwumtapo wezincwadi osebenzisa imiqondo yezinhlelo ezisebenzayo - ama-monoid, ama-monads, ama-functive asebenzayo kanye namanye - ukubhala abahlaluli abanganaki. Amandla aphelele eParsec angabonakala ku isibonelo kusuka ku-HaskellWiki, lapho umhlaseli ophelele wolimi olulula lokuhlela lucutshungulwa. Vele, iParsec nayo isetshenziswa ngenkuthalo kuPandoc.

Kuchazwe kafushane, ama-monads asetshenziselwa ukuhlukanisa ngokulandelana, lapho into eyodwa iza kuqala, bese kuba enye. Ngokwesibonelo, kulesi sibonelo:

whileParser :: Parser Stmt
whileParser = whiteSpace >> statement

Okokuqala udinga ukubala isikhala, bese kuba isitatimende - esinohlobo lwe-Parser Stmt.

Amanye ama-functors asetshenziselwa ukuhlehlisa uma ukuncozulula kwehluleka. Ngokwesibonelo,

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

Lokhu kusho ukuthi kuzomele uzame ukufunda isitatimende kubakaki, noma uzame ukufunda izitatimende ezimbalwa ngokulandelana kwazo.

Ama-functor asebenzayo asetshenziswa ngokuyinhloko njengezinqamuleli zama-monads. Isibonelo, vumela umsebenzi we-tok ufunde ithokheni ethile (lona umsebenzi wangempela ovela ku-LaTeXReader). Ake sibheke le nhlanganisela

const <$> tok <*> tok

Izofunda amathokheni amabili ngokulandelana bese ibuyisela elokuqala.

Kuwo wonke la makilasi, i-Haskell inabasebenzisi abahle abangokomfanekiso, okwenza uhlelo lwe-Reader lubukeke njengobuciko be-ASCII. Vele ujabulele le khodi emangalisayo.

Imisebenzi yethu yayihlobene ne-LaTeXReader. Umsebenzi kaVasily kwakuwukusekela imiyalo ye-mbox ne-hbox, ewusizo ekubhaleni amaphakheji ku-LaTeX. U-Elizabeth wayenomthwalo wemfanelo wokusekela umyalo we-epigraph, okuvumela ukuthi udale ama-epigraphs kumadokhumenti e-LaTeX.

Hatrace

Amasistimu wokusebenza afana ne-UNIX avame ukusebenzisa ikholi yesistimu ye-ptrace. Kuwusizo ekulungiseni iphutha nasekufaniseni izindawo zohlelo, okukuvumela ukuthi ulandelele amakholi wesistimu owenziwa uhlelo. Isibonelo, insiza ye-strace ewusizo kakhulu isebenzisa i-ptrace ngaphakathi.

I-Hatrace iwumtapo wolwazi ohlinzeka ngesixhumi esibonakalayo ukuze ulandelele ku-Haskell. Iqiniso liwukuthi i-ptrace ngokwayo iyinkimbinkimbi kakhulu futhi kunzima kakhulu ukuyisebenzisa ngokuqondile, ikakhulukazi ezilimini ezisebenzayo.

I-Hatrace igijima njenge-strace ekuqaleni futhi yamukela izimpikiswano ezifanayo. Ihlukile ku-strace ngoba iphinde ibe umtapo wolwazi ohlinzeka ngesixhumi esibonakalayo esilula kune-ptrace nje.

Ngosizo lwe-hatrace, sesivele sibambe iphutha elilodwa elingajabulisi ku-GHC Haskell compiler - ebulawa ngesikhathi esingalungile, ikhiqiza amafayela ezinto ezingalungile futhi ayiwabuyiseli lapho iqalwa kabusha. Ukubhala ngezingcingo zesistimu kwenze kwaba nokwenzeka ukukhiqiza kabusha iphutha ngendlela enokwethenjelwa ngesikhathi esisodwa, kuyilapho ukubulala okungahleliwe kukhiqize kabusha iphutha cishe emahoreni amabili.

Sengeze izingcingo zesistimu kumtapo wolwazi - u-Elizaveta wengeze i-brk, futhi u-Vasily wengeza i-mmap. Ngokusekelwe emiphumeleni yomsebenzi wethu, kungenzeka ukusebenzisa kalula nangokunembile izimpikiswano zalezi zingcingo zesistimu lapho usebenzisa umtapo wolwazi.

Source: www.habr.com

Engeza amazwana