ZuriHac: ag cleachtadh ríomhchlárú feidhmiúil

I mí an Mheithimh na bliana seo, i mbaile beag na hEilvéise Rapperswil, ar a dtugtar imeacht ZuriHac. An uair seo thug sé breis agus cúig chéad leannán Haskell le chéile, ó ghlantosaitheoirí go dtí bunaitheoirí na teanga. Cé go dtugann na heagraithe hacathon ar an imeacht seo, ní comhdháil ná haicathon é sa chiall chlasaiceach. Tá a bhformáid éagsúil ó ríomhchláraitheoirí traidisiúnta. D'fhoghlaimíomar faoi ZuriHac trí ádh, ghlacamar páirt ann, agus anois measaimid go bhfuil sé de dhualgas orainn a insint faoi na fionnachtana neamhghnácha!

ZuriHac: ag cleachtadh ríomhchlárú feidhmiúil

maidir linn

D'ullmhaigh beirt mhac léinn 3ú bliana den chlár “Matamaitic Fheidhmeach agus Faisnéisíocht” an t-alt seo ag Ardscoil Eacnamaíochta na hOllscoile Taighde Náisiúnta - St. Petersburg: Vasily Alferov agus Elizaveta Vasilenko. Thosaigh an paisean don bheirt againn maidir le ríomhchlárú feidhmiúil le sraith léachtaí le D. N. Moskvin sa 2ú bliain ar an ollscoil. Faoi láthair tá Vasily ag glacadh páirte i gclár Google Summer of Code, a bhfuil graif ailgéabracha á gcur i bhfeidhm aige i Haskell faoi threoir fhoireann an tionscadail Alga. Chuir Elizaveta na scileanna ríomhchláraithe feidhmiúla a gnóthaíodh i bhfeidhm san obair chúrsa a bhí dírithe ar chur i bhfeidhm an algartam frith-aontaithe le cur i bhfeidhm ina dhiaidh sin i dteoiric cineáil.

Formáid imeachtaí

Is é an spriocghrúpa ná úinéirí tionscadal foinse oscailte, ríomhchláraitheoirí ar mian leo a bheith rannpháirteach ina bhforbairt, taighdeoirí cláir fheidhmiúla, agus daoine atá paiseanta faoi Haskell. I mbliana, bhailigh forbróirí ó níos mó ná caoga tionscadal foinse oscailte Haskell ó gach cearn den domhan ag an ionad - an HSR Hochschule für Technik Rapperswil - chun labhairt faoina gcuid táirgí agus daoine úra a bhfuil suim acu ina bhforbairt a spreagadh.

ZuriHac: ag cleachtadh ríomhchlárú feidhmiúil

Grianghraf ó Twitter ZuriHac

Tá an scéim an-simplí: ní mór duit cúpla togra a scríobh faoi do thionscadal roimh ré agus iad a sheoladh chuig na heagraithe, a phostfaidh faisnéis faoi do thionscadal ar leathanach an imeachta. Ina theannta sin, ar an gcéad lá, tá tríocha soicind ag údair na dtionscadal a insint go han-ghearr ón gcéim cad atá ar siúl acu agus cad is gá a dhéanamh. Ansin lorgaíonn daoine leasmhara na húdair agus fiafraíonn siad go mion faoi na tascanna.

Níl ár dtionscadail oscailte féin againn go fóill, ach ba mhaith linn cur leis na cinn atá ann cheana féin, agus mar sin chláraigh muid mar rannpháirtithe rialta. Thar thréimhse trí lá, d'oibríomar le dhá ghrúpa forbróirí. Tharlaíonn sé go ndéanann staidéar comhpháirteach ar chód agus cumarsáid bheo an-torthúil leis an idirghníomhú idir údair an tionscadail agus na rannpháirtithe - ag ZuriHac bhíomar in ann réimsí a bhí nua dúinn a thuiscint agus bhíomar in ann cabhrú le dhá fhoireann go hiomlán difriúil, ag críochnú tasc amháin i ngach de na tionscadail.

Chomh maith le cleachtas luachmhar, tugadh roinnt léachtaí agus máistir-ranganna freisin ag ZuriHac. Cuimhnímid go háirithe ar dhá léacht. Ag an gcéad cheann acu, labhair Andrey Mokhov ó Ollscoil Newcastle faoi fheidhmeannaigh applicative roghnacha - rang de chineálacha ba chóir a bheith idirmheánach idir feidhmeannaigh applicative agus monads. I léacht eile, labhair duine de bhunaitheoirí Haskell, Simon Peyton Jones, faoi conas a oibríonn tátal cineáil sa tiomsaitheoir GHC.

ZuriHac: ag cleachtadh ríomhchlárú feidhmiúil

Léacht le Simon Peyton Jones. Grianghraf ó Twitter ZuriHac

Roinneadh na máistir-ranganna a reáchtáladh le linn an haicathóin i dtrí chatagóir ag brath ar leibhéal oiliúna na rannpháirtithe. Bhí leibhéal deacrachta ag baint leis na tascanna a cuireadh ar fáil do rannpháirtithe a chuaigh isteach i bhforbairt tionscadal. Cuireann an pobal beag ach cairdiúil de ríomhchláraitheoirí feidhmiúla fáilte mhór roimh núíosaigh isteach ina céimeanna. Chun léachtaí Andrey Mokhov agus Simon Peyton Jones a thuiscint, áfach, bhí an cúrsa ríomhchlárú feidhme a ghlacamar san ollscoil an-úsáideach.

Tá clárú don imeacht saor in aisce do rannpháirtithe rialta agus d’údair an tionscadail araon. Chuireamar isteach iarratais ar rannpháirtíocht go luath i mí an Mheithimh, agus ina dhiaidh sin aistríodh muid go tapa ón liosta feithimh go dtí liosta na rannpháirtithe deimhnithe.

Agus anois beimid ag caint faoi na tionscadail a ghlacamar páirt i bhforbairt.

pandoc

pandoc is tiontaire uilíoch doiciméad téacs é, i ndáiríre, ó fhormáid ar bith go formáid ar bith. Mar shampla, ó docx go pdf, nó ó Markdown go MediaWiki. Is ollamh le fealsúnacht é an t-údar, John MacFarlane, in Ollscoil California, Berkeley. Go ginearálta, tá Pandoc clúiteach go leor, agus bhí iontas ar roinnt dár gcairde nuair a fuair siad amach go raibh Pandoc scríofa i Haskell.

ZuriHac: ag cleachtadh ríomhchlárú feidhmiúil

Liosta de na formáidí doiciméad a dtacaíonn Pandoc leo. Tá graf iomlán ar an suíomh freisin, ach ní luíonn an pictiúr seo isteach san alt.

Ar ndóigh, ní sholáthraíonn Pandoc comhshó díreach do gach péire formáid. Chun tacú le raon leathan claochluithe den sórt sin, úsáidtear réiteach ailtireachta caighdeánach: ar dtús, aistrítear an doiciméad iomlán go léiriú idirmheánach inmheánach speisialta, agus ansin gintear doiciméad i bhformáid dhifriúil ón ionadaíocht inmheánach seo. Glaonn na forbróirí ar an ionadaíocht inmheánach “AST”, a sheasann do Abstract Syntax Tree, nó crann comhréire teibí. Is féidir leat breathnú ar an léiriú idirmheánach go han-simplí: níl le déanamh ach an fhormáid aschuir a shocrú go “dúchais”

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

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

Is féidir le léitheoirí a d'oibrigh le Haskell beagán ar a laghad glacadh leis cheana féin ón sampla beag seo go bhfuil Pandoc scríofa in Haskell: is léiriú teaghrán é aschur an ordaithe seo ar struchtúir inmheánacha Pandoc, cruthaithe i gcosúlacht an chaoi a ndéantar é de ghnáth. i Haskell mar shampla, sa leabharlann chaighdeánach.

Mar sin, anseo is féidir leat a fheiceáil go bhfuil an ionadaíocht inmheánach struchtúr athchúrsach, i ngach nód inmheánach a bhfuil liosta. Mar shampla, ag an leibhéal uachtarach tá liosta d’eilimint amháin – an ceanntásc céadleibhéil leis na tréithe “hello-world”,[],[]. I bhfolach taobh istigh den cheanntásc seo tá liosta den teaghrán “Dia duit,” agus spás ina dhiaidh agus an teaghrán “World!”.

Mar a fheiceann tú, níl an ionadaíocht inmheánach mórán difriúil ó HTML. Is crann é ina soláthraíonn gach nód inmheánach roinnt faisnéise maidir le formáidiú a shliocht, agus tá ábhar iarbhír an doiciméid sna duilleoga.

Má théimid síos go dtí an leibhéal cur chun feidhme, sainítear an cineál sonraí don doiciméad iomlán mar seo:

data Pandoc = Pandoc Meta [Block]

Seo Bloc go beacht na rinn inmheánacha a luaitear thuas, agus is é Meta faisnéis mheitibileachta faoin doiciméad, mar theideal, dáta cruthaithe, údair - tá sé seo difriúil le haghaidh formáidí éagsúla, agus déanann Pandoc iarracht, más féidir, faisnéis den sórt sin a chaomhnú agus é á aistriú ó fhormáid go formáid. formáid.

Beagnach gach tógálaí den chineál Bloc - mar shampla, Ceanntásc nó Para (mír) - a ghlacadh tréithe agus liosta de na rinn leibhéal níos ísle mar argóintí - Inlíne, mar riail. Mar shampla, is tógálaithe den chineál Inlíne iad Space or Str, agus casann an chlib HTML ina Inlíne speisialta féin freisin. Ní fheicimid aon phointe chun sainmhíniú iomlán a thabhairt ar na cineálacha seo, ach tabhair faoi deara gur féidir é a fháil anseo anseo.

Suimiúil go leor, is monoid é an cineál Pandoc. Ciallaíonn sé seo go bhfuil cineál éigin de dhoiciméad folamh ann, agus gur féidir doiciméid a chruachadh le chéile. Tá sé seo áisiúil le húsáid agus Léitheoirí á scríobh - is féidir leat doiciméad a bhriseadh ina gcodanna ag baint úsáide as loighic treallach, gach ceann a pharsáil ar leithligh, agus ansin gach rud a chur le chéile in aon doiciméad amháin. Sa chás seo, baileofar meiteashonraí ó gach cuid den doiciméad láithreach.

Nuair a aistrítear, abair, ó LaTeX go HTML, ar dtús déanann modúl speisialta ar a dtugtar LaTeXReader an doiciméad ionchuir a thiontú go AST, ansin athraíonn modúl eile ar a dtugtar HTMLWriter an AST go HTML. A bhuíochas leis an ailtireacht seo, ní gá líon cearnach de thiontuithe a scríobh - is leor Léitheoir agus Scríbhneoir a scríobh do gach formáid nua, agus tacófar go huathoibríoch le gach péirí tiontaithe féideartha.

Is léir go bhfuil míbhuntáistí ag baint le hailtireacht den sórt sin freisin, atá tuartha le fada ag saineolaithe i réimse na hailtireachta bogearraí. Is é an ceann is suntasaí ná an costas a bhaineann le hathruithe a dhéanamh ar an gcrann comhréire. Má tá an t-athrú tromchúiseach go leor, beidh ort an cód a athrú i ngach Léitheoir agus Scríbhneoir. Mar shampla, ceann de na dúshláin atá roimh fhorbróirí Pandoc ná tacú le formáidí tábla casta. Anois ní féidir le Pandoc ach táblaí an-simplí a chruthú, le ceanntásc, colúin agus luach i ngach cill. Mar shampla, ní dhéanfar neamhaird ar an tréith colspan in HTML. Ceann de na cúiseanna atá leis an iompar seo ná an easpa scéime aontaithe chun táblaí a léiriú i bhformáidí uile nó ar a laghad go leor - dá réir sin, níl sé soiléir cén fhoirm ba cheart na táblaí a stóráil san ionadaíocht inmheánach. Ach fiú tar éis radharc sonrach a roghnú, beidh ort na Léitheoirí agus na Scríbhneoirí go léir a thacaíonn le hoibriú le táblaí a athrú.

Roghnaíodh an teanga Haskell ní hamháin mar gheall ar ghrá mór na n-údar do ríomhchlárú feidhmiúil. Tá cáil ar Haskell as a chumas próiseála téacs fairsing. Sampla amháin is ea an leabharlann parsec is leabharlann é a úsáideann go gníomhach na coincheapa a bhaineann le ríomhchlárú feidhmiúil - monaidí, monaidí, feidhmitheoirí feidhmithe agus malartacha - chun parsálaithe treallach a scríobh. Is féidir cumhacht iomlán Parsec a fheiceáil i sampla ó HaskellWiki, áit a ndéantar parsálaí iomlán de theanga ríomhchlárúcháin shimplí riachtanach a pharsáil. Ar ndóigh, úsáidtear Parsec go gníomhach i Pandoc freisin.

Cur síos gairid air, úsáidtear monaidí le haghaidh parsáil seicheamhach, nuair a thagann rud amháin ar dtús, agus ansin rud eile. Mar shampla, sa sampla seo:

whileParser :: Parser Stmt
whileParser = whiteSpace >> statement

Ar dtús is gá duit an spás a chomhaireamh, agus ansin an ráiteas - a bhfuil an cineál Parser Stmt aige freisin.

Baintear úsáid as feidhmitheoirí malartacha chun rolladh siar má theipeann ar pharsáil. Mar shampla,

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

Ciallaíonn sé seo go gcaithfidh tú iarracht a dhéanamh an ráiteas idir lúibíní a léamh, nó iarracht a dhéanamh roinnt ráiteas a léamh go seicheamhach.

Úsáidtear feidhmitheoirí infheidhme go príomha mar aicearraí do monads. Mar shampla, lig don fheidhm chomhartha roinnt comharthaí a léamh (is feidhm fíor é seo ó LaTeXReader). Breathnaímid ar an meascán seo

const <$> tok <*> tok

Léifidh sé dhá chomhartha i ndiaidh a chéile agus tabharfaidh sé an chéad cheann ar ais.

I gcás na ranganna seo go léir, tá oibreoirí siombalacha áille ag Haskell, rud a fhágann go bhfuil cuma ealaín ASCII ar ríomhchlárú Reader. Just a admire an cód iontach seo.

Bhain ár dtascanna le LaTeXReader. Ba é tasc Vasily ná tacú leis na horduithe mbox agus hbox, úsáideach chun pacáistí a scríobh i LaTeX. Bhí Elizabeth freagrach as tacú leis an ordú epigraph, a ligeann duit epigraphs a chruthú i ndoiciméid LaTeX.

Hatrace

Is minic a chuireann córais oibriúcháin cosúil le UNIX an glao córas ptrace i bhfeidhm. Tá sé úsáideach chun timpeallachtaí cláir a dhífhabhtú agus a insamhladh, rud a ligeann duit na glaonna córais a dhéanann an clár a rianú. Mar shampla, úsáideann an áirgiúlacht strace an-úsáideach ptrace go hinmheánach.

Is leabharlann í Hatrace a sholáthraíonn comhéadan chun ptrace in Haskell. Is é fírinne an scéil go bhfuil ptrace féin an-sofaisticiúil agus go bhfuil sé deacair go leor é a úsáid go díreach, go háirithe ó theangacha feidhmiúla.

Ritheann Hatrace cosúil le strace ag am tosaithe agus glacann sé le hargóintí comhchosúla. Ní hionann é agus strace sa mhéid is gur leabharlann í freisin a sholáthraíonn comhéadan níos simplí ná díreach ptrace.

Le cabhair ó hatrace, tá fabht míthaitneamhach amháin gafa againn cheana féin sa tiomsaitheoir GHC Haskell - á maraíodh ag an nóiméad mícheart, gineann sé comhaid oibiachta mícheart agus ní recompile iad nuair a atosaithe. Trí ghlaonna córais a scríobh bhíothas in ann an earráid a atáirgeadh go hiontaofa in aon rith amháin, agus rinne marú randamach an earráid a atáirgeadh i thart ar dhá uair an chloig.

Chuireamar comhéadain glaonna córais leis an leabharlann - chuir Elizaveta brk leis, agus chuir Vasily mmap leis. Bunaithe ar thorthaí ár gcuid oibre, is féidir úsáid níos simplí agus níos cruinne a bhaint as argóintí na nglaonna córais seo agus an leabharlann in úsáid.

Foinse: will.com

Add a comment