– Målet er at Gren skal være et programmeringsspråk der det er veldig lett å forutse hva koden du skriver ender opp med å faktisk gjøre, sier Robin Heggelund Hansen til kode24.
Ikke hørt om Gren, sier du? Det hadde ikke vi heller. Ikke før vi snakket med Heggelund Hansen, som til daglig jobber som systemutvikler i Kodemaker. Han har lang fartstid som utvikler, og har vært med på å utvikle standardbibiblioteket i programmeringsspråket Elm.
Og som om ikke det er nok, har han altså laget et nytt programmeringsspråk: Gren.
Slik ser Hello World ut i Gren:
module Main exposing (main)
import Html
main =
Html.text "Hello, world!"
Etter kompilering får du en index.html-fil som viser "Hello, world!" på skjermen. Men som vi skal se, så er det til backend-utvikling at Heggelund Hansen ser for seg at Gren vil være spesielt nyttig.
«Gjør du språket så lite som mulig, er det lettere å huske alle reglene i hodet.»
Funksjonell programmering
Gren er i likhet med Elm et sterkt statisk typet og funksjonelt programmeringsspråk. Det innebærer blant annet at du har "pure functions" som alltid returnerer det samme resultatet hvis du kaller funksjonen med de samme argumentene. Funksjonene skal heller ikke skape sideeffekter. Og i Gren eller Elm har du heller ikke mutasjoner eller "exceptions".
Programmeringsspråket Gren startet som en fork av Elm for å komme raskt i gang med utviklingen. Målet med Gren har ifølge Heggelund Hansen vært å lage et språk som skal gjøre det enklere å skrive kode som ikke gjør noe annet enn det du forventer.
Han forteller at han er tilhenger av å gjøre ting enkelt. Det betyr at det helst ikke skal være mulig å gjøre det samme på mange forskjellige måter, slik det ofte er i andre programmeringsspråk.
– Det handler om å fjerne muligheter. Vi prøver å unngå overlapp av "features". Gjør du språket så lite som mulig, er det lettere å huske alle reglene i hodet, sier Heggelund Hansen.
Også for backend
Selv om han nå lager et nytt programmeringsspråk, har han ingen planer om å slutte å bruke Elm – som han som nevnt også bidrar med utviklingen til.
– Jeg er veldig glad i Elm, og skulle jeg brukt noe mange bruker React til i dag, så ville jeg i stedet brukt Elm. Det sparer du mye tid på, sier Heggelund Hansen.
Han mener den største ulempen med Elm er at det ikke er fokus på noe annet enn frontendutvikling. Som fullstackutvikler ville han veldig gjerne ha alle Elm-fordelene også i backend, og det var mye av grunnen til at han begynte å utvikle Gren.
– Den største forskjellen mellom Elm og Gren er at du i Gren kan skrive en ren backend-applikasjon. Du kan for eksempel lage et kommandolinjeverktøy, sier Heggelund Hansen.
Han forklarer videre at alt du kan gjøre i Elm, kan du også gjøre i Gren. Men mens Elm kompilerer til JavaScript, støtter Gren også Node.js.
– Elm blir til JavaScript når du kompilerer, men Elm og Gren er veldig annerledes. Du kan ikke kalle JavaScript direkte, og JavaScript kan ikke kalle gren – du må via et API-lag.
Lanserer ny versjon
Heggelund Hansen forteller at han får hjelp av andre bidragsytere til å utvikle Gren, og at han som småbarnsfar er avhengig av denne hjelpen for å få tiden til å strekke til.
– Vi har spikret hvordan Gren 1.0 skal se ut. Elm og Gren vil sakte, men sikkert divergere mer og mer, selv om de ligner på hverandre nå.
Versjon 0.4 av Gren skal etter planen lanseres i dag, mandag 24. juni, men det gjenstår ennå mye arbeid før man kommer helt til versjon 1.0. Hovedprosjektet nå er å skrive om kompilatoren som i dag er skrevet i Haskell.
– Nå skal vi skrive om Gren fra Haskell til Gren. Når jeg lager Gren vil jeg skrive Gren-kode, ikke Haskell. Fordelen da er at andre ikke trenger å kunne Haskell for å bidra til Gren.
– For de som har lyst til å prøve Gren, hva er det de kan lage med språket?
– Hovedgrunnen til å bruke Gren i dag er for å lage kommandolinjeverktøy og servere i et språk som er veldig typesikkert og der det er lett å forutse ting. Jeg anbefaler folk å bare prøve det. Kan du Elm fra før, er det ganske lett.
Heggelund Hansen hadde på lørdag en gjennomgang av hva som er nytt i Gren 0.4, som du kan se her: