I Iune o kēia makahiki, ma ke kūlanakauhale liʻiliʻi Swiss o Rapperswil, kahi hanana i kapa ʻia
No mākou
Ua hoʻomākaukau ʻia kēia ʻatikala e ʻelua mau haumāna 3rd makahiki o ka papahana "Applied Mathematics and Informatics" ma ke kula kiʻekiʻe o ka National Research University of Economics - St. Petersburg: Vasily Alferov lāua ʻo Elizaveta Vasilenko. Ua hoʻomaka ka makemake i ka hoʻolālā hana no mākou ʻelua me nā ʻōlelo aʻo a D. N. Moskvin i ka makahiki ʻelua o ke kulanui. Ke komo nei ʻo Vasily i kēia manawa i ka papahana Google Summer of Code, kahi e hoʻokō ai ʻo ia i nā kiʻi algebraic ma Haskell ma lalo o ke alakaʻi ʻana a ka hui papahana.
ʻAno hanana
ʻO ka poʻe i manaʻo ʻia he poʻe nona nā papahana open source, nā polokalamu polokalamu e makemake e komo i kā lākou hoʻomohala ʻana, nā mea noiʻi hoʻolālā hana, a me nā poʻe makemake nui iā Haskell. I kēia makahiki, ua hōʻuluʻulu nā mea hoʻomohala mai nā papahana Haskell he kanalima ākea mai nā wahi a pau ma ke kahua - ka HSR Hochschule für Technik Rapperswil - e kamaʻilio e pili ana i kā lākou huahana a loaʻa i nā poʻe hou e hoihoi i kā lākou ulu ʻana.
Kiʻi mai Twitter
He maʻalahi loa ka papahana: pono ʻoe e kākau i kekahi mau manaʻo e pili ana i kāu papahana ma mua a hoʻouna iā lākou i nā mea hoʻonohonoho, nāna e kau i ka ʻike e pili ana i kāu papahana ma ka ʻaoʻao hanana. Eia kekahi, ma ka lā mua, he kanakolu kekona nā mea kākau o nā papahana e haʻi pōkole loa mai ke kahua i kā lākou hana a me nā mea e pono ai ke hana. A laila ʻimi ka poʻe hoihoi i nā mea kākau a nīnau kikoʻī e pili ana i nā hana.
ʻAʻole loaʻa kā mākou mau papahana wehe, akā makemake maoli mākou e hāʻawi i nā mea i loaʻa, no laila ua hoʻopaʻa inoa mākou ma ke ʻano he poʻe komo maʻamau. I loko o nā lā ʻekolu, ua hana mākou me ʻelua pūʻulu o nā mea hoʻomohala. ʻIke ʻia ʻo ka hoʻopaʻa ʻana i ka code a me ke kamaʻilio ola e hoʻohua nui ai ka pilina ma waena o nā mea kākau papahana a me nā mea kōkua - ma ZuriHac ua hiki iā mākou ke hoʻomaopopo i nā wahi hou iā mākou a hiki iā mākou ke kōkua i ʻelua mau hui like ʻole, hoʻopau i hoʻokahi hana i kēlā me kēia. o na papahana.
Ma waho aʻe o ka hoʻomaʻamaʻa koʻikoʻi, ua hāʻawi ʻia kekahi mau haʻiʻōlelo a me nā papa haku ma ZuriHac. Hoʻomanaʻo nui mākou i ʻelua mau haʻiʻōlelo. I ka mua o lākou, ua kamaʻilio ʻo Andrey Mokhov mai ke Kulanui o Newcastle e pili ana i nā mea hoʻohana koho koho - he papa o nā ʻano e lilo i waena ma waena o nā mea hana noiʻi a me nā monads. Ma kekahi haʻi'ōlelo, ua kamaʻilio kekahi o nā mea nāna i hoʻokumu iā Haskell, ʻo Simon Peyton Jones, e pili ana i ka hana ʻana o ke ʻano inference i ka GHC compiler.
Haʻiʻōlelo na Simon Peyton Jones. Kiʻi mai Twitter
Ua māhele ʻia nā papa haku i ka hackathon i ʻekolu mau ʻāpana e like me ke kiʻekiʻe o ke aʻo ʻana o nā mea komo. Ua hōʻailona pū ʻia nā hana i hāʻawi ʻia i nā poʻe i komo i ka hoʻomohala ʻana i nā papahana me kahi pae paʻakikī. Hoʻokipa hauʻoli ke kaiāulu liʻiliʻi akā aloha o nā mea papahana hana i nā poʻe hou i loko o kona mau kūlana. No ka hoʻomaopopo ʻana i nā haʻiʻōlelo a Andrei Mokhov lāua ʻo Simon Peyton Jones, akā naʻe, ua pono loa ka papa hoʻolālā hana a mākou i lawe ai ma ke kulanui.
He manuahi ke kākau inoa ʻana no ka hanana no nā mea komo maʻamau a me nā mea kākau papahana. Ua hoʻouna mākou i nā noi no ke komo ʻana i ka hoʻomaka ʻana o Iune, a ma hope iho ua hoʻoneʻe koke ʻia mākou mai ka papa inoa kali i ka papa inoa o nā mea komo.
A i kēia manawa e kamaʻilio mākou e pili ana i nā papahana i ka hoʻomohala ʻana a mākou i komo ai.
ʻO Pandoc
Papa inoa o nā ʻano palapala i kākoʻo ʻia e Pandoc. Aia kekahi pakuhi holoʻokoʻa ma ka pūnaewele, akā ʻaʻole kūpono kēia kiʻi i ka ʻatikala.
ʻOiaʻiʻo, ʻaʻole hāʻawi ʻo Pandoc i ka hoʻololi pololei ʻana no kēlā me kēia pālua o nā ʻano. No ke kākoʻo ʻana i nā ʻano hoʻololi like ʻole, hoʻohana ʻia kahi hoʻoponopono hoʻolālā maʻamau: ʻo ka mea mua, ua unuhi ʻia ka palapala holoʻokoʻa i loko o kahi hōʻike kikowaena kūloko kūikawā, a laila hana ʻia kahi palapala ma kahi ʻano ʻokoʻa mai kēia hōʻike kūloko. Kapa nā mea hoʻomohala i ka hōʻike kūloko "AST", kahi e kū nei no Abstract Syntax Tree, a i ʻole
$ cat example.html
<h1>Hello, World!</h1>
$ pandoc -f html -t native example.html
[Header 1 ("hello-world",[],[]) [Str "Hello,",Space,Str "World!"]]
ʻO ka poʻe heluhelu i hana pū me Haskell ma kahi liʻiliʻi liʻiliʻi hiki ke manaʻo mai kēia hiʻohiʻona liʻiliʻi ua kākau ʻia ʻo Pandoc ma Haskell: ʻo ka hoʻopuka ʻana o kēia kauoha he hōʻailona string o nā hale kūloko o Pandoc, i hana ʻia e like me ke ʻano o ka hana maʻamau. ma Haskell, no ka laʻana, ma ka waihona maʻamau.
No laila, maʻaneʻi hiki iā ʻoe ke ʻike he ʻano recursive ka hōʻike kūloko, i kēlā me kēia node kūloko kahi papa inoa. No ka laʻana, aia ma ka pae kiʻekiʻe he papa inoa o hoʻokahi mea - ke poʻo pae mua me nā ʻano "hello-world",[],[]. Huna i loko o kēia poʻomanaʻo he papa inoa o ke kaula "Aloha," a ukali ʻia e kahi hakahaka a me ke kaula "World!".
E like me kāu e ʻike ai, ʻaʻole ʻokoʻa ka hōʻike kūloko mai HTML. He lāʻau ia kahi e hāʻawi ai kēlā me kēia node kūloko i kekahi mau ʻike e pili ana i ke ʻano o kāna mau mamo, a aia i loko o nā lau nā mea maoli o ka palapala.
Inā mākou e iho i ka pae hoʻokō, wehewehe ʻia ke ʻano ʻikepili no ka palapala holoʻokoʻa e like me kēia:
data Pandoc = Pandoc Meta [Block]
Eia ʻo Block ka pololei o nā vertices kūloko i ʻōlelo ʻia ma luna, a ʻo Meta ka metainformation e pili ana i ka palapala, e like me ke poʻo inoa, ka lā hana, nā mea kākau - ʻokoʻa kēia no nā ʻano like ʻole, a hoʻāʻo ʻo Pandoc, inā hiki, e mālama i kēlā ʻike i ka unuhi ʻana mai ka ʻano hōʻano.
Aneane nā mea kūkulu hale o ke ʻano Block - no ka laʻana, Header a i ʻole Para (palaka) - lawe i nā ʻano a me kahi papa inoa o nā vertices haʻahaʻa haʻahaʻa e like me nā hoʻopaʻapaʻa - Inline, ma ke ʻano he lula. No ka laʻana, ʻo Space a i ʻole Str nā mea kūkulu o ke ʻano Inline, a ua huli pū ka tag HTML i kāna Inline kūikawā. ʻAʻole mākou e ʻike i kahi kikoʻī o ka hāʻawi ʻana i kahi wehewehe piha o kēia mau ʻano, akā e hoʻomaopopo ʻoe hiki ke loaʻa ma aneʻi
ʻO ka mea hoihoi, ʻo ke ʻano Pandoc he monoid. ʻO ia hoʻi, aia kekahi ʻano palapala ʻole, a hiki ke hoʻopaʻa ʻia nā palapala. He mea maʻalahi kēia e hoʻohana i ka wā e kākau ai i nā mea heluhelu - hiki iā ʻoe ke wāwahi i kahi palapala i mau ʻāpana me ka hoʻohana ʻana i ka loina ʻokoʻa, e hoʻokaʻawale i kēlā me kēia, a laila e hoʻohui i nā mea āpau i hoʻokahi palapala. I kēia hihia, e hōʻiliʻili ʻia ka metainformation mai nā ʻāpana āpau o ka palapala i ka manawa hoʻokahi.
I ka hoʻololi ʻana, e ʻōlelo, mai LaTeX i HTML, hoʻololi mua kahi module kūikawā i kapa ʻia ʻo LaTeXReader i ka palapala hoʻokomo i AST, a laila hoʻololi kekahi module i kapa ʻia HTMLWriter i ka AST i HTML. Mahalo i kēia hoʻolālā, ʻaʻohe pono e kākau i kahi helu quadratic o nā hoʻololi - ua lawa ke kākau ʻana i ka Mea Heluhelu a me ka Mea kākau no kēlā me kēia ʻano hou, a e kākoʻo ʻia nā palua hiki ke hoʻololi ʻia.
He mea maopopo loa he mau hemahema no ia ano, i wanana mua ia e ka poe akamai i ka hana o ka lako polokalamu. ʻO ka mea nui loa ke kumukūʻai o ka hoʻololi ʻana i ka lāʻau syntax. Inā koʻikoʻi ka hoʻololi, pono ʻoe e hoʻololi i ke code ma nā mea heluhelu a me nā mea kākau. No ka laʻana, ʻo kekahi o nā paʻakikī e kū nei i nā mea hoʻomohala Pandoc ke kākoʻo nei i nā ʻano papaʻaina paʻakikī. I kēia manawa hiki iā Pandoc ke hana i nā papa maʻalahi loa, me ke poʻo, nā kolamu a me kahi waiwai i kēlā me kēia cell. No ka laʻana, e nānā ʻole ʻia ke ʻano colspan ma HTML. ʻO kekahi kumu o kēia ʻano, ʻo ia ka nele o kahi hoʻolālā lokahi no ka hōʻike ʻana i nā papa ma nā ʻano āpau a i ʻole ka liʻiliʻi loa - no laila, ʻaʻole maopopo i ke ʻano o ka mālama ʻana i nā papa i loko o ka hōʻike kūloko. Akā ma hope o ke koho ʻana i kahi ʻike kikoʻī, pono ʻoe e hoʻololi i nā mea heluhelu a me nā mea kākau āpau e kākoʻo ana i ka hana ʻana me nā papa.
Ua koho ʻia ka ʻōlelo Haskell ʻaʻole wale no ke aloha nui o nā mea kākau i ka hoʻolālā hana. Ua ʻike ʻia ʻo Haskell no kāna hiki ke hana kikokikona. ʻO kekahi laʻana ka hale waihona puke
I wehewehe pōkole ʻia, hoʻohana ʻia nā monads no ka parsing sequential, ke hele mua kekahi mea, a laila kekahi. No ka laʻana, ma kēia laʻana:
whileParser :: Parser Stmt
whileParser = whiteSpace >> statement
Pono mua ʻoe e helu i ka hakahaka, a laila ka ʻōlelo - aia pū kekahi ʻano Parser Stmt.
Hoʻohana ʻia nā mea hana ʻē aʻe e hoʻihoʻi i hope inā ʻaʻole hiki ke hoʻopau ʻia. ʻo kahi laʻana,
statement :: Parser Stmt
statement = parens statement <|> sequenceOfStmt
ʻO ia hoʻi, pono ʻoe e hoʻāʻo e heluhelu i ka ʻōlelo i loko o nā brackets, a i ʻole e hoʻāʻo e heluhelu i kekahi mau ʻōlelo ma ke kaʻina.
Hoʻohana mua ʻia nā mea hana applicative e like me nā pōkole no nā monads. No ka laʻana, e heluhelu ka hana tok i kekahi hōʻailona (he hana maoli kēia mai LaTeXReader). E nānā kākou i kēia hui ʻana
const <$> tok <*> tok
E heluhelu ia i ʻelua hōʻailona ma ka lālani a hoʻihoʻi i ka mea mua.
No kēia mau papa a pau, loaʻa iā Haskell nā mea hōʻailona hōʻailona nani, e hoʻohālikelike ai ka polokalamu Reader e like me ke kiʻi ASCII. Mahalo wale i kēia code maikaʻi.
Ua pili kā mākou mau hana iā LaTeXReader. ʻO ka hana a Vasily ke kākoʻo i nā kauoha mbox a me hbox, pono no ke kākau ʻana i nā pūʻolo ma LaTeX. ʻO Elizabeth ke kuleana no ke kākoʻo ʻana i ke kauoha epigraph, kahi e hiki ai iā ʻoe ke hana i nā epigraphs ma nā palapala LaTeX.
Hatrace
Hoʻokomo pinepine nā ʻōnaehana hana UNIX i ka ptrace system call. He mea pono ia i ka debugging a me ka hoʻohālikelike ʻana i nā kaiapuni papahana, e ʻae iā ʻoe e ʻimi i nā kelepona ʻōnaehana i hana ʻia e ka papahana. No ka laʻana, hoʻohana ka strace pono loa i ka ptrace i loko.
He hale waihona puke ʻo Hatrace e hāʻawi i kahi kikowaena e hoʻopaʻa inoa ma Haskell. ʻO ka ʻoiaʻiʻo, ʻo ka ptrace ponoʻī he maʻalahi loa a paʻakikī loa ka hoʻohana pololei ʻana, ʻoi aku ka nui o nā ʻōlelo hana.
Holo ʻo Hatrace e like me strace i ka hoʻomaka ʻana a ʻae i nā manaʻo like. He ʻokoʻa ia mai ka strace no ka mea he hale waihona puke ia e hāʻawi i kahi maʻalahi maʻalahi ma mua o ka ptrace wale nō.
Me ke kōkua o ka hatrace, ua loaʻa iā mākou kekahi mea ʻoluʻolu ʻole i ka GHC Haskell compiler - ke pepehi ʻia i ka manawa kūpono ʻole, hana ia i nā faila hewa ʻole a ʻaʻole e hoʻopili hou iā lākou ke hoʻomaka hou. ʻO ka hoʻopaʻa ʻana ma nā kelepona ʻōnaehana i hiki ai ke hoʻopuka pono i ka hewa i ka holo hoʻokahi, ʻoiai ua hoʻopuka ka pepehi kanaka i ka hewa i loko o ʻelua mau hola.
Ua hoʻohui mākou i nā kikowaena kelepona pūnaewele i ka waihona - ua hoʻohui ʻo Elizaveta i ka brk, a ua hoʻohui ʻo Vasily i mmap. Ma muli o nā hopena o kā mākou hana, hiki ke hoʻohana maʻalahi a pololei i nā manaʻo o kēia mau kelepona pūnaewele i ka wā e hoʻohana ai i ka waihona.
Source: www.habr.com