NgoJuni walo nyaka, edolobheni elincane laseSwitzerland iRapperswil, umcimbi obizwa ngokuthi
Π Π½Π°Ρ
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.
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.
Isithombe esivela ku-Twitter
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.
Inkulumo kaSimon Peyton Jones. Isithombe esivela ku-Twitter
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
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
$ 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
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
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