ZuriHac: aiwatar da shirye-shiryen aiki

A watan Yuni na wannan shekara, a cikin ƙaramin garin Rapperswil na Switzerland, wani taron da ake kira ZuriHac. A wannan karon ya tattaro masoya Haskell sama da dari biyar, tun daga na farko har zuwa wadanda suka kafa harshen. Kodayake masu shirya wannan taron suna kiran wannan taron da hackathon, ba taro ba ne ko hackathon a ma'anar gargajiya. Tsarinsa ya bambanta da masu shirye-shiryen gargajiya. Mun koyi game da ZuriHac ta hanyar sa'a, mun shiga ciki, kuma yanzu muna la'akari da aikinmu ne mu ba da labarin abin da ba a saba gani ba!

ZuriHac: aiwatar da shirye-shiryen aiki

О нас

An shirya wannan labarin ta biyu dalibai na shekara 3rd na shirin "Aikace-aikacen Lissafi da Informatics" a Jami'ar Bincike ta Jami'ar Cibiyar Harkokin Tattalin Arziki ta Kasa - St. Petersburg: Vasily Alferov da Elizaveta Vasilenko. Sha'awar shirye-shirye na aiki ga mu biyu ya fara ne da jerin laccoci na D. N. Moskvin a shekara ta 2 na jami'a. A halin yanzu Vasily yana shiga cikin shirin Google Summer of Code, wanda a ciki yake aiwatar da zane-zane na algebra a Haskell a ƙarƙashin jagorancin ƙungiyar aikin. Alga. Elizaveta ta yi amfani da ƙwarewar shirye-shiryen aiki da aka samu a cikin aikin da aka keɓe don aiwatar da ƙa'idar haɗin kai tare da aikace-aikacen gaba a cikin ka'idar nau'in.

Tsarin taron

Masu sauraron da aka yi niyya sune masu buɗaɗɗen ayyukan, masu shirye-shirye waɗanda ke son shiga cikin ci gaban su, masu binciken shirye-shirye masu aiki, da mutane kawai masu sha'awar Haskell. A wannan shekara, a wurin taron, HSR Hochschule für Technik Rapperswil, masu haɓakawa daga ayyukan Haskell sama da hamsin masu buɗewa daga ko'ina cikin duniya sun taru don yin magana game da samfuran su kuma samun sabbin mutane masu sha'awar ci gaban su.

ZuriHac: aiwatar da shirye-shiryen aiki

Hoto daga Twitter ZuriHac

Makircin yana da sauƙi: kuna buƙatar rubuta wasu shawarwari game da aikin ku a gaba kuma aika su zuwa masu shiryawa, waɗanda za su buga bayanai game da aikin ku a shafin taron. Bugu da ƙari, a rana ta farko, marubutan ayyukan suna da daƙiƙa talatin don yin taƙaice daga mataki abin da suke yi da abin da ya kamata a yi. Sa'an nan masu sha'awar suna neman marubuta kuma suyi tambaya dalla-dalla game da ayyukan.

Ba mu da namu buɗaɗɗen ayyukan tukuna, amma da gaske muna son ba da gudummawa ga waɗanda ke akwai, don haka muka yi rajista a matsayin mahalarta na yau da kullun. A cikin kwanaki uku, mun yi aiki tare da ƙungiyoyi biyu na masu haɓakawa. Ya zama cewa binciken haɗin gwiwa na lamba da sadarwar kai tsaye yana sa hulɗar tsakanin marubutan aikin da masu ba da gudummawa sosai - a ZuriHac mun sami damar fahimtar wuraren da suka kasance sababbi a gare mu kuma mun sami damar taimakawa ƙungiyoyi biyu mabanbanta, kammala ɗawainiya ɗaya a kowane ɗayan. na ayyukan.

Baya ga aiki mai mahimmanci, an kuma bayar da laccoci da manyan darasi a ZuriHac. Musamman muna tunawa da laccoci guda biyu. A farkon su, Andrey Mokhov na Jami'ar Newcastle ya yi magana game da zaɓaɓɓen kayan aikin aikace-aikacen - nau'in nau'ikan nau'ikan da yakamata su zama tsaka-tsaki tsakanin masu amfani da kayan aiki da monads. A wata lacca, daya daga cikin wadanda suka kafa Haskell, Simon Peyton Jones, ya yi magana game da yadda nau'in ƙididdiga ke aiki a cikin GHC compiler.

ZuriHac: aiwatar da shirye-shiryen aiki

Lecture na Simon Peyton Jones. Hoto daga Twitter ZuriHac

An raba darussan masters da aka gudanar a lokacin hackathon zuwa kashi uku dangane da matakin horar da mahalarta. Ayyukan da aka ba wa mahalarta waɗanda suka shiga ci gaban ayyukan an kuma nuna su da matakin wahala. Ƙananan al'umma amma abokantaka na masu shirye-shirye masu aiki suna maraba da sababbin masu shigowa cikin sahu. Don fahimtar laccocin Andrei Mokhov da Simon Peyton Jones, duk da haka, kwas ɗin shirye-shiryen da muka ɗauka a jami'a yana da amfani sosai.

Rijista don taron kyauta ne ga duka mahalarta na yau da kullun da marubutan aikin. Mun gabatar da aikace-aikacen shiga a farkon watan Yuni, bayan haka an canza mu da sauri daga jerin jiran zuwa jerin masu halartar da aka tabbatar.

Kuma yanzu za mu yi magana game da ayyukan ci gaban da muka shiga.

Pandoc

Pandoc shine mai jujjuya takaddun rubutu na duniya, a zahiri, daga kowane tsari zuwa kowane. Misali, daga docx zuwa pdf, ko daga Markdown zuwa MediaWiki. Mawallafinta, John MacFarlane, farfesa ne a fannin falsafa a Jami'ar California, Berkeley. Gabaɗaya, Pandoc ya shahara sosai, kuma wasu abokanmu sun yi mamakin lokacin da suka sami labarin cewa an rubuta Pandoc a Haskell.

ZuriHac: aiwatar da shirye-shiryen aiki

Jerin tsarin daftarin aiki da Pandoc ke goyan bayan. Hakanan akwai cikakken hoto akan rukunin yanar gizon, amma wannan hoton bai dace da labarin ba.

Tabbas, Pandoc baya bayar da jujjuya kai tsaye ga kowane nau'i biyu na tsari. Don tallafawa irin wannan nau'i-nau'i iri-iri, ana amfani da daidaitaccen bayani na tsarin gine-gine: na farko, an fassara dukan takardun zuwa cikin tsaka-tsakin tsaka-tsakin musamman na ciki, sa'an nan kuma an samar da takarda a cikin wani tsari daban-daban daga wannan wakilci na ciki. Masu haɓakawa suna kiran wakilcin cikin gida "AST", wanda ke tsaye ga Bishiyar Tsarin Tsarin Tsarin Mulki, ko m bishiyar syntax. Za ka iya duba matsakaici wakilci sosai sauƙi: duk kana bukatar ka yi shi ne saita fitarwa format to "yan qasar"

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

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

Masu karatu waɗanda suka yi aiki tare da Haskell aƙalla kaɗan za su iya ɗauka daga wannan ƙaramin misali cewa Pandoc an rubuta shi a cikin Haskell: fitowar wannan umarni shine wakilcin kirtani na tsarin ciki na Pandoc, wanda aka ƙirƙira da kamannin yadda ake yin shi galibi. a Haskell.misali, a cikin ma'auni na ɗakin karatu.

Don haka, a nan za ku iya ganin cewa wakilcin ciki shine tsari mai maimaitawa, a cikin kowane kumburi na ciki wanda akwai jerin. Misali, a saman matakin akwai jerin abubuwa guda ɗaya - taken matakin farko tare da halayen “sannu-duniya”,[],[]. Boye a cikin wannan taken shine jerin kirtani "Sannu," sannan sarari da kirtani "Duniya!".

Kamar yadda kake gani, wakilcin ciki bai bambanta da HTML ba. Itace wacce kowace kumburi ta ciki ta ba da wasu bayanai game da tsarin zuriyarta, kuma ganyen na ɗauke da ainihin abin da ke cikin takardar.

Idan muka gangara zuwa matakin aiwatarwa, an bayyana nau'in bayanan gabaɗayan takaddar kamar haka:

data Pandoc = Pandoc Meta [Block]

Anan Block shine ainihin madaidaicin ciki da aka ambata a sama, kuma Meta shine metain bayanai game da takaddar, kamar take, kwanan wata ƙirƙira, marubuta - wannan ya bambanta don tsari daban-daban, kuma Pandoc yayi ƙoƙari, idan zai yiwu, don adana irin waɗannan bayanan lokacin fassara daga tsari zuwa tsari.

Kusan duk masu ginin nau'in Block - alal misali, Header ko Para (sakin layi) - suna ɗaukar sifofi da jerin ƙananan ƙananan matakan a matsayin jayayya - Inline, a matsayin mai mulki. Misali, Space ko Str sune masu gina nau'in Inline, kuma alamar HTML kuma tana juya ta zama ta musamman Inline. Ba mu ga wani ma'ana ba wajen samar da cikakkiyar ma'anar waɗannan nau'ikan, amma lura cewa ana iya samunsa a nan a nan.

Abin sha'awa, nau'in Pandoc monoid ne. Wannan yana nufin cewa akwai wani nau'in takaddun fanko, kuma ana iya tattara takaddun tare. Wannan ya dace don amfani lokacin rubuta Masu Karatu - zaku iya karya takarda zuwa sassa ta amfani da dabaru na sabani, raba kowane daban, sannan ku haɗa komai tare cikin takarda ɗaya. A wannan yanayin, za a tattara bayanan metain daga duk sassan daftarin aiki lokaci guda.

Lokacin juyawa, ka ce, daga LaTeX zuwa HTML, da farko wani nau'i na musamman mai suna LaTeXReader yana canza takardun shigarwa zuwa AST, sannan wani nau'i mai suna HTMLWriter yana canza AST zuwa HTML. Godiya ga wannan gine-ginen, babu buƙatar rubuta adadin juzu'i na juzu'i - ya isa rubuta Mai karatu da Marubuci ga kowane sabon tsari, kuma duk nau'i-nau'i na tuba za a tallafa musu ta atomatik.

A bayyane yake cewa irin wannan gine-ginen ma yana da nasa kura-kurai, wanda kwararru a fannin gine-ginen manhajoji suka dade suna hasashensu. Mafi mahimmanci shine farashin yin canje-canje ga bishiyar syntax. Idan canjin ya yi tsanani sosai, dole ne ku canza lambar a duk Masu Karatu da Marubuta. Misali, ɗayan ƙalubalen da ke fuskantar masu haɓaka Pandoc shine tallafawa tsarin tebur mai sarƙaƙƙiya. Yanzu Pandoc na iya ƙirƙirar tebur masu sauƙi kawai, tare da kan kai, ginshiƙai da ƙima a kowane tantanin halitta. Misali, sifa colspan a cikin HTML kawai za a yi watsi da ita. Ɗaya daga cikin dalilan da ke haifar da wannan hali shine rashin tsarin haɗin kai don wakiltar tebur a cikin duka ko aƙalla nau'i-nau'i masu yawa - saboda haka, ba a sani ba a cikin wane nau'i ne ya kamata a adana tebur a cikin wakilcin ciki. Amma ko da bayan zaɓar takamaiman ra'ayi, kuna buƙatar canza gaba ɗaya duk Masu Karatu da Marubuta waɗanda ke goyan bayan aiki tare da tebur.

An zaɓi harshen Haskell ba kawai saboda ƙaunar da marubutan ke yi don shirye-shirye masu aiki ba. Haskell an san shi da faffadan iya sarrafa rubutu. Misali ɗaya shine ɗakin karatu fassarar Laburare ne wanda ke amfani da rayayye na dabarun shirye-shiryen aiki - monoids, monads, applicative da madadin ma'aikata - don rubuta fassarori na sabani. Ana iya ganin cikakken ikon Parsec a ciki misali daga HaskellWiki, inda ake tantance cikakkiyar fassarar harshe mai sauƙi na dole. Tabbas, ana kuma amfani da Parsec sosai a cikin Pandoc.

A taƙaice, ana amfani da monads don tantancewa, lokacin da abu ɗaya ya fara, sannan wani. Misali, a cikin wannan misali:

whileParser :: Parser Stmt
whileParser = whiteSpace >> statement

Da farko kana buƙatar kirga sararin samaniya, sannan kuma bayanin - wanda kuma yana da nau'in Parser Stmt.

Ana amfani da madadin kayan aikin don jujjuyawa idan an gaza tantancewa. Misali,

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

Yana nufin cewa ko dai kuna buƙatar ƙoƙarin karanta bayanin a maƙallan, ko ƙoƙarin karanta bayanai da yawa a jere.

Ana amfani da aikace-aikacen aikace-aikacen da farko azaman gajerun hanyoyi don monads. Misali, bari aikin tok ya karanta wasu alamun (wannan aikin gaske ne daga LaTeXReader). Mu kalli wannan hadin

const <$> tok <*> tok

Zai karanta alamomi biyu a jere kuma zai dawo da na farko.

Ga duk waɗannan azuzuwan, Haskell yana da kyawawan masu aiki na alama, wanda ke sa shirye-shiryen Reader yayi kama da fasahar ASCII. Kawai sha'awar wannan ban mamaki code.

Ayyukanmu suna da alaƙa da LaTeXReader. Ayyukan Vasily shine tallafawa umarnin mbox da hbox, masu amfani don rubuta fakiti a cikin LaTeX. Elizabeth ce ke da alhakin tallafawa umarnin epigraph, wanda ke ba ku damar ƙirƙira juzu'i a cikin takaddun LaTeX.

Hatrace

Tsarukan aiki kamar UNIX galibi suna aiwatar da kiran tsarin ptrace. Yana da amfani wajen gyara kurakurai da kwaikwaya mahallin shirye-shirye, yana ba ku damar gano kiran tsarin da shirin ke yi. Alal misali, mai amfani mai amfani mai amfani yana amfani da ptrace a ciki.

Hatrace ɗakin karatu ne wanda ke ba da hanyar sadarwa don ganowa a cikin Haskell. Gaskiyar ita ce, ptrace kanta tana da ƙwarewa sosai kuma yana da wahala a yi amfani da shi kai tsaye, musamman daga harsunan aiki.

Hatrace yana gudana kamar layi a farawa kuma yana karɓar muhawara iri ɗaya. Ya bambanta da strace domin shi ma ɗakin karatu ne wanda ke ba da sauƙi mai sauƙi fiye da kawai ptrace.

Tare da taimakon ƙiyayya, mun riga mun kama bug guda ɗaya mara daɗi a cikin mai tarawa GHC Haskell - ana kashe shi a lokacin da ba daidai ba, yana haifar da fayilolin abu da ba daidai ba kuma baya sake tattara su lokacin da aka sake farawa. Rubuce-rubucen ta hanyar kiran tsarin ya ba da damar a dogara ga sake haifar da kuskuren a cikin gudu ɗaya, yayin da kisa bazuwar ya sake haifar da kuskuren cikin kimanin sa'o'i biyu.

Mun ƙara tsarin kiran tsarin zuwa ɗakin karatu - Elizaveta ta ƙara brk, kuma Vasily ta ƙara mmap. Dangane da sakamakon aikinmu, yana yiwuwa a sauƙaƙe da daidai amfani da muhawarar waɗannan kiran tsarin lokacin amfani da ɗakin karatu.

source: www.habr.com

Add a comment