Líkt og vonandi margir sem mig þekkja vita, þá hef ég verið að vinna að mastersverkefni undanfarna mánuði. Fáir vita þó nákvæmlega hvað það snýst um. Þessi færsla er tilraun til þess að hafa það aðeins meira á hreinu.
Í fyrstu smá forsaga:
Ég lærði nokkuð um þýðendur, smíði forritunarmála og notkun umdæmismála (mín þýðing af domain specific language) til að búa til forrit þegar ég var úti í SDU. Þegar ég kom heim til Íslands í eitt skiptið þá talaði ég við Kristján varðandi mastersverkefni og leiddi það til þess að ég ræddi við CCP.
CCP höfðu gert spilaleik kallaðan Eve the card game sem þeim langaði að fá á tölvutækt form. Datt mér þá í hug að nota umdæmismál til að lýsa leiknum og út frá lýsingu einni saman búa til keyranleg tilvik af leiknum í tölvu. Ætlunin var að CCP myndi láta mig fá forritara til aðstoðar svo ég taldi þetta allveg geranlegt.
Eitt leyddi af öðru og samskipti við CCP urðu þess eðlis að ég ákvað að byrja á að gera spilaleik af öðrum meiði til að byrja með, og nota svo þá vinnu til að gera Eve the card game seinna meir. Sá spilaleikur sem varð fyrir valinu var Póker.
Nú er kannski kominn tími á rannsóknarspurninguna:
Hvert er hlutfall fyrirhafnar milli þess að gera ákveðna hugbúnaðarlausn og þess að búa til umdæmismál fyrir þá hugbúnaðarlausn, sem svo má nota til þess að búa sjálfkrafa til sömu hugbúnaðarlausn og svipaðar hugbúnaðarlausnir.
Athugið, að vanalega eru öll dæmi um umdæmislausnir sértækar á tæknilegu sviði, þ.e.a.s, umdæmismál sem auðveldar það að búa til gagnasöfn, umdæmismál sem auðveldar það að búa til viðmót, o.s.fv. Það eru mun færri dæmi um umdæmismál sem hjálpar til við að gera lausn sem krefst viðmóts, gagnvirkni, regluverks, o.s.fv.
Það kom svo á daginn að það að forrita Póker rétt, með gagnvirkni, grafísku viðmóti, spilareglum og öllu heila var töluverð vinna. Í dag hef ég sæmilega kláraða lausn af því vandamáli útfærða í C#. Þetta hefur tekið mikinn tíma. Ég er loksins að komast á skref 2 sem er það að búa til umdæmismál út frá því sem ég hef forritað. Kóðinn sem ég hef á bakvið pókerinn slagar í kringum 1500 línur og þó hef ég endurskrifað þann kóða nokkrum sinnum og notað bestu tól til þess að gera hann af sem mestum gæðum.
Það hefur farið nokkur tími í að skoða lausnir sem hjálpa til við að búa til umdæmismál og varpa því máli svo yfir í kóða. Þær helstu eru
Xtext og openArchitectureWare,
ANTLR og stringTemplate,
DSL Tools,
Oslo og
IronyÉg hef enn ekki tekið endanlega ákvörðun hvaða tól ég ætla að nota, en þó er ég farinn að hallast að AntLR og StringTemplate þar sem þetta er lang þroskaðasta og hreinasta aðferðin. Oslo er í betu, DSL tools er grafískt og viðbjóðslegt og oAW er hreinlega of flókið, fyrirferðamikið og svo er það að leysast upp í undirverkefni innan Eclipse. Irony er reyndar lítið og töff, en mögulega of háð c#.
Það skal athugast að ég ætla mér að búa til mál sem er óháð keyrsluútfærslu, þ.e.a.s, ef ég skilgreini póker í mínu máli, þá vil ég geta varpað því í aðrar útfærslur en bara c# útfærsluna sem ég á uppkast að. Þessvegna er ég að gera það sem kallast á ensku "External textual DSL", en umdæmismál má líka hafa innbyggð í hugbúnaðarlausn, en þá er það vanalega túlkað í keyrslu þeirrar lausnar.
Þau sem gátu skilið þessa bloggfærslu hafa þá núna getað glöggvað aðeins inn í minn skrítna heim og skilja þá aðeins betur hvað ég er að skoða í mínu mastersverkefni.