Dansk studerende skriver nyt programmeringssprog til NASA

Datalogistuderende på DIKU Nis Wegmann scorede et praktikophold hos NASA på en uopfordret ansøgning. Her har han på fem måneder udviklet et nyt programmeringssprog til fly.

En uopfordret ansøgning til et mindre, amerikansk firma endte sidste år med at blive en adgangsbillet til rumfartsorganisationen NASA for danske Nis Wegmann.

Her har den 27-årige datalogistuderende i løbet af fem måneder udviklet et programmeringssprog og en tilhørende compiler, som kan bruges til at skrive programmer, der overvåger software i passagerfly for potentielt skæbnesvangre fejl.

»Det kan for eksempel være en overflow-fejl i softwaren til en sensor på flyet, som så betyder, at piloten træffer beslutninger ud fra de forkerte informationer,« siger Nis Wegmann, der nu er i gang med sit speciale på datalogistudiet ved Københavns Universitet.

Programmeringssproget er døbt Copilot, og Nis Wegmann har sammen med sine kolleger i NASA og sikkerhedsvirksomheden Galois Inc. sværget til funktionsorienteret programmering.

Comeback til funktionsorientering

Paradigmet udspringer af den såkaldte lambda-calculus fra 1930'erne, men er først rigtig begyndt at vinde frem de senere år efter mange år i skyggen af de imperative sprog.

Læs også: Ny DIKU-professor: F# og Haskell viser vejen ud af multicore-krisen

Funktionsorienteret programmering adskiller sig kort fortalt fra imperativ programmering ved at resultere i færre kodelinjer og bugs, hvis det bruges efter hensigten.

Blandt de funktionsorienterede sprog finder man for eksempel Haskell og Erlang. De er grundlæggende mere rent matematiske end de imperative sprog, der blandt andet tæller sværvægterne C og Java.

En af de vigtige forskelle er, at programmøren i den funktionsorienterede verden groft sagt arbejder efter paradigmet 'tag et datasæt x og gør y ved det' frem for selv at beskrive processen trin for trin i koden. Det betyder i sagens natur, er man ender med færre kodelinjer - og dermed potentielt set en lavere risiko for fejl i koden.

En anden stor forskel fra de imperative sprog er, at variabler og tabeller ikke kan overskrives i løbet af et programs levetid. I stedet for at overskrive eksisterende data, genereres der konstant nye data, og det løser nogle af de synkroniseringsproblemer, programmører står overfor i forbindelse med moderne multicore-processorer.

Straffen kommer dog på det tidspunkt, hvor programmet sættes til at køre.

For de funktionsorienterede sprog er alle udstyret med en garbage collector, som løbende rydder op i hukommelsen, mens programmet kører. Det harmonerer ikke godt med flysoftwarens krav om realtid.

Derfor har Nis Wegmann og hans kolleger skrevet compileren, så den i sidste ende spytter rå C-kode ud.

»Det handler om 'hard real time' i et fly. Programmet skal altid respondere inden for et vist antal millisekunder, og det er umuligt at lave de garantier inden for funktionsprogrammering. Derfor laver man som regel koden om til C, fordi det er meget maskinnært,« siger Nis Wegmann til Version2.

Praktikant ved et tilfælde

Copilot er et såkaldt indlejret domænespecifikt sprog. Sprogets syntaks og semantik er baseret på Haskell, og compileren til Copilot står i praksis kun for at opbygge et syntakstræ og derefter for selve kodegenereringen til C.

»Et sprog som C er nemt at lave fejl i. Ved at bruge Copilot arbejder programmøren på et mere abstrakt niveau,« forklarer han.

NASA-eventyret begyndte i april sidste år. Her faldt Nis Wegmann over et forældet praktikantopslag på nettet fra Galois, der specialiserer sig i sikkerhedsløsninger til kritiske it-systemer og har den amerikanske regering som hovedkunde.

Han besluttede sig for at sende en ansøgning trods den overskredne udløbsdato.

»Jeg tog et kig på deres hjemmeside, og det harmonerede meget godt med nogle af de ting, jeg blandt andet har lavet i mit bachelorprojekt omkring funktionsorienteret programmering og kritiske systemer. Derfor sendte jeg en uopfordret ansøgning til dem,« forklarer Nis Wegmann.

Det endte med, at han fik en aftale om en plads hos NASAs Langley Research Centre i Virginia, som Galois arbejder tæt sammen med.

»Det har været sindssygt godt. Jeg kan kun anbefale andre studerende at gøre det samme. Man får anvendt nogle af de teoretiske ting, man laver på uddannelsen, i virkelighedens verden ude i industrien.«

Projektet har også kastet to forskningsartikler af sig, hvoraf den ene er blevet præsenteret på den internationale ICFP-konference om funktionsorienteret programmering i København i denne uge.

Man skal dog ikke regne med at finde Copilot i passagerfly lige med det samme, fortæller han. Softwaren i fly er som regel så dyr at udvikle og få certificeret, at man ikke bare lige går ind og lægger noget anden software oven på.

»Det bliver ikke implementeret nu eller i den nærmeste fremtid i passagerfly,« siger han.

Copilot er et open source-projekt, som kan findes på kodedelingstjenesten Github.

Opdateret 13/09 klokken 09.32: Afsnit om funktionsprogrammeringens ophav er rettet.

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

Opstod i 1957 sammen med programmeringssproget LISP men ellers enig.

Paradigmet er på mange måder stærkere end imperativ programmering og selv hvis man veksler mellem de to får man lært nogle gode vaner, man også kan anvende i f.eks. C. LISP har den reneste syntaks af sprog, der understøtter funktionsorienteret programmering. Erlang, der nævnes, virker til sammenligning noget mere primitiv lidt ala hedengangne sprog som f.eks. POP11.

  • 4
  • 0
#2 Deleted User

Hej Palle -

Tak for dit indlæg. Jeg har tidligere skrevet følgende i en anden artikel:

Paradigmet udspringer af den såkaldte lambda calculus fra 1930'erne og giver kort fortalt programmøren mulighed for at udtrykke på et højt abstraktionsniveau, hvad der skal gøres, frem for at give en trin for trin-opskrift på, hvordan det skal gøres.

... så ved ikke lige, hvorfor den er smuttet denne gang. Anyway, jeg har rettet.

Vh Mikkel, v2.dk

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