Ia Iuni o le tausaga nei, i totonu o le taulaga laitiiti o Suiselani o Rapperswil, na taʻua ai se mea na tupu
E uiga ia i tatou
O lenei tusiga na saunia e le lua 3rd tausaga tamaiti aʻoga o le "Applied Mathematics and Informatics" polokalame i le National Research University Higher School of Economics - St. Petersburg: Vasily Alferov ma Elizaveta Vasilenko. O le naunau mo polokalame galue mo i matou uma na amata i se faasologa o lauga a D. N. Moskvin i le 2nd tausaga o le iunivesite. O lo'o auai nei Vasily i le Google Summer of Code program, lea o lo'o ia fa'atinoina ai kalafi algebraic i Haskell i lalo o le ta'ita'iga a le vaega o galuega.
Fa'asologa o mea e fai
O le au fa'amoemoe o lo'o i ai i latou o galuega fa'alauiloa tatala, tagata fai polokalame e fia auai i la latou atina'e, tagata su'esu'e polokalame fa'atino, ma tagata e fiafia lava ia Haskell. O lenei tausaga, na faʻapotopotoina ai e le au atinaʻe mai le sili atu ma le limasefulu punaoa tatala Haskell poloketi mai le lalolagi atoa i le nofoaga - le HSR Hochschule für Technik Rapperswil - e talanoa e uiga ia latou oloa ma maua ai tagata fou e fiafia i la latou atinaʻe.
Ata mai le Twitter
O le polokalame e matua faigofie lava: e tatau ona e tusia ni nai talosaga e uiga i lau poloketi i luma atu ma auina atu i latou i le faʻalapotopotoga, o le a tuʻuina atu faʻamatalaga e uiga i lau poloketi i luga o le itulau o mea na tupu. E le gata i lea, i le aso muamua, o tusitala o galuega faatino e tolusefulu sekone e faʻapuupuu faʻamatala mai le tulaga mea o loʻo latou faia ma mea e tatau ona fai. Ona suʻe lea e tagata fiafia i tusitala ma fesili auiliili e uiga i galuega.
E le o iai a matou lava poloketi tatala i le taimi nei, ae matou te matua manaʻo e saofagā i mea o loʻo i ai nei, o lea na matou lesitala ai o ni tagata auai masani. I le aluga o aso e tolu, sa matou galulue ma ni vaega se lua o tagata atiae. E foliga mai o le suʻesuʻega faʻatasi o tulafono ma fesoʻotaʻiga ola e faʻamalosia ai le fegalegaleaiga i le va o tusitala o poloketi ma tagata fai saofaga - i ZuriHac na mafai ai ona matou malamalama i vaega fou ia i matou ma mafai ona fesoasoani i ni 'au eseese se lua, faʻamaeʻaina le tasi galuega i taʻitasi. o galuega faatino.
I le faʻaopoopoga i faʻataʻitaʻiga taua, e tele lauga ma vasega matai na tuʻuina atu foi i ZuriHac. Matou te manatua faapitoa ni lauga se lua. I le taimi muamua o latou, na saunoa ai Andrey Mokhov mai le Iunivesite o Newcastle e uiga i le filifilia o mea aoga - o se vasega o ituaiga e tatau ona avea ma vaeluagalemu i le va o mea aoga ma monads. I se isi lauga, o se tasi o le na faavaeina Haskell, Simon Peyton Jones, na talanoa e uiga i le auala e galue ai ituaiga inference i le GHC compiler.
Aoaoga a Simon Peyton Jones. Ata mai le Twitter
O vasega matai na faia i le taimi o le hackathon na vaevaeina i ni vaega se tolu e faʻatatau i le maualuga o aʻoaʻoga a le au auai. O galuega na ofoina atu i tagata auai na auai i le atinaʻeina o poloketi sa faʻailogaina foi i se tulaga faigata. O le fa'alapotopotoga la'ititi ae faauo o tagata fai polokalame fa'atino e fa'afeiloa'i fiafia tagata fou i ona tulaga. Ina ia malamalama i tautalaga a Andrei Mokhov ma Simon Peyton Jones, peitaʻi, o le polokalame polokalame faʻatino sa matou faia i le iunivesite sa aoga tele.
Le resitalaina mo le mea na tupu e leai se totogi mo tagata auai masani ma tusitala poloketi. Na matou tuʻuina atu talosaga mo le auai i le amataga o Iuni, ina ua maeʻa na vave faʻafeiloaʻi mai le lisi faʻatali i le lisi o tagata faʻamaonia.
Ma o lenei o le a tatou talanoa e uiga i galuega faatino i le atinae lea na tatou auai.
pandoc
Lisi o fa'asologa o pepa e lagolagoina e Pandoc. O loʻo i ai foi se kalafi atoa i luga o le saite, ae o lenei ata e le fetaui i totonu o le tusiga.
O le mea moni, e le maua e Pandoc se liua tuusaʻo mo paʻu taʻitasi. Ina ia lagolagoina le tele o suiga eseese, e faʻaaogaina se fofo faʻataʻitaʻiga masani: muamua, o le pepa atoa e faʻaliliuina i totonu o se faʻataʻitaʻiga faʻapitoa i totonu, ona faʻatupuina ai lea o se pepa i se isi faatulagaga mai lenei faʻaaliga i totonu. E taʻua e le au atinaʻe le faʻaaliga i totonu "AST", lea e tu mo Abstract Syntax Tree, poʻo
$ cat example.html
<h1>Hello, World!</h1>
$ pandoc -f html -t native example.html
[Header 1 ("hello-world",[],[]) [Str "Hello,",Space,Str "World!"]]
O le aufaitau oe na galulue ma Haskell a itiiti mai ua mafai ona manatu mai lenei faʻataʻitaʻiga laʻititi o Pandoc o loʻo tusia i Haskell: o le gaioiga o lenei poloaiga o se manoa faʻatusa o fausaga i totonu o Pandoc, faia i foliga o le auala e masani ona faia ai. i Haskell mo se faataitaiga, i le faletusi masani.
O lea la, o iinei e mafai ona e vaʻaia o le faʻaaliga i totonu o se fausaga toe faʻaleleia, i totonu taʻitasi i totonu o loʻo i ai se lisi. Mo se faʻataʻitaʻiga, i le pito i luga o loʻo i ai se lisi o le tasi elemene - o le ulutala muamua tulaga faʻatasi ma uiga "hello-world",[],[]. O lo'o natia i totonu o lenei ulutala se lisi o le manoa "Talofa," sosoo ai ma se avanoa ma le manoa "World!".
E pei ona mafai ona e vaʻaia, o le faʻaaliga i totonu e le ese tele mai le HTML. O se la'au lea e maua ai e node ta'itasi i totonu ni fa'amatalaga e uiga i le fa'atulagaina o ana suli, ma o lau o lo'o iai mea moni o le pepa.
Afai tatou te alu i lalo i le tulaga faʻatinoga, o le ituaiga faʻamatalaga mo le pepa atoa e faʻamatalaina e pei o lenei:
data Pandoc = Pandoc Meta [Block]
O iinei o le Block o le mea tonu lava lea o pito i totonu o loʻo taʻua i luga, ma Meta o metainformation e uiga i le pepa, e pei o le ulutala, aso na faia ai, tusitala - e ese lenei mea mo faʻasologa eseese, ma taumafai Pandoc, pe a mafai, e faʻasaoina ia faʻamatalaga pe a faʻaliliu mai le faatulagaga i le faatulagaga.
Toeitiiti lava o tagata faufale uma o le ituaiga Block - mo se faʻataʻitaʻiga, Ulu poʻo Parakalafa (parakalafa) - ave uiga ma se lisi o pito maualalo pito i lalo e fai ma finauga - Inline, e fai ma tulafono. Mo se faʻataʻitaʻiga, Space poʻo Str o ni faufale o le Inline type, ma o le HTML tag e liliu foi i lona lava Inline faapitoa. Matou te le iloa se mea e tuʻuina atu ai se faʻamatalaga atoatoa o nei ituaiga, ae maitau e mafai ona maua iinei
O le mea e malie ai, o le ituaiga Pandoc o se monoid. O lona uiga o lo'o i ai se ituaiga o pepa gaogao, ma o pepa e mafai ona fa'aputu fa'atasi. E faigofie ona fa'aoga pe a tusia le Aufaitau - e mafai ona e vaevaeina se pepa i ni vaega e fa'aaoga ai le fa'atatau, fa'avasega ta'itasi, ona tu'u fa'atasi lea o mea uma i se pepa e tasi. I lenei tulaga, metainformation o le a aoina mai vaega uma o le pepa i le taimi e tasi.
Pe a liliu, fai mai, mai le LaTeX i le HTML, muamua o se module faʻapitoa e taʻua o LaTeXReader faʻaliliuina le pepa faʻaoga i le AST, ona faʻaliliuina lea e le isi module e taʻua o HTMLWriter le AST i le HTML. Faʻafetai i lenei fausaga, e le manaʻomia le tusia o se numera faʻailoga o suiga - ua lava le tusia o le Faitautusi ma le Tusitala mo faatulagaga fou taʻitasi, ma o paga uma e mafai ona liliu mai o le a otometi lava ona lagolagoina.
E manino lava o sea fausaga e iai foʻi ona faʻaletonu, ua leva ona valoia e tagata atamamai i le matata o le faʻaogaina o masini komepiuta. O le mea pito sili ona taua o le tau o le faia o suiga i le syntax tree. Afai e ogaoga le suiga, e tatau ona e suia le code i le au Faitau ma Tusitala uma. Mo se faʻataʻitaʻiga, o se tasi o luʻitau o loʻo feagai ma Pandoc atiaʻe o loʻo lagolagoina faʻasologa o laulau lavelave. Ole taimi nei e mafai e Pandoc ona fatuina ni laulau faigofie, ma se ulutala, koluma ma se tau i totonu o sela taʻitasi. Mo se faʻataʻitaʻiga, o le uiga colspan i le HTML o le a le amanaiaina. O se tasi o mafuaʻaga o lenei amioga o le leai o se faʻavae faʻatasi mo le faʻatusaina o laulau i mea uma poʻo le itiiti ifo i le tele o faʻatulagaga - e tusa ai, e le o manino pe o le a le tulaga e tatau ona teuina ai laulau i totonu o faʻaaliga. Ae tusa lava pe a uma ona filifilia se vaaiga patino, e te manaʻomia le suia atoa o le aufaitau ma le au tusitala e lagolagoina le galue ma laulau.
O le gagana Haskell na filifilia e le gata ona o le fiafia tele o tusitala mo polokalame faʻatino. Ua lauiloa Haskell ona o le tele o le gaosiga o tusitusiga. O se tasi o faataitaiga o le faletusi
Fa'amatala fa'apuupuu, o lo'o fa'aaogaina monads mo fa'asologa fa'asolosolo, pe a muamua le mea, ona sosoo ai lea ma le isi. Mo se faʻataʻitaʻiga, i lenei faʻataʻitaʻiga:
whileParser :: Parser Stmt
whileParser = whiteSpace >> statement
Muamua e tatau ona e faitauina le avanoa, ona sosoo ai lea ma le faʻamatalaga - lea e iai foʻi le Parser Stmt type.
E fa'aogaina isi fa'aoga e toe fa'afo'i pe a le manuia le fa'avasegaina. Faataitaiga,
statement :: Parser Stmt
statement = parens statement <|> sequenceOfStmt
O lona uiga e tatau ona e taumafai e faitau le fa'amatalaga i puipui, pe taumafai e faitau fa'asolosolo fa'amatalaga.
O fa'aoga fa'aoga e fa'aaoga muamua e fai ma ala 'alo mo monads. Mo se faʻataʻitaʻiga, tuʻu le tok function e faitau nisi faʻailoga (o se galuega moni mai LaTeXReader). Sei o tatou tilotilo i le tuufaatasiga lenei
const <$> tok <*> tok
O le a faitauina fa'ailoga se lua i se laina ma toe fa'afo'i le tasi muamua.
Mo nei vasega uma, o Haskell o loʻo i ai faʻataʻitaʻiga faʻatusa matagofie, lea e faʻaalia ai le polokalame a le Reader e pei o le ASCII art. Tau lava o le faamemelo i lenei code matagofie.
O a matou galuega e fesoʻotaʻi ma LaTeXReader. O le galuega a Vasily o le lagolagoina o le mbox ma le hbox poloaiga, aoga mo le tusiaina o afifi i LaTeX. O Elisapeta sa nafa ma le lagolagoina o le epigraph command, lea e mafai ai ona e faia ni epigraphs i LaTeX pepa.
Hatrace
UNIX-pei o faiga fa'aogaina e masani ona fa'atinoina le ptrace system call. E aoga i le debugging ma le faʻataʻitaʻiina o siosiomaga polokalame, e mafai ai ona e suʻeina le telefoni o loʻo faia e le polokalama. Mo se faʻataʻitaʻiga, o le aoga sili ona aoga strace faʻaaogaina ptrace totonu.
Hatrace o se faletusi e maua ai se atinaʻe e suʻe i Haskell. O le mea moni o le ptrace lava ia e matua faʻapitoa ma e faigata tele ona faʻaoga saʻo, aemaise lava mai gagana faʻaoga.
Hatrace e tamoe pei o le strace i le amataga ma talia finauga tutusa. E ese mai le strace ona o se faletusi e maua ai se faʻaoga faigofie nai lo le ptrace.
Faatasi ai ma le fesoasoani a hatrace, ua uma ona matou maua se tasi pusa le lelei i le GHC Haskell compiler - o le fasiotia i le taimi sese, e maua ai faila mea sese ma e le toe tuufaatasia pe a toe amataina. O le tusitusi e ala i telefoni feavea'i na mafai ai ona fa'alagolago le mea sese i le taimi e tasi, a'o fasia fa'afuase'i na toe fa'afo'i le mea sese i totonu o le lua itula.
Na matou faʻaopoopoina fesoʻotaʻiga telefoni i le faletusi - faʻaopoopo Elizaveta brk, ma faʻaopoopo e Vasily mmap. Faʻavae i luga o faʻaiʻuga o la matou galuega, e mafai ona sili atu ona faigofie ma saʻo le faʻaaogaina o finauga o nei faiga telefoni pe a faʻaaoga le faletusi.
puna: www.habr.com