15 april, 2018

Vad läser en robot?

En robot gör naturligtvis inte något på egen hand, utan får sina instruktioner från två källor.

  1. En specifikation av vad som ska utföras som är skriven i ett format som är läsbart av både människor och roboten. Det formatet använder en teknik som kallas DSL, eller domänspecifika språk.
  2. När roboten sedan ska producera kod utifrån specifikationen så använder den ett antal mallar, antingen fasta eller programmerade.

Specifikationen är nyckeln

DSL är helt enkelt ett sätt att beskriva innehållet i din applikation eller programvara på en högre och mer abstrakt nivå.  Med hjälp av den beskrivningen och en mall så genereras sedan det mesta av programkoden automatiskt. Det betyder att mängden kod som behöver skrivas minskar kraftigt, vilket i sin tur ger,

  • Högre produktivitet
  • Färre buggar

Hur stor andel av koden som kan genereras helt och hållet från en specifikation i DSL varierar kraftigt från fall till fall, beroende på vilken typ av applikation det gäller. Men, en reducering av totala antalet skrivna kodrader till en fjärdedel är inte ovanlig.

Vad skiljer DSL från andra programmeringsspråk?

Man brukar skilja mellan två olika typer av programmeringsspråk,

  1. Domänspecifika, DSL (Domain Specific Language)
  2. Generella, GPL (General Purpose Language)

I verkligheten så är det mer en flytande skala. Här är några exempel.

De längst till höger är alla språk som kan användas för att programmera alla typer av applikationer. De är de generella språken, som används av alla.

I mitten finns de som är domänspecifika på sätt och vis, men endast knutna till en specifik teknisk domän. T.ex. HTML som används för att beskriva dokument på webben.

De språk som tar konceptet till sin spets är de på vänstra sidan. Här kan man inte hitta några färdiga språk, utan det som bestämmer syntax och innehåll är ditt speciella problemområde, din domän. Det som gör dessa så effektiva är just det att de är specialanpassade till din verklighet och ditt problemområde.

DSL syntax

Beskrivningen måste vara syntaktiskt och semantiskt specificerad i ett nytt, kompakt programmeringsspråk som skapas för ett specifikt och avgränsat område, domänen, därav namnet domänspecifikt programmeringsspråk.

Av praktiska skäl brukar man inte göra endast ett DSL för hela applikationen, utan dela upp problemet i mindre och mer lätthanterliga områden, vilket ger en svit av mindre, specialanpassade och samverkande DSL.

Mallar, templates

Vad blir då slutresultatet när jag skriver program definierade i mitt specialanpassade DSL? Jo, helt enkelt vanlig kod i det generella programmeringsspråk som ni normalt använder just nu. Den kan läsas och användas som vilken egenskriven kod som helst, med är genererad från definitioner i ditt DSL.

Med hjälp av mallar och en kodgenerator så drar roboten nytta av det faktum att en stor del av kod i en applikation följer fasta mönster. I stället för att behöva skriva varje program själva, så genereras de i stället.

De filer som typiskt genereras från ett DSL är grundläggande kod, som interface, deklarationer, egenskaper och viss logik. Det använder man sedan antingen som basklasser i objektorienterade språk som t.ex java, eller som biblioteksrutiner. Den egentliga affärslogiken startar på en högre nivå och utvecklingen går snabbare och enklare.