ZuriHac: fampiharana fandaharana miasa

Tamin'ny volana Jona tamin'ity taona ity, tao amin'ny tanΓ na kelin'i Rapperswil any Soisa, nisy hetsika nantsoina ZuriHac. Tamin'ity indray mitoraka ity dia nanangona mpitia Haskell maherin'ny dimanjato izy io, manomboka amin'ny vao manomboka ka hatramin'ny mpanorina ny fiteny. Na dia antsoin'ny mpikarakara ho hackathon aza ity hetsika ity dia tsy fihaonambe na hackathon amin'ny heviny mahazatra. Tsy mitovy amin'ny mpandrindra fandaharana mahazatra ny endriny. Nianatra momba an'i ZuriHac tamin'ny vintana izahay, nandray anjara tamin'izany, ary izao dia heverinay fa adidinay ny milaza momba ny fitadiavana tsy mahazatra!

ZuriHac: fampiharana fandaharana miasa

About us

Ity lahatsoratra ity dia nomanin'ny mpianatra roa taona faha-3 ao amin'ny programa "Applied Mathematics and Informatics" ao amin'ny National Research University Higher School of Economics - St. Petersburg: Vasily Alferov sy Elizaveta Vasilenko. Nanomboka tamin'ny andiana lahateny nataon'i D. N. Moskvin tamin'ny taona faha-2 tao amin'ny anjerimanontolo ny fientanam-po amin'ny fandaharana miasa ho antsika roa. Vasily dia mandray anjara amin'ny programa Google Summer of Code amin'izao fotoana izao, izay ao anatin'izany ny fampiharana ny grafika algebra ao Haskell eo ambany fitarihan'ny ekipan'ny tetikasa. Alga. Elizaveta dia nampihatra ny fahaiza-manao fandaharana azo ampiasaina amin'ny asa fampianarana natokana ho an'ny fampiharana ny algorithm manohitra ny fampiraisana miaraka amin'ny fampiharana manaraka amin'ny teoria karazana.

Endrika hetsika

Ny mpihaino kendrena dia tompon'ny tetikasa open source, mpandrindra te-handray anjara amin'ny fivoarany, mpikaroka fandaharana miasa, ary olona tia an'i Haskell fotsiny. Tamin'ity taona ity, nivory tao amin'io toerana io ireo mpamorona avy amin'ny tetikasa Haskell open source maherin'ny dimampolo avy amin'ny lafivalon'izao tontolo izao - ny HSR Hochschule fΓΌr Technik Rapperswil - mba hiresaka momba ny vokatra azony sy hahatonga ny olona vaovao ho liana amin'ny fivoarany.

ZuriHac: fampiharana fandaharana miasa

Sary avy amin'ny Twitter ZuriHac

Tsotra be ny tetika: mila manoratra tolo-kevitra vitsivitsy momba ny tetikasanao mialoha ianao ary mandefa azy ireo any amin'ny mpikarakara, izay handefa vaovao momba ny tetikasanao ao amin'ny pejin'ny hetsika. Ankoatr'izay, amin'ny andro voalohany, ny mpanoratra ny tetikasa dia manana telopolo segondra mba hilazana fohifohy avy eny an-tsehatra ny zavatra ataony sy ny tokony hatao. Avy eo ireo olona liana dia mitady ny mpanoratra ary manontany amin'ny antsipiriany momba ny asa.

Tsy mbola manana tetikasa misokatra manokana izahay, fa tena te handray anjara amin'ny efa misy, ka nisoratra anarana ho mpandray anjara tsy tapaka. Nandritra ny telo andro, niara-niasa tamina vondrona mpamorona roa izahay. Hita fa ny fianarana miaraka amin'ny code sy ny fifandraisana mivantana dia mahatonga ny fifandraisana eo amin'ny mpanoratra sy ny mpandray anjara amin'ny tetikasa tena mamokatra - tao amin'ny ZuriHac dia afaka nahatakatra ireo faritra vaovao taminay izahay ary afaka nanampy ekipa roa samy hafa tanteraka, nahavita asa iray isaky ny tsirairay. ny tetikasa.

Ho fanampin'ny fanazaran-tena sarobidy, dia nisy lahateny sy kilasy master maromaro natao tao amin'ny ZuriHac. Tsaroanay indrindra ny lahateny roa. Tamin'ny voalohany tamin'izy ireo, Andrey Mokhov avy ao amin'ny Oniversiten'i Newcastle niresaka momba ny fifantenana applicative functors - kilasy karazana izay tokony ho mpanelanelana amin'ny applicative functors sy monads. Tao amin'ny lahateny iray hafa, iray amin'ireo mpanorina ny Haskell, Simon Peyton Jones, dia niresaka momba ny fomba fiasan'ny karazana inference ao amin'ny GHC compiler.

ZuriHac: fampiharana fandaharana miasa

Lahateny nataon'i Simon Peyton Jones. Sary avy amin'ny Twitter ZuriHac

Nizara ho sokajy telo ny kilasy master natao nandritra ny hackathon, arakaraky ny haavon’ny fanofanana ireo mpandray anjara. Ny asa natolotra ho an'ireo mpandray anjara izay nanatevin-daharana ny fampandrosoana ny tetikasa dia voamarika amin'ny haavon'ny fahasarotana ihany koa. Ny vondrom-piarahamonina kely nefa sariaka amin'ny programer miasa dia faly mandray ireo vao tonga eo amin'ny laharana misy azy. Mba hahatakarana ny lahatenin'i Andrei Mokhov sy Simon Peyton Jones, na izany aza, dia tena nahasoa ny taranja fandaharana fampiasa izay noraisinay tany amin'ny oniversite.

Maimaimpoana ny fisoratana anarana ho an'ny hetsika ho an'ny mpandray anjara mahazatra sy ny mpanoratra tetikasa. Nametraka fangatahana fandraisana anjara izahay tamin'ny fiandohan'ny volana Jona, ary avy eo dia nafindra haingana avy amin'ny lisitry ny fiandrasana ho any amin'ny lisitry ny mpandray anjara voamarina.

Ary ankehitriny dia hiresaka momba ny tetikasa amin'ny fampandrosoana izay nandraisantsika anjara.

pandoc

pandoc dia mpanova eran-tany ny antontan-taratasy an-tsoratra, raha ny marina, avy amin'ny endrika rehetra mankany amin'ny iray. Ohatra, avy amin'ny docx mankany pdf, na avy amin'ny Markdown mankany MediaWiki. Ny mpanoratra azy, John MacFarlane, dia mpampianatra filozofia ao amin'ny University of California, Berkeley. Amin'ny ankapobeny dia malaza be i Pandoc, ary gaga ny sasany tamin'ireo namantsika rehefa nahafantatra fa nosoratana tamin'ny teny Haskell ny Pandoc.

ZuriHac: fampiharana fandaharana miasa

Lisitry ny endrika antontan-taratasy tohanan'ny Pandoc. Misy ihany koa ny grafika iray manontolo ao amin'ny tranokala, saingy ity sary ity dia tsy mifanaraka amin'ny lahatsoratra.

Mazava ho azy fa tsy manome fiovam-po mivantana ho an'ny endrika tsiroaroa ny Pandoc. Mba hanohanana ny fanovana isan-karazany toy izany, dia ampiasaina ny vahaolana ara-javakanto mahazatra: voalohany, ny antontan-taratasy iray manontolo dia adika ho solontena manelanelana anatiny manokana, ary avy eo misy antontan-taratasy amin'ny endrika hafa dia avoaka avy amin'io fanehoana anatiny io. Ny mpamorona dia miantso ny solontena anatiny "AST", izay midika hoe Abstract Syntax Tree, na hazo syntax abstract. Azonao atao ny mijery ny solontenan'ny mpanelanelana amin'ny fomba tsotra: ny hany ilainao atao dia ny mametraka ny format output 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!"]]

Ireo mpamaky izay niara-niasa tamin'i Haskell farafaharatsiny dia afaka mihevitra avy amin'ity ohatra kely ity fa Pandoc dia voasoratra ao amin'ny Haskell: ny famoahana an'ity baiko ity dia fanehoana tady amin'ny rafitra anatiny ao Pandoc, noforonina mitovy amin'ny fomba fanao mahazatra. ao amin'ny Haskell, ohatra, ao amin'ny tranomboky mahazatra.

Eto ianao dia afaka mahita fa ny fanehoana anatiny dia rafitra recursive, ao amin'ny node anatiny tsirairay izay misy lisitra. Ohatra, eo amin'ny ambaratonga ambony dia misy lisitry ny singa iray - ny lohatenin'ny ambaratonga voalohany misy ny toetra "hello-world",[],[]. Miafina ao anatin'ity lohapejy ity ny lisitry ny tady β€œManahoana”, arahin'ny habaka sy ny tady β€œWorld!”.

Araka ny hitanao, ny fanehoana anatiny dia tsy mitovy amin'ny HTML. Izy io dia hazo izay ahitana ny node anatiny tsirairay manome fampahalalana momba ny fandrafetana ny taranany, ary ny raviny dia misy ny tena votoatin'ny antontan-taratasy.

Raha midina any amin'ny ambaratonga fampiharana isika dia voafaritra toy izao ny karazana data ho an'ny antontan-taratasy manontolo:

data Pandoc = Pandoc Meta [Block]

Eto ny Block dia ireo vertices anatiny voalaza etsy ambony indrindra, ary ny Meta dia metainformation momba ny antontan-taratasy, toy ny lohateny, daty famoronana, mpanoratra - hafa izany amin'ny endrika samihafa, ary i Pandoc dia manandrana, raha azo atao, mba hitahiry fampahalalana toy izany rehefa mandika avy amin'ny endrika mankany endrika.

Saika ny mpanamboatra karazana Block - ohatra, Lohateny na Para (fehintsoratra) - dia maka toetra sy lisitry ny vertices ambany kokoa ho tohan-kevitra - Inline, toy ny fitsipika. Ohatra, Space na Str dia mpanorina ny karazana Inline, ary ny HTML tag koa mivadika ho azy manokana Inline. Tsy misy dikany ny manome famaritana feno momba ireo karazana ireo, saingy mariho fa azo jerena eto eto.

Mahaliana fa ny karazana Pandoc dia monoid. Midika izany fa misy karazana antontan-taratasy tsy misy na inona na inona, ary azo atambatra miaraka ireo antontan-taratasy. Mora ampiasaina izany rehefa manoratra ny Mpamaky - azonao atao ny manasaraka ny antontan-taratasy ho ampahany amin'ny fampiasana lojika tsy misy dikany, mamaha ny tsirairay avy, ary avy eo dia atambatra ho rakitra iray ny zavatra rehetra. Amin'ity tranga ity, ny metainformation dia angonina avy amin'ny ampahany rehetra amin'ny antontan-taratasy indray mandeha.

Rehefa mamadika, lazao hoe, avy amin'ny LaTeX ho HTML, voalohany ny maody manokana antsoina hoe LaTeXReader dia mamadika ny antontan-taratasy fampidirana ho AST, avy eo ny module iray hafa antsoina hoe HTMLWriter dia mamadika ny AST ho HTML. Noho ity maritrano ity dia tsy ilaina ny manoratra isa efa-bolana amin'ny fiovam-po - ampy ny manoratra Reader sy Writer ho an'ny endrika vaovao tsirairay, ary ho tohanana ho azy ireo tsiroaroa mety hitranga.

Mazava ho azy fa manana ny lesoka ihany koa ny rafitra toy izany, izay efa nambaran'ny manampahaizana manokana momba ny maritrano rindrambaiko hatry ny ela. Ny tena manan-danja dia ny vidin'ny fanovana ny hazo syntax. Raha tena matotra ny fanovana dia tsy maintsy manova ny kaody amin'ny Mpamaky sy Mpanoratra rehetra ianao. Ohatra, iray amin'ireo fanamby atrehin'ny mpamorona Pandoc ny fanohanana ireo endrika latabatra sarotra. Amin'izao fotoana izao, Pandoc dia tsy afaka mamorona tabilao tsotra fotsiny, miaraka amin'ny lohapejy, tsanganana ary sanda isaky ny sela. Ohatra, ny toetra colspan ao amin'ny HTML dia hatao tsinontsinona. Ny iray amin'ireo antony mahatonga an'io fihetsika io dia ny tsy fisian'ny rafitra mitambatra hanehoana latabatra amin'ny endrika rehetra na farafaharatsiny - noho izany dia tsy mazava ny endrika tokony hotehirizina ao amin'ny fanehoana anatiny. Saingy na dia aorian'ny fisafidianana fomba fijery manokana aza dia mila manova tanteraka ny Mpamaky sy Mpanoratra rehetra manohana ny fiasana amin'ny latabatra ianao.

Ny fiteny Haskell dia nofidina tsy noho ny fitiavan'ny mpanoratra ny fandaharana miasa. Haskell dia fantatra amin'ny fahaizany manodina lahatsoratra. Ohatra iray ny tranomboky parsec dia trano famakiam-boky izay mampiasa mavitrika ny foto-kevitry ny fandaharana miasa - monoids, monads, applicative sy hafa functors - hanoratana parsers tsy misy dikany. Ny herin'ny Parsec feno dia azo jerena ao OHATRA avy amin'ny HaskellWiki, izay ahitana parser feno amin'ny fiteny fandaharana tsotra tsy maintsy atao. Mazava ho azy fa ampiasaina amin'ny Pandoc ihany koa ny Parsec.

Nofaritana fohifohy, ny monads dia ampiasaina amin'ny famakafakana misesy, rehefa misy zavatra iray aloha, ary avy eo hafa. Ohatra, amin'ity ohatra ity:

whileParser :: Parser Stmt
whileParser = whiteSpace >> statement

Voalohany dia mila manisa ny habaka ianao, ary avy eo ny fanambarana - izay manana karazana Parser Stmt ihany koa.

Ny functors hafa dia ampiasaina hamerenana indray raha tsy mahomby ny famafazana. Ohatra,

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

Midika izany fa mila manandrana mamaky ny fanambarana ao anaty fononteny ianao, na manandrana mamaky fanambarana maromaro misesy.

Ny functors applicative dia ampiasaina indrindra ho toy ny hitsin-dΓ lana ho an'ny monads. Ohatra, avelao ny tok function mamaky token (tena asa avy amin'ny LaTeXReader izany). Andeha hojerentsika ity fitambarana ity

const <$> tok <*> tok

Hamaky famantarana roa misesy izy io ary hamerina ny voalohany.

Ho an'ireo kilasy rehetra ireo, Haskell dia manana mpandraharaha an'ohatra tsara tarehy, izay mahatonga ny fandaharana Reader ho toy ny zavakanto ASCII. Ankafizo fotsiny ity code mahafinaritra ity.

Nifandraika tamin'ny LaTeXReader ny asanay. Ny asan'i Vasily dia ny hanohana ny baiko mbox sy hbox, ilaina amin'ny fanoratana fonosana amin'ny LaTeX. Elizabeth dia tompon'andraikitra amin'ny fanohanana ny baikon'ny epigraph, izay ahafahanao mamorona epigraphs amin'ny antontan-taratasy LaTeX.

Hatrace

Ny rafitra miasa toy ny UNIX dia matetika mampihatra ny antson'ny rafitra ptrace. Izy io dia ilaina amin'ny debugging sy simulation ny tontolon'ny programa, ahafahanao manara-maso ny antson'ny rafitra izay ataon'ny programa. Ohatra, ny fampiasana strace tena ilaina dia mampiasa ptrace anatiny.

Hatrace dia tranomboky izay manome interface tsara ho an'ny ptrace ao amin'ny Haskell. Ny zava-misy dia ny ptrace mihitsy no tena be pitsiny ary sarotra ny mampiasa azy mivantana, indrindra amin'ny fiteny miasa.

Hatrace dia mihazakazaka toy ny strace amin'ny fanombohana ary manaiky hevitra mitovy. Tsy mitovy amin'ny strace izy io fa tranomboky manome interface tsara kokoa noho ny ptrace fotsiny.

Miaraka amin'ny fanampian'ny hatrace dia efa nahatsikaritra bibikely iray tsy mahafinaritra izahay tao amin'ny compiler GHC Haskell - novonoina tamin'ny fotoana tsy mety, miteraka rakitra zavatra tsy mety ary tsy mamerina azy ireo rehefa averina. Ny fanoratana amin'ny alΓ lan'ny antso an-tariby dia nahafahana namerina ny fahadisoana tamin'ny hazakazaka iray, raha ny famonoana kisendrasendra kosa dia namerina ny fahadisoana tao anatin'ny adiny roa teo ho eo.

Nanampy fifandraisana amin'ny antso an-tariby tao amin'ny tranomboky izahay - nanampy brk i Elizaveta, ary nanampy mmap i Vasily. Miorina amin'ny valin'ny asantsika, azo atao ny mampiasa tsotra sy marina kokoa ny hevitra momba ireo antso an-tariby ireo rehefa mampiasa ny tranomboky.

Source: www.habr.com

Add a comment