ZuriHac: ho itloaetsa ho etsa mananeo a sebetsang

Ka Phuptjane selemong sena, toropong e nyane ea Switzerland ea Rapperswil, ketsahalo e bitsoang ZuriHac. Lekhetlong lena e ile ea kopanya barati ba Haskell ba fetang makholo a mahlano, ho tloha ho ba qalang ho ea ho bathehi ba puo. Le hoja bahlophisi ba bitsa ketsahalo ena hackathon, ha se seboka kapa hackathon ka kutloisiso ea khale. Sebopeho sa eona se fapane le baetsi ba mananeo ba setso. Re ithutile ka ZuriHac ka lehlohonolo, ra kenya letsoho ho eona, 'me joale re nka e le boikarabelo ba rona ho bolela ka ntho e sa tloaelehang e fumanoeng!

ZuriHac: ho itloaetsa ho etsa mananeo a sebetsang

Mabapi le rona

Sehlooho sena se lokiselitsoe ke liithuti tse peli tsa selemo sa 3 tsa lenaneo la "Applied Mathematics le Informatics" ho National Research University Higher School of Economics - St. Petersburg: Vasily Alferov le Elizaveta Vasilenko. Takatso ea ho etsa mananeo a sebetsang bakeng sa rona ka bobeli e qalile ka letoto la lipuo tsa D. N. Moskvin selemong sa 2 sa univesithi. Hona joale Vasily o kenya letsoho lenaneong la Google Summer of Code, moo a sebelisang li-graph tsa algebraic Haskell tlas'a tataiso ea sehlopha sa morero. Meputso. Elizaveta o ile a sebelisa tsebo ea ho sebetsa ea lenaneo nakong ea mosebetsi o nehetsoeng ts'ebetsong ea algorithm e khahlanong le bonngoe ka ts'ebeliso ea morao-rao ea khopolo ea mofuta.

Sebopeho sa ketsahalo

Bamameli ba shebiloeng ke beng ba merero e bulehileng ea mohloli, baetsi ba mananeo ba batlang ho kenya letsoho ntlafatsong ea bona, bafuputsi ba mananeo a sebetsang, le batho ba chesehelang Haskell feela. Selemong sena, bahlahisi ba tsoang mererong e fetang mashome a mahlano e bulehileng ea Haskell ba tsoang lefats'eng lohle ba ile ba bokana sebakeng seo - HSR Hochschule für Technik Rapperswil - ho bua ka lihlahisoa tsa bona le ho etsa hore batho ba bacha ba thahaselle tsoelo-pele ea bona.

ZuriHac: ho itloaetsa ho etsa mananeo a sebetsang

Senepe ho tsoa Twitter ZuriHac

Morero o bonolo haholo: o hloka ho ngola litlhahiso tse 'maloa mabapi le morero oa hau esale pele mme o li romelle ho bahlophisi, ba tla beha tlhahisoleseling mabapi le morero oa hau leqepheng la ketsahalo. Ho phaella moo, letsatsing la pele, bangoli ba merero ba na le metsotsoana e mashome a mararo ho bolela ka bokhutšoanyane haholo ho tloha sethaleng seo ba se etsang le se lokelang ho etsoa. Ebe batho ba thahasellang ba batla bangoli mme ba botse ka ho qaqileng ka mesebetsi.

Ha re na merero ea rona e bulehileng, empa re hlile re batla ho kenya letsoho ho tse seng li ntse li le teng, kahoo re ile ra ngolisa re le barupeluoa ba kamehla. Nakong ea matsatsi a mararo, re ile ra sebetsa le lihlopha tse peli tsa bahlahisi. Ho ile ha fumaneha hore thuto e kopanetsoeng ea khoutu le puisano e phelang e etsa hore tšebelisano pakeng tsa bangoli ba morero le bafani ba be le litholoana haholo - ho ZuriHac re khonne ho utloisisa libaka tse ncha ho rona mme re khonne ho thusa lihlopha tse peli tse fapaneng ka ho felletseng, ho phethela mosebetsi o le mong ho se seng le se seng. ea merero.

Ntle le boikoetliso ba bohlokoa, ho ile ha fanoa ka lipuo tse 'maloa le litlelase tsa masters ho ZuriHac. Re hopola ka ho khetheha lipuo tse peli. Qalong ea bona, Andrey Mokhov oa Univesithi ea Newcastle o buile ka li-fuctors tse khethiloeng - sehlopha sa mefuta e lokelang ho ba lipakeng pakeng tsa li-fuctors tse sebetsang le li-monads. Puong e 'ngoe, e mong oa bathehi ba Haskell, Simon Peyton Jones, o ile a bua ka hore na tlhahiso ea mofuta o sebetsa joang ho motlatsi oa GHC.

ZuriHac: ho itloaetsa ho etsa mananeo a sebetsang

Thuto ea Simon Peyton Jones. Senepe ho tsoa Twitter ZuriHac

Litlelase tsa masters tse neng li tšoaroa nakong ea hackathon li ne li arotsoe ka mekhahlelo e meraro ho latela boemo ba koetliso ea barupeluoa. Mesebetsi e fuoang barupeluoa ba kentseng letsoho ntlafatsong ea merero e boetse e tšoailoe ka boemo ba bothata. Sechaba se senyenyane empa se nang le botsoalle sa baetsi ba mananeo a sebetsang ka thabo ba amohela ba sa tsoa fihla maemong a bona. Ho utloisisa lipuo tsa Andrei Mokhov le Simon Peyton Jones, leha ho le joalo, thupelo ea mananeo a sebetsang eo re e nkileng univesithing e ne e le molemo haholo.

Ngoliso bakeng sa ketsahalo ke mahala bakeng sa bankakarolo ba kamehla le bangoli ba merero. Re ile ra kenya likopo tsa ho kenya letsoho mathoasong a June, ka mor'a moo re ile ra tlosoa ka potlako lethathamong la ba letetseng ho ea lethathamong la barupeluoa ba tiisitsoeng.

'Me joale re tla bua ka merero ea ntlafatso eo re ileng ra kenya letsoho ho eona.

pandoc

pandoc ke converter ea bokahohle ea litokomane tsa mongolo, ha e le hantle, ho tloha ho mofuta ofe kapa ofe ho ea ho ofe kapa ofe. Mohlala, ho tloha ho docx ho isa ho pdf, kapa ho tloha Markdown ho ea MediaWiki. Mongoli oa eona, John MacFarlane, ke moprofesa oa filosofi Univesithing ea California, Berkeley. Ka kakaretso, Pandoc e tumme haholo, 'me metsoalle e meng ea rona e ile ea makala ha e utloa hore Pandoc e ngotsoe Haskell.

ZuriHac: ho itloaetsa ho etsa mananeo a sebetsang

Lethathamo la lifomate tsa litokomane tse tšehetsoeng ke Pandoc. Ho boetse ho na le graph eohle setšeng, empa setšoantšo sena ha se kenelle sengoloa.

Ehlile, Pandoc ha e fane ka phetoho e tobileng bakeng sa para e 'ngoe le e 'ngoe ea lifomate. Ho tšehetsa mefuta e mengata ea liphetoho tse joalo, ho sebelisoa tharollo e tloaelehileng ea meralo: pele, tokomane eohle e fetoleloa ka boemeli bo khethehileng ba ka hare, ebe tokomane ka mokhoa o fapaneng o hlahisoa ho tsoa ho boemeli bona ba ka hare. Bahlahisi ba bitsa boemeli ba ka hare "AST", e emelang Abstract Syntax Tree, kapa sefate se sa bonahaleng sa syntax. U ka sheba boemeli ba mahareng habonolo feela: sohle seo u hlokang ho se etsa ke ho beha sebopeho sa tlhahiso ho "native"

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

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

Babali ba sebelitseng le Haskell bonyane hanyenyane ba ka se ba ntse ba nahana ho tloha mohlaleng ona o monyenyane oa hore Pandoc e ngotsoe Haskell: tlhahiso ea taelo ena ke setšoantšo sa likhoele tsa mehaho ea ka hare ea Pandoc, e entsoeng ka mokhoa o ts'oanang le kamoo e atisang ho etsoa kateng. ka Haskell.ka mohlala, laeboraring e tloaelehileng.

Kahoo, mona u ka bona hore boemeli ba ka hare ke mohaho o iphetang, sebakeng se seng le se seng sa ka hare ho na le lethathamo. Mohlala, boemong bo holimo ho na le lethathamo la ntho e le 'ngoe - sehlooho sa boemo ba pele se nang le litšoaneleho "hello-world",[],[]. Ho patiloe ka har'a sehlooho sena ho na le lethathamo la khoele "Lumela," le lateloa ke sebaka le khoele ea "World!"

Joalokaha u ka bona, boemeli ba ka hare ha bo fapane haholo le HTML. Ke sefate moo node e 'ngoe le e' ngoe e ka hare e fanang ka boitsebiso bo itseng mabapi le ho etsoa ha litloholo tsa eona, 'me makhasi a na le litaba tsa sebele tsa tokomane.

Haeba re theohela boemong ba ts'ebetsong, mofuta oa data bakeng sa tokomane eohle o hlalosoa tjena:

data Pandoc = Pandoc Meta [Block]

Mona Block ke hantle li-vertices tsa ka hare tse boletsoeng ka holimo, 'me Meta ke boitsebiso bo mabapi le tokomane, joalo ka sehlooho, letsatsi la pōpo, bangoli - sena se fapane le mekhoa e fapaneng,' me Pandoc o leka, haeba ho khoneha, ho boloka tlhahisoleseding e joalo ha a fetolela ho tloha ho sebopeho ho ea ho. sebopeho.

Hoo e ka bang bahahi bohle ba mofuta oa Block - mohlala, Header kapa Para (serapa) - nka litšoaneleho le lethathamo la li-vertices tsa boemo bo tlaase e le likhang - Inline, e le molao. Mohlala, Space kapa Str ke lihahi tsa mofuta oa Inline, mme tag ea HTML le eona e fetoha Inline ea eona e khethehileng. Ha re bone bohlokoa ba ho fana ka tlhaloso e feletseng ea mefuta ena, empa hlokomela hore e ka fumanoa mona mona.

Ho khahlisang, mofuta oa Pandoc ke monoid. Sena se bolela hore ho na le mofuta o itseng oa tokomane e se nang letho, le hore litokomane li ka phutheloa hammoho. Sena se bonolo ho se sebelisa ha u ngola Babali - u ka arola tokomane ka likarolo u sebelisa mabaka a sa utloahaleng, u arola e 'ngoe le e 'ngoe ka thoko, ebe u kopanya tsohle ho sengoloa se le seng. Tabeng ena, metainformation e tla bokelloa likarolong tsohle tsa tokomane hang-hang.

Ha u fetola, u re, ho tloha ho LaTeX ho ea ho HTML, pele mochine o khethehileng o bitsoang LaTeXReader o fetola tokomane ea ho kenya AST, ebe mojule o mong o bitsoang HTMLWriter o fetolela AST ho HTML. Ka lebaka la mohaho ona, ha ho hlokahale ho ngola palo ea quadratic ea liphetoho - ho lekane ho ngola Reader le Mongoli bakeng sa sebopeho se seng le se seng se secha, 'me lipara tsohle tse ka khonehang tsa liphetoho li tla tšehetsoa ka mokhoa o ikemetseng.

Ho hlakile hore mohaho o joalo o boetse o na le mefokolo, e boletsoeng esale pele ke litsebi lefapheng la meralo ea software. Ntho ea bohlokoa ka ho fetisisa ke litšenyehelo tsa ho etsa liphetoho sefateng sa syntax. Haeba phetoho e tebile ho lekana, o tla tlameha ho fetola khoutu ho Babali le Bangoli bohle. Mohlala, e 'ngoe ea liqholotso tse tobaneng le baetsi ba Pandoc ke ho ts'ehetsa lifomate tse rarahaneng tsa litafole. Hona joale Pandoc e khona ho etsa litafole tse bonolo haholo, tse nang le hlooho, litšiea le boleng seleng ka 'ngoe. Ka mohlala, tšobotsi ea colspan ho HTML e tla hlokomolohuoa feela. Le leng la mabaka a boits'oaro bona ke khaello ea moralo o kopaneng oa ho emela litafole ka liforomo tsohle kapa bonyane tse ngata - ka lebaka leo, ha ho hlake hore na litafole li lokela ho bolokoa ka mokhoa ofe ho boemeli ba kahare. Empa le kamora ho khetha pono e itseng, o tla hloka ho fetola Babali le Bangoli bohle ba tšehetsang ho sebetsa ka litafole.

Puo ea Haskell e ile ea khethoa eseng feela ka lebaka la lerato le leholo la bangoli bakeng sa mananeo a sebetsang. Haskell e tsebahala ka bokhoni ba eona bo pharaletseng ba ho sebetsana le mongolo. Mohlala o mong ke laebrari pasek ke laebrari e sebelisang ka mafolofolo mehopolo ea mananeo a sebetsang - li-monoids, li-monads, tse sebetsang le tse ling tse sebetsang - ho ngola li-parsers tse sa lumellaneng. Matla a felletseng a Parsec a ka bonoa ho mohlala ho tsoa ho HaskellWiki, moo mohlahlobi o felletseng oa puo e bonolo ea bohlokoa ea lenaneo e fetisoang. Ehlile, Parsec e boetse e sebelisoa ka mafolofolo Pandoc.

Ho hlalositsoe ka bokhutšoanyane, li-monads li sebelisoa bakeng sa ho arola ka tatellano, ha ntho e le 'ngoe e tla pele, ebe e 'ngoe. Ka mohlala, mohlaleng ona:

whileParser :: Parser Stmt
whileParser = whiteSpace >> statement

Pele o hloka ho bala sebaka, ebe polelo - e nang le mofuta oa Parser Stmt.

Lisebelisoa tse ling li sebelisoa ho khutlisetsa morao haeba ho hloleha ho hloleha. Ka mohlala,

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

Sena se bolela hore mohlomong u lokela ho leka ho bala polelo ka masakaneng, kapa leka ho bala lipolelo tse 'maloa ka tatellano.

Lisebelisoa tse sebetsang li sebelisoa haholo-holo e le likhutšoane tsa li-monads. Ka mohlala, tlohela mosebetsi oa tok ho bala lets'oao le leng (ena ke ts'ebetso ea 'nete e tsoang ho LaTeXReader). Ha re shebeng motsoako ona

const <$> tok <*> tok

E tla bala li-tokens tse peli ka tatellano ebe e khutlisa ea pele.

Bakeng sa lihlopha tsena kaofela, Haskell e na le li-operators tse ntle tsa tšoantšetso, tse etsang hore lenaneo la Reader le shebahale joaloka bonono ba ASCII. Feela khahloa ke khoutu ena e babatsehang.

Mesebetsi ea rona e ne e amana le LaTeXReader. Mosebetsi oa Vasily e ne e le ho ts'ehetsa litaelo tsa mbox le hbox, tse thusang ho ngola liphutheloana ho LaTeX. Elizabetha o ne a ikarabella ho tšehetsa taelo ea epigraph, e leng se u lumellang hore u thehe li-epigraphs litokomaneng tsa LaTeX.

Hatrace

Lisebelisoa tse kang UNIX hangata li kenya tšebetsong mohala oa sistimi ea ptrace. E na le thuso ho lokisa liphoso le ho etsisa maemo a mananeo, ho u lumella ho latela mehala ea sistimi eo lenaneo le e etsang. Mohlala, sesebelisoa se sebetsang haholo sa strace se sebelisa ptrace kahare.

Hatrace ke laeborari e fanang ka sehokelo sa ho ptrace ho Haskell. Taba ke hore ptrace ka boeona e rarahane haholo 'me ho thata haholo ho e sebelisa ka kotloloho, haholo-holo ho tsoa lipuong tse sebetsang hantle.

Hatrace o matha joalo ka strace qalong 'me o amohela likhang tse tšoanang. E fapane le strace ka hore e boetse ke laebrari e fanang ka sebopeho se bonolo ho feta ptrace feela.

Ka thuso ea lehloeo, re se re tšoere kokoanyana e le 'ngoe e sa thabiseng ho GHC Haskell compiler - ho bolaoa ka nako e fosahetseng, e hlahisa lifaele tsa ntho e fosahetseng' me ha e li bokelle ha e qala hape. Ho ngola ka mehala ea sistimi ho entse hore ho khonehe ho hlahisa phoso ka mokhoa o ts'epahalang ka nako e le 'ngoe, athe ho bolaea ho sa lebelloang ho hlahisitse phoso ka lihora tse ka bang peli.

Re kentse likhokahano tsa mehala ea sistimi laeboraring - Elizaveta o kentse brk, mme Vasily a eketsa mmap. Ho ipapisitsoe le liphetho tsa mosebetsi oa rona, hoa khoneha ho sebelisa likhang tsa mehala ea sistimi ena ka mokhoa o bonolo le o nepahetseng haholoanyane ha u sebelisa laeborari.

Source: www.habr.com

Eketsa ka tlhaloso