programmeringsspråk

Flix: Med integrert logikk skal nytt språk fra Aarhus gjøre programmererens liv lettere

JVM-språket Flix fra Aarhus Universitet i Danmark gir mulighet for smart og tidsbesparende logikk, med verdens mest avanserte kompilator i ryggen, mener folkene bak. Og det kan kode i Visual Studio Code.

Eksempel på Flix-kode vist i Visual Studio Code.
Eksempel på Flix-kode vist i Visual Studio Code. Skjermbilde: Flix.dev

Danmark er som kjent en supermakt i programmeringsspråk – og kanskje kan et nytt av samme slaget være med på å befeste posisjonen.

Ambisjonene mangler i alle fall ikke for det nye språket Flix, som blant andre himmelstrøk har sitt hjem i smilets by, Aarhus.

Det er ikke et nisjespråk, men tenkt som et generelt programmeringsspråk, som dog har funksjoner som gjør det smart for dagens datatunge anvendelser.

Språket kjøres på Javas virtuelle maskin, også kalt JVM-plattformen, så kjøringen er frakoblet det underliggende operativsystemet. Og det er naturligvis åpen kildekode, slik det hør og bør seg for moderne språk anno 2021.

Egenskaper som ingen andre språk har

Det er ikke bare ren lek. Flix er allerede i bruk ute i verden – som til dataanalyse ved et vannverk i Storbritannia.

– Målet med Flix er å gjøre bedre bruk av datamaskinens ressurser, å hjelpe programmerere med å unngå feil, samt å forbedre utviklingsopplevelsen. Det er ikke bare «varm luft», men er basert på grunnforskning i programmeringsspråk, som er publisert ved toppkonferanser – og som vi ønsker å realisere i et anvendelig, praktisk og brukbart programmeringsspråk, sier Magnus Madsen.

Han er adjunkt ved Aarhus Universitets institutt for datalogi og deltaker i utviklingen av språket. Han mener Flix har egenskaper som ingen andre eksisterende programmeringsspråk har i dag.

Magnus Madsen er adjunkt ved Aarhus Universitet og med på å utvikle det nye språket Flix. Han forteller om sitt personlige engasjement i språket: – Jeg har alltid vært interessert i å skrive elegante og hurtige programmer. Jeg tror min interesse naturlig dreide i retning av programmeringsspråks design. Jeg følte meg også inspirert av andre store danske språkdesignere, som for eksempel Bjarne Stoustrup, Anders Hejlsberg, Mads Torgersen og andre. Foto: Aarhus Universitet
Magnus Madsen er adjunkt ved Aarhus Universitet og med på å utvikle det nye språket Flix. Han forteller om sitt personlige engasjement i språket: – Jeg har alltid vært interessert i å skrive elegante og hurtige programmer. Jeg tror min interesse naturlig dreide i retning av programmeringsspråks design. Jeg følte meg også inspirert av andre store danske språkdesignere, som for eksempel Bjarne Stoustrup, Anders Hejlsberg, Mads Torgersen og andre.

– Flix har et kraftig «type- og effektsystem» som holder nøye styr på hvilke «uttrykk» som kan ha sideeffekter. Det gjør Flix-kompilatoren i stand til å gjøre en langt rekke optimaliseringer som eksisterende kompilatorer ikke er i stand til. Det kan for eksempel være å forenkle beregningene som programmet foretar. Eller å gjøre at deler av programmet kan kjøre parallelt – helt automatisk, sier Madsen.

Flix hører hjemme i familien av funksjonelle språk, og støtter dessuten en form for innebygd logikkprogrammering.

Det betyr at man kan implementere deler av programmet sitt ved bruk av logiske regler. Denne formen for programmering er ofte velegnet til å uttrykke forretningsprosesser, mener Madsen.

Den integrerte logikkprogrammeringen er basert på språket Datalog. Det er så og si storebroren til databasespråket SQL. Det innebærer at alt man kan uttrykke med SQL, også kan uttrykkes med Datalog.

Men Datalog har mer styrke enn SQL. Man kan uttrykke en lang rekke rekursive forespørsler, noe som ikke er mulig med SQL.

Dette kan for eksempel handle om å finne den korteste veien mellom to byer, eller å planlegge en skoleplan. I tillegg kan Datalog kjøres meget effektivt.

def reachable(g: List[(String, Int32, String)], minSpeed: Int): 
 List[(String, String)] =
 let facts = project g into Road; 
 let rules = #{
 Path(x, y) :- Road(x, maxSpeed, y), if maxSpeed >= minSpeed.
 Path(x, z) :- Path(x, y), Road(y, maxSpeed, z), 
 if maxSpeed >= minSpeed.
 };
 query facts, rules select (src, dst) 
 from Path(src, dst) |> Foldable.toList

Et eksempel på Flix med bruk av Datalog, fra prosjektets nettsted. Operatoren :- er kjent fra Prolog og definerer en regel. Linjebrytingen slik i eksempelet over vises, er ikke nødvendigvis i overensstemmelse med språkets syntaks.

Hovedstrømsspråk som for eksempel C# kan også jobbe med logikk og utsagn, via LINQ, men man kan utrette mer med Datalog, mener Madsen.

– Man kan si at på 1980-tallet var det en idé om at logikkprogrammering ville ta over verden. (Det var også en idé om at AI ville ta over verden …) I dag tror jeg at vi har et mer nyansert syn, og ser logikkprogrammering som et verktøy i verktøykassen, som kan tas fram når det er velegnet, tilføyer han.

Flik er designet for å understøtte tankegangen om at man kan programmere på alminnelig funksjonell og imperativ måte, og så ta fatt på det integrerte logikkspråket når det er behov for det.

Avanserte typer

Flix kom til verden ved University of Waterloo i Canada, men i dag har barnet mange foreldre, noe som ofte er tilfellet i moderne familier.

Som nevnt er Aarhus Universitet én av dem, og Den Frie Forskningsfond har støttet oppfostringen av det lille med to og en halv millioner danske kroner.

Blant flere triks i verktøykassen til Flix, er et avansert typesystem, tilsvarende det som er kjent fra forskningsspråket Haskell.

Det får Version2 til å stille et grovkornet spørsmål: Er det ikke kun språkdesignere som er fascinert av komplekse typesystemer og kategoriteori, som er den matematiske teorien som ligger til grunn?

– Som forskere prøver vi å unngå kompleksitet, svarer Madsen helt rolig.

– Målet vårt er å gjøre ting så enkelt som mulig. Imidlertid, i de fleste interessante problemer, er det ofte en medfødt kompleksitet, og det er den kompleksiteten vi forsøker å temme. Vi vil si at Flix bygger på et solid teoretisk fundament og er så enkelt som det er mulig. Det er et kraftig verktøy, noe som naturligvis krever litt tid å mestre, utdyper han.

Historisk kan man si at det alltid har vært motstand mot nye programmeringsspråk, mener han, og spør retorisk:

– Ville en Cobol- eller PL/1-programmerer ikke si at Java eller Javascript er unødvendig komplekst?

I dag bruker mange programmerere elementer fra funksjonell programmering til hverdags. Det gjelder for eksempel funksjoner som filter og map for å behandle collections i mange hovedstrømsspråk, uten at de tenker nærmere over det, lyder synspunktet. Det gjelder eksempelvis Java og C#.

De funksjonelle ideene har blitt stuerene

– I dag har stort sett alle programmeringsspråk elementer av funksjonell programmering, men det var helt klart ikke tilfellet for 20 år siden. Haskell har et rikt og kraftig typesystem, men det har faktisk også Typescript, og det er et programmeringsspråk som har blitt meget populært, påpeker Madsen.

Lær mer om Flix:

Typesystemet til Flix er basert på en teknikk med navnet «boolean unification», som opprinnelig er skapt av den engelske matematikeren George Boole – som ga nav til boolske variabeltyper og oppfant logikkens algebra for mer enn 100 år siden.

– Vi er de første til å bygge på denne teknologien og å ta den i bruk i sammenheng med et programmeringsspråk, hevder Madsen.

Overrasker studenter

Aarhus Universitet underviser i Flix som en del av et «pre-talent track program». Det er tenkt som et supplement til den tradisjonelle undervisningen i objektorientert programmering i Java.

– Studentene er typisk mest overrasket – og imponert over – hvor kort og elegant en rekke problemer kan løses ved hjelp av logikkprogrammering, sier Madsen.

Det er bare språket som kan by på noe nytt og bedre. Flix-kompilatoren er i stand til å gjøre en rekke optimaliseringer som eksisterende kompilatorer ikke er i stand til.

– Vi har en rekke optimaliseringer, som etter vår beste viten ikke finnes i andre kompilatorer. Vi er i stand til å gjøre noen av de samme optimaliseringer som Haskell kan, til tross for at Flix tillater sideeffekter, noe som jo er bannlyst i Haskell. Det skyldes vårt finkornede type- og effektsystem, som gir kompilatoren masse detaljert informasjon om hvert deluttrykk i et Flix-program, forklarer Madsen.

Flix er som nevnt et åpen kildekode-prosjekt med utviklere i blant annet Danmark, Frankrike, Canada, USA og India. Forskningen foregår som et samarbeid mellom Aarhus Universitet og University of Waterloo i Canada.

Artikkelen er levert av vår samarbeidspartner Version2.dk, en del av Teknologiens Mediehus.

Powered by Labrador CMS