Flix: Nyt sprog fra Aarhus vil gøre programmørens liv lettere med logik i tanken
Danmark er som bekendt en supermagt i programmeringssprog – og måske kan et nyt et af slagsen være med til at befæste den position.
Ambitionerne fejler i hvert fald ikke noget for det nye sprog Flix, der blandt andre himmelstrøg har hjemme i smilets by Aarhus.
Det er ikke et nichesprog, men tænkt som et generelt programmeringssprog, der dog har funktioner, der gør det smart til dagens datatunge anvendelser.
Sproget afvikles på Javas virtuelle maskine, også kaldet JVM-platformen, så udførslen er afkoblet fra det underliggende styresystem. Og er naturligvis open source, som det sig hører og bør for et moderne sprog anno 2021.
Egenskaber som ingen andre sprog
Det er ikke bare det rene sjov. Flix er allerede i brug ude i den store verden – som til dataanalyse på et vandværk i Storbritannien.
»Målet med Flix er at gøre bedre brug af computerens ressourcer, at hjælpe programmører med at undgå fejl, og at forbedre udviklingsoplevelsen. Det er ikke blot varm luft, men baseret på grundforskning i programmeringssprog, som er publiceret ved top-konferencer - og som vi ønsker at realisere i et anvendeligt, praktisk og brugbart programmeringssprog.«
Sådan forklarer Magnus Madsen, der er adjunkt på Aarhus Universitets institut for datalogi, og deltager i udviklingen af sproget.
Han mener at Flix har egenskaber, som ingen andre eksisterende programmeringssprog har i dag:
»Flix har et kraftfuldt ’type- og effekt-system’ som holder meget præcist styr på hvilke ’udtryk’ der kan have sideeffekter. Det gør Flix-compileren i stand til at lave en lang række optimeringer, som eksisterende compilere ikke er i stand til. Det kan f.eks. være at simplificere de beregninger, som programmet foretager. Eller at gøre at dele af programmet kan køre parallelt – helt automatisk.«
Flix hører hjemme i familien af funktionelle sprog, og understøtter oven i en form for indlejret logik-programmering.
Det betyder, at man kan implementere dele af sit program ved brug af logiske regler. Denne form for programmering er ofte meget velegnet til udtrykke forretningsprocesser, mener Magnus Madsen.
Den indlejrede logikprogrammering er baseret på sproget Datalog. Det er så at sige storebroren til databasesproget SQL. Det indebærer, at alt man kan udtrykke med SQL også kan udtrykkes med Datalog.
Men Datalog har mere styrke end SQL. Man kan udtrykke en lang række ’rekursive’ forespørgsler, som ikke er muligt med SQL.
Det kan eksempelvis handle om at finde den korteste vej mellem to byer, eller at planlægge et skoleskema. Derudover kan Datalog afvikles 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 anvendelse af Datalog, fra projektets hjemmeside. Operatoren :- kendes fra Prolog og definerer en regel. Linjeombrydningen skyldes Version2's cms og er muligvis ikke i overensstemmelse med sprogets syntaks.
Mainstream-sprog som f.eks. C# kan også arbejde med logik og udsagn, via LINQ, men man kan udrette mere med Datalog, mener Magnus Madsen.
Datalog er et logikprogrammeringssprog fra 1980’erne. Sproget udspringer af forskning i både databaseteknologi og det klassiske logiksprog Prolog. Navnet hentyder ikke til den danske betegnelse for programmeringsvidenskabsfolk. Det som gør Datalog særligt interessant i forhold til eksempelvis Prolog er, at det er tættere på et være et ‘query-sprog’ som SQL, og at sproget har mange brugbare egenskaber. Blandt andet har hver query en unik løsning, på trods af at rekursion er tilladt, og der findes mange effektive algoritmer, der kan udtrykkes i sproget. Kilde: Magnus Madsen, Aarhus Universitet.Datalog
Han tilføjer:
»Man kan sige at i 1980’erne var der en idé om at logikprogrammering ville overtage verden. (Der var også en ide om at AI ville overtage verden…) I dag tror jeg at vi har et mere nuanceret syn, og ser logikprogrammering som et værktøj i værktøjskassen, som kan tages frem når det er velegnet.«
Flix er designet til at understøtte denne tankegang, hvor man kan programmere på almindelig funktionel og imperativ vis, og så tage fat i det indlejrede logiksprog, når der er behov for det.
Avancerede typer
Flix kom til verden på University of Waterloo i Canada, men i dag har barnet mange forældre, som det ofte er tilfældet i moderne familier.
Som nævnt er en af dem Aarhus Universitet, og Den Frie Forskningsfond har støttet opforstringen af den lille med to en halv million kroner.
Blandt flere tricks i Flix’ værktøjskasse er et avanceret typesystem, som den slags kendes fra forskningssproget Haskell.
Det får Version2 til at stille et grovkornet spørgsmål: Er det ikke kun sprogdesignere, der er fascineret af komplekse typesystemer og kategoriteori, som er den matematiske teori, der ligger under?
»Som forskere prøver vi at undgå kompleksitet,« svarer Magnus Madsen helt roligt.
Han uddyber:
»Vores mål er at gøre ting så simpelt som muligt. Imidlertid, i det fleste interessante problemer, er der ofte en medfødt kompleksitet og det er den kompleksitet som vi prøver at tæmme. Vi vil sige at Flix bygger på et solidt teoretisk fundament og er så simpelt som det er muligt. Det er kraftfuldt værktøj, som naturligvis kræver lidt tid at mestre.«
Historisk kan man sige, at der altid har været modstand mod nye programmeringssprog, mener han, og spørger retorisk:
»Ville en COBOL- eller PL/1-programmør ikke sige, at Java eller Javascript er unødvendigt komplekst?«
I dag bruger mange programmører elementer af funktionel programmering til hverdag. Det gælder eksempelvis funktioner som filter og map til at behandle collections i mange mainstream-sprog, uden at de tænker nærmere over det, lyder synspunktet. Det gælder eksempelvis Java og C#.
De funktionelle ideer er blevet stuerene: Hjemmesiden Flix.dev byder på information om sproget og tankerne bag dets design. Bogen Programming Flix dokumenterer sproget. Sprogets api-dokumentation. Visual Studio Code extension understøtter funktionalitet så som syntax highlighting, jump to definition, renaming, og mere avancerede features som auto-complete.Lær mere om Flix
»I dag har stort set alle programmeringssprog elementer af funktionel programmering, men det var bestemt ikke tilfældet 20 år siden. Haskell har et rigt og kraftfuld type system, men det har Typescript faktisk også, og det er et programmeringssprog som er blevet meget populært.«
Flix’ typesystem er baseret på en teknik med navnet ‘boolean unification’, som oprindeligt er skabt af den engelske matematiker George Boole – der gav navn til boolske variabeltyper – og opfandt logikkens algebra for over 100 år siden.
»Vi er de første til at bygge videre på denne teknologi og tage den i brug i sammenhæng med et programmeringssprog.«
Overrasker studerende
Aarhus Universitet underviser i Flix som en del af et ‘pre-talent track program.’ Det er tænkt som et supplement til den traditionelle undervisning i objektorienteret programmering i Java.
»De studerende er typisk mest overraskede – og imponerede over, hvor kort og elegant en række problemer kan løses ved hjælp af logikprogrammering.«
Det er ikke kun sproget, der kan byde på noget nyt og bedre. Flix’ compiler i stand til at lave en lang række optimeringer, som eksisterende compilere ikke er i stand til.
»Vi har en række optimeringer, som til det bedste af vores viden, ikke findes i andre compilere. Vi er i stand til at lave nogle af de samme optimeringer som Haskell kan på trods af, at Flix tillader sideeffekter, som jo er bandlyst i Haskell. Det skyldes vores finkornede type- og effekt-system, som giver compileren en masse detaljeret information om hvert deludtryk i et Flix-program.«
Flix er som nævnt et open source-projekt med udviklere fra bl.a. Danmark, Frankrig, Canada, USA, og Indien. Forskningen foregår som samarbejde mellem Aarhus Universitet og University of Waterloo i Canada.

...men det er dyrt at lave god journalistik. Derfor beder vi dig overveje at tegne abonnement på Version2.
Digitaliseringen buldrer derudaf, og it-folkene tegner fremtidens Danmark. Derfor er det vigtigere end nogensinde med et kvalificeret bud på, hvordan it bedst kan være med til at udvikle det danske samfund og erhvervsliv.
Og der har aldrig været mere akut brug for en kritisk vagthund, der råber op, når der tages forkerte it-beslutninger.
Den rolle har Version2 indtaget siden 2006 - og det bliver vi ved med.