ZuriHac: kudzidzira hurongwa hwekuita

MunaJune wegore rino, mutaundi diki reSwitzerland reRapperswil, chiitiko chinonzi ZuriHac. Panguva ino yakaunza pamwe vanopfuura mazana mashanu vadi veHaskell, kubva kune vanotanga kusvika kuvamba vemutauro. Kunyangwe varongi vachidana chiitiko ichi kuti hackathon, haisi musangano kana hackathon mupfungwa yechinyakare. Chimiro chayo chakasiyana kubva kune echinyakare programmers. Takadzidza nezveZuriHac nerombo rakanaka, takatora chikamu mairi, uye zvino tinozviona sebasa redu kutaura nezve zvisingawanzo kuwanikwa!

ZuriHac: kudzidzira hurongwa hwekuita

Nezvedu

Ichi chinyorwa chakagadzirirwa nevadzidzi vaviri vegore re3 re "Applied Mathematics uye Informatics" purogiramu paNational Research University Higher School of Economics - St. Petersburg: Vasily Alferov naElizaveta Vasilenko. Kuda kwekuita hurongwa hwekuita isu tese kwakatanga nenhevedzano yehurukuro naD. N. Moskvin mugore rechipiri reyunivhesiti. Vasily parizvino ari kutora chikamu muchirongwa cheGoogle Summer yeCode, mukati maari kuita algebraic graph muHaskell achitungamirwa neboka reprojekiti. Algae. Elizaveta akashandisa hunyanzvi hwekuita hurongwa hwekuita mukosi yebasa rakapihwa mukuitwa kweiyo anti-kubatana algorithm neinozotevera application mumhando yedzidziso.

Chiitiko chimiro

Vateereri vanotarisirwa varidzi veakavhurika sosi mapurojekiti, vanogadzira mapurogiramu vanoda kutora chikamu mukusimudzira kwavo, vanoongorora zvirongwa zvekushanda, uye vanhu vanongofarira Haskell. Gore rino, vanogadzira kubva kune anopfuura makumi mashanu akavhurika sosi mapurojekiti eHaskell kubva kumativi ese enyika akaungana panzvimbo iyi - HSR Hochschule fΓΌr Technik Rapperswil - kuti vataure nezve zvigadzirwa zvavo uye kuti vanhu vatsva vafarire budiriro yavo.

ZuriHac: kudzidzira hurongwa hwekuita

Mufananidzo kubva Twitter ZuriHac

Chirongwa chacho chiri nyore kwazvo: iwe unofanirwa kunyora zvishoma zvikumbiro nezve purojekiti yako pamberi uye wozvitumira kune vanoronga, vanozoisa ruzivo nezve purojekiti yako pane peji rechiitiko. Uye zvakare, pazuva rekutanga, vanyori vezvirongwa vane masekondi makumi matatu ekutaura muchidimbu kubva pachikuva zvavari kuita uye izvo zvinoda kuitwa. Ipapo vanhu vanofarira vanotsvaga vanyori uye vanobvunza zvakadzama nezve mabasa.

Isu hatisati tava nemapurojekiti edu akavhurika parizvino, asi isu tinoda chaizvo kubatsira kune aripo, saka takanyoresa sevanhu vanogara vachitora chikamu. Mukufamba kwemazuva matatu, takashanda nemapoka maviri evagadziri. Zvakaitika kuti kudzidza kwakabatana kwekodhi uye kutaurirana kwepamoyo kunoita kuti kudyidzana pakati pevanyori veprojekiti nevanopa vape zvakanyanya - paZuriHac takakwanisa kunzwisisa nzvimbo dzaive nyowani kwatiri uye takakwanisa kubatsira zvikwata zviviri zvakasiyana zvachose, kupedzisa basa rimwe mune imwe neimwe. yemapurojekiti.

Pamusoro pekuita kwakakosha, hurukuro dzinoverengeka uye tenzi makirasi akapihwa zvakare kuZuriHac. Tinonyanya kuyeuka hurukuro mbiri. Pakutanga kwavo, Andrey Mokhov kubva kuYunivhesiti yeNewcastle akataura nezve anosarudza anoshanda mafuctors - kirasi yemhando dzinofanirwa kuve dzepakati pakati peanoshanda functors nemamongi. Mune imwe hurukuro, mumwe wevatangi veHaskell, Simon Peyton Jones, akataura nezve maitirwo emhando inference muGHC compiler.

ZuriHac: kudzidzira hurongwa hwekuita

Hurukuro naSimon Peyton Jones. Mufananidzo kubva Twitter ZuriHac

Iwo master makirasi akaitwa panguva yehackathon akakamurwa kuita zvikamu zvitatu zvichienderana nehuwandu hwekudzidziswa kwevatori vechikamu. Mabasa aipihwa vatori vechikamu vakapinda mukuvandudzwa kwemapurojekiti akaiswawo nedanho rekuomerwa. Nharaunda diki asi ine hushamwari yevanoshanda mapurogiramu inogamuchira nemufaro vatsva mumapoka avo. Kuti tinzwisise hurukuro dzaAndrey Mokhov naSimon Peyton Jones, zvisinei, kosi yepurogiramu inoshanda yatakatora kuyunivhesiti yakabatsira zvikuru.

Kunyoreswa kwechiitiko mahara kune vese vanogara vachitora chikamu uye vanyori veprojekiti. Takatumira zvikumbiro zvekutora chikamu mukutanga kwaJune, mushure mezvo takakurumidza kuendeswa kubva kune yakamirira rondedzero kuenda kune yakasimbiswa vatori vechikamu.

Uye zvino tichataura nezve mapurojekiti ari mukuvandudzwa kwatakatora chikamu.

pandoc

pandoc ishanduro yepasirese yezvinyorwa zvinyorwa, kutaura zvazviri, kubva kune chero fomati kuenda kune chero. Semuenzaniso, kubva docx kuenda kupdf, kana kubva kuMarkdown kuenda kuMediaWiki. Munyori waro, John MacFarlane, purofesa wehuzivi paYunivhesiti yeCalifornia, Berkeley. Kazhinji, Pandoc ane mukurumbira, uye dzimwe shamwari dzedu dzakashamisika padzakaziva kuti Pandoc yakanyorwa muHaskell.

ZuriHac: kudzidzira hurongwa hwekuita

Rondedzero yemafomati emagwaro anotsigirwa nePandoc. Kune zvakare girafu yakazara pane saiti, asi mufananidzo uyu haukodzere muchinyorwa.

Ehe, Pandoc haipe kutendeuka kwakananga kune ese mafomati maviri. Kuti utsigire shanduko dzakasiyana-siyana dzakadai, chigadziro chekuvaka chinoshandiswa chinoshandiswa: kutanga, gwaro rose rinoshandurirwa muchimiro chakakosha chemukati chepakati, uyezve gwaro mune imwe nzira inogadzirwa kubva kune inomiririra yemukati. Vagadziri vanodana chinomiririra chemukati "AST", inomiririra Abstract Syntax Tree, kana abstract syntax tree. Iwe unogona kutarisa inomiririra yepakati zviri nyore: zvese zvaunoda kuti uite kuseta iyo inobuda fomati ku "yekuzvarwa"

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

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

Vaverengi vakashanda naHaskell zvishoma zvishoma vanogona kutofunga kubva pamuenzaniso mudiki uyu kuti Pandoc yakanyorwa muHaskell: kuburitsa kwemurairo uyu tambo inomiririra yemukati maPandoc, akagadzirwa mumufananidzo wekuti inowanzoitwa sei. muHaskell.semuenzaniso, muraibhurari yakajairika.

Saka, pano iwe unogona kuona kuti iyo yemukati inomiririra chimiro chinodzokororwa, mune imwe neimwe yemukati node ine rondedzero. Semuyenzaniso, padanho repamusoro pane runyorwa rwechimwe chinhu - musoro wedanho rekutanga une hunhu "hello-world",[],[]. Chakavanzika mukati memusoro uyu pane runyorwa rwetambo "Mhoro," inoteverwa nenzvimbo uye tambo "Nyika!".

Sezvauri kuona, iyo yemukati inomiririra haina kunyanya kusiyana neHTML. Imuti umo node yega yega yemukati inopa rumwe ruzivo nezve mafomati evazukuru vayo, uye mashizha ane izvo chaizvo zviri mugwaro.

Kana tikadzika kusvika padanho rekuita, iyo data yerudzi rwegwaro rese inotsanangurwa seizvi:

data Pandoc = Pandoc Meta [Block]

Pano Block ndiyo chaiyo vertices yemukati yataurwa pamusoro, uye Meta ndeye metainformation nezve gwaro, senge zita, zuva rekugadzira, vanyori - izvi zvakasiyana kune akasiyana mafomati, uye Pandoc anoedza, kana zvichibvira, kuchengetedza ruzivo rwakadaro kana uchishandura kubva kufomati kuenda format.

Vanenge vese vavaki veBlock type - semuenzaniso, Header kana Para (ndima) - tora hunhu uye runyorwa rwepazasi-level vertices senharo - Inline, semutemo. Semuenzaniso, Space kana Str vagadziri veInline type, uye iyo HTML tag inoshanduka kuita yayo yakakosha Inline. Isu hationi chikonzero chekupa tsananguro yakazara yemhando idzi, asi cherechedza kuti inogona kuwanikwa pano pano.

Sezvineiwo, mhando Pandoc is monoid. Izvi zvinoreva kuti pane imwe mhando yegwaro risina chinhu, uye kuti magwaro anogona kuiswa pamwechete. Izvi zviri nyore kushandisa kana uchinyora Vaverengi - unogona kutyora gwaro kuita zvikamu uchishandisa zvine musoro, tsanangura chimwe nechimwe zvakasiyana, wozoisa zvese pamwechete mugwaro rimwe. Muchiitiko ichi, metainformation ichaunganidzwa kubva kumativi ese egwaro kamwechete.

Paunenge uchishandura, taura, kubva kuLaTeX kuenda kuHTML, kutanga yakakosha module inonzi LaTeXReader inoshandura gwaro rekuisa kuita AST, uye imwe module inonzi HTMLWriter inoshandura iyo AST kuita HTML. Kutenda kune iyi dhizaini, hapana chikonzero chekunyora nhamba yequadratic yeshanduko - zvakakwana kunyora Reader neMunyori kune yega yega fomati nyowani, uye ese anokwanisika mapeji ekushandurwa anozongotsigirwa otomatiki.

Zviri pachena kuti chivakwa chakadaro chinewo zvipingamupinyi, zvakafanotaurwa kwenguva refu nenyanzvi mumunda wekugadzira software. Chinonyanya kukosha imari yekuita shanduko kumuti we syntax. Kana shanduko yacho yakakomba zvakakwana, uchafanirwa kushandura kodhi muVaverengi neVanyori vese. Semuenzaniso, rimwe rematambudziko akatarisana nevagadziri vePandoc riri kutsigira mafomati akaomarara etafura. Iye zvino Pandoc inogona kungogadzira matafura akareruka, ane musoro, makoramu uye kukosha musero rega rega. Semuenzaniso, iyo colspan hunhu muHTML inongo furatirwa. Chimwe chezvikonzero zvemaitiro aya kushaikwa kwechirongwa chakabatana chekumiririra matafura mune ese kana angangoita akawanda mafomati - nekudaro, hazvizivikanwe kuti matafura anofanirwa kuchengetwa muchimiro chemukati. Asi kunyangwe mushure mekusarudza imwe maonero, iwe uchafanirwa kushandura zvachose Vaverengi neVanyori vanotsigira kushanda nematafura.

Mutauro weHaskell wakasarudzwa kwete nekuda kwerudo rukuru rwevanyori rwekuita hurongwa. Haskell inozivikanwa nehukuru hwayo hwekugadzirisa zvinyorwa. Mumwe muenzaniso iraibhurari pasec iraibhurari inoshingairira kushandisa pfungwa dzeanoshanda programming - monoids, monads, applicative uye mamwe ma functors - kunyora anopokana parsers. Iyo yakazara simba reParsec inogona kuoneka mukati muenzaniso kubva kuHaskellWiki, uko muparidzi akazara wemutauro wakapfava wechirongwa unopatsanurwa. Ehe, Parsec inoshandiswawo muPandoc.

Yakatsanangurwa muchidimbu, mamonads anoshandiswa kuteedzana parsing, kana chinhu chimwe chichiuya pekutanga, uyezve chimwe. Somuenzaniso, mumuenzaniso uyu:

whileParser :: Parser Stmt
whileParser = whiteSpace >> statement

Kutanga iwe unofanirwa kuverenga nzvimbo, uye ipapo chirevo - icho chinewo Parser Stmt mhando.

Alternative functors anoshandiswa kudzoreredza kana parsing ikatadza. Semuyenzaniso,

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

Izvi zvinoreva kuti ungada kuedza kuverenga chirevo mumabhuraketi, kana kuedza kuverenga zvirevo zvakati wandei zvichitevedzana.

Applicative functors anoshandiswa zvakanyanya semapfupi emamonads. Semuenzaniso, rega basa retok riverenge chimwe chiratidzo (iri ibasa chairo kubva kuLaTeXReader). Ngatitarisei musanganiswa uyu

const <$> tok <*> tok

Ichaverenga zviratidzo zviviri mumutsara uye kudzorera yekutanga.

Kune ese aya makirasi, Haskell ine vakanaka vekufananidzira vanoshanda, izvo zvinoita kuti Reader programming iite senge ASCII art. Ingoyemura iyi kodhi inoshamisa.

Mabasa edu aienderana neLaTeXReader. Basa raVasily raive rekutsigira mbox uye hbox mirairo, inobatsira kunyora mapakeji muLaTeX. Elizabeth aive nebasa rekutsigira epigraph command, iyo inokutendera iwe kugadzira epigraphs muLaTeX zvinyorwa.

Hatrace

UNIX-senge masisitimu anoshanda anowanzo shandisa iyo ptrace system call. Inobatsira mukugadzirisa uye kutevedzera nharaunda dzechirongwa, zvichikubvumidza kuti uteedzere masisitimu mafoni anoitwa nechirongwa. Semuenzaniso, iyo inobatsira kwazvo strace utility inoshandisa ptrace mukati.

Hatrace raibhurari inopa chinongedzo chekubata muHaskell. Icho chokwadi ndechekuti ptrace pachayo yakaoma kwazvo uye yakaoma kuishandisa zvakananga, kunyanya kubva mumitauro inoshanda.

Hatrace anomhanya semutsetse pakutanga uye anogamuchira nharo dzakafanana. Iyo inosiyana kubva kune strace mukuti zvakare raibhurari inopa yakapusa interface pane kungoita ptrace.

Nerubatsiro rwehatrace, isu takatobata imwe isingafadzi bug muGHC Haskell compiler - kuurayiwa panguva isiriyo, inoburitsa zvisirizvo mafaera echinhu uye haiadzorere kana yatangwazve. Kunyora nehurongwa hwekufona kwakaita kuti zvikwanise kuburitsa chikanganiso nenzira imwechete, nepo kuuraya kwakangoerekana kwaburitsa kukanganisa mumaawa maviri.

Isu takawedzera masisitimu ekufona maficha kuraibhurari - Elizaveta akawedzera brk, uye Vasily akawedzera mmap. Zvichienderana nemhedzisiro yebasa redu, zvinokwanisika kushandisa zvakapfava uye nemazvo kupokana kweiyi nharembozha kana uchishandisa raibhurari.

Source: www.habr.com

Voeg