ZuriHac: fa'ata'ita'i polokalame fa'atino

Ia Iuni o le tausaga nei, i totonu o le taulaga laitiiti o Suiselani o Rapperswil, na taʻua ai se mea na tupu ZuriHac. O le taimi lea na faʻapotopotoina ai le sili atu ma le lima selau tagata Haskell, mai le amataga i le faʻavaeina o le gagana. E ui ina taʻua e le au faʻatulagaina lenei mea o se hackathon, e le o se konafesi poʻo se hackathon i le uiga masani. O lona faatulagaga e ese mai tagata fai polokalame masani. Na matou aʻoaʻoina e uiga ia ZuriHac e ala i le laki, auai i ai, ma o lenei ua matou manatu o lo matou tiute le taʻu atu e uiga i le mauaina e le masani ai!

ZuriHac: fa'ata'ita'i polokalame fa'atino

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. Alga. Na faʻaaogaina e Elizaveta le mauaina o tomai faʻatulagaina polokalame i galuega faʻapitoa e tuʻuina atu i le faʻatinoga o le anti-unification algorithm faʻatasi ai ma le faʻaogaina mulimuli ane i le ituaiga aʻoaʻoga.

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.

ZuriHac: fa'ata'ita'i polokalame fa'atino

Ata mai le Twitter ZuriHac

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.

ZuriHac: fa'ata'ita'i polokalame fa'atino

Aoaoga a Simon Peyton Jones. Ata mai le Twitter ZuriHac

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

pandoc ose fa'aliliuga lautele o tusitusiga, o le mea moni, mai so'o se faatulagaga i so'o se mea. Mo se faʻataʻitaʻiga, mai le docx i le pdf, poʻo le Markdown i le MediaWiki. O lona tusitala, o John MacFarlane, o se polofesa o filosofia i le Iunivesite o Kalefonia, Berkeley. I se tulaga lautele, Pandoc e fai si lauiloa, ma o nisi o a tatou uo na ofo ina ua latou iloa o Pandoc na tusia i Haskell.

ZuriHac: fa'ata'ita'i polokalame fa'atino

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 la'au fa'aupuga. E mafai ona e vaʻavaʻai i le faʻataʻitaʻiga vavalalata i le faigofie lava: pau lava le mea e tatau ona e faia o le setiina o le faʻasologa o galuega i le "native"

$ 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 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ʻamatalaga ose faletusi o lo'o fa'aaogaina ma le fa'aaogaina manatu o polokalame fa'atino - monoids, monads, applicative ma isi fa'aoga - e tusi ai fa'asalalauga fa'apitoa. O le malosi atoa o Parsec e mafai ona vaaia i totonu faataitaiga mai HaskellWiki, lea o lo'o fa'avasegaina ai se fa'amatalaga atoa o se gagana fa'apolokalame faigofie. Ioe, o loʻo faʻaaogaina foi Parsec i Pandoc.

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

Faaopoopo i ai se faamatalaga