Flix: Nyt sprog fra Aarhus vil gøre programmørens liv lettere med logik i tanken

Flix som det ser ud med en plugin til Visual Studio Code. Illustration: Magnus Madsen
JVM-sproget Flix fra Aarhus Universitet giver mulighed for smart og tidsbesparende logik, med verdens mest avancerede compiler i ryggen, mener folkene bag. Og det kan kodes i Visual Studio Code.

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.«

Magnus Madsen er adjunkt på Aarhus Universitet og med til at udvikle det nye sprog Flix. Han fortæller om sit personlige engagement i sproget: »Jeg har altid været interesseret i at skrive elegante og hurtige programmer. Jeg tror min interesse naturligt drejede i retning af programmeringssprogs design. Jeg følte mig også inspireret af andre store danske sprogdesignere, som f.eks. Bjarne Stoustrup, Anders Hejlsberg, Mads Torgersen og andre.« Illustration: Aarhus Universitet

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.

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:

»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.

Tips og korrekturforslag til denne historie sendes til tip@version2.dk
Følg forløbet
Kommentarer (8)
sortSortér kommentarer
  • Ældste først
  • Nyeste først
  • Bedste først
#9 Troels Henriksen

Lyder meget som, og syntax ligner meget Rust, men bare værre på alle punkter i forhold til Rust? Rust er native uden en virtual machine.

Jeg tror ikke Flix er lavet til samme domæne som Rust. Flix har understøttelse for channels, et effektsystem, og Datalog-baserede constraints. Ingen af de ting er i Rust. Til gengæld giver Rust kontrol over allokering og hukommelseslayout, hvilket Flix ikke gør. Flix har også higher-kinded types, men det tror jeg også der er planer om at tilføje til Rust.

Hvorvidt syntaksen ligner Rust er subjektivt, men jeg synes mere det (meget) ligner Scala.

  • 5
  • 0
#10 charlotte Grønvold

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.

Jeg forstår ikke helt hvad det menes med; at det hør og bør sig at være opensource anno2021. Det kan ikke være mere forkert! det er også svært at gennemskue hvem i denne artikel der har udtalt sig.

  • 0
  • 3
Log ind eller Opret konto for at kommentere