Aarhus-eksperter fra Chromes Javascript-motor skaber IoT-sprog og virtuel maskine

Kasper Lund og Lars Bak (th.) har et nyt sprog i baglommen. De gav for nylig et foredrag om sproget hos Ingeniørenforeningen IDA. Illustration: Version2
Nyt dansk sprog skal give nemmere IoT-systemer. Bag ideen står veteranerne Lars Bak og Kasper Lund. Udviklingstiden skal ned og sikkerheden skal op.

Der er brug for et helt nyt sprog og kørselsmiljø til indlejrede enheder, der benyttes i konceptet om Internet-of-Things (IoT).

Det mener Lars Bak og Kasper Lund, som på helt egen hånd er gået i gang med at arbejde med den ide.

Lars Bak har mange års erfaringer med sprog og virtuelle maskiner. Det går tilbage til Self, som var en variant af det objektorienterede sprog Smalltalk. Self var ikke nogen kassesucces, men firmaet Sun stod med et nyt sprog kaldet Java, hvis virtuelle maskine havde skrækkelig ydelse og brug for en opstramning.

Derfor blev Self-VM’en til Javas Hotspot-miljø i Java 1.3, og så var grundstenen på plads til hvad der skulle blive et af verdens mest populære sprog.

Lars Bak er vist ikke nogen stor Java-fan, men det er heller ikke påkrævet, når han kaster sig ud i nye projekter. Det næste store projekt, målt i betydning for verdens it-brugere, var Javascript-motoren i Googles browser Chrome.

Her blev ydelsen banket op på halvdelen af Javas VM, og det mente Lars Bak var, hvad der er muligt at opnå, i et ‘prototype’-objektsprog som Javascript.

Det rykkede i browserverdenen og gav mulighed for webapps af helt helt anden kaliber end før, men sproget er hverken han eller Kasper Lund stor fan af. Sidstnævnte kom med på holdet i forbindelse med at Lars Bak var vejleder for studerende på Aarhus Universitet. Nu har de to hajer efterhånden arbejdet sammen i 18 år.

IoT kræver et nyt sprog og VM

Da parret kiggede efter sprog, som ville passe godt til en virtuel maskine på IoT-enheder, var Python i kikkerten. Men da det gik op for de to, at Pythons typesystem er ligesom i Javascript, hvor nye metoder og felter kan hægtes på eksisterende objekter under kørselstid, blev det en tand for broget. Heraf opstod ideen om et splinternyt sprog, som har fået navnet ‘Toit.’

»Vi vil gøre det mere tilgængeligt at lave programmer på indlejrede enheder,« svarer Lars Bak, på spørgsmålet om, hvilket problem, det nye sprog prøver at løse:

»Ligesom Javascript og Java har gjort det for klienter og tjenester. Vores filosofi er, at hvis du laver en hurtigt feedback-løkke, fra du programmerer, til du får feedback fra det kørende system, på under et sekund, så inspirerer det programmøren til at eksperimentere og finde på nye ting.«

Det andet problem, de to vil løse, handler om sikkerheden, når små enheder kobles på nettet.

»Vi ved, at nye sårbarheder kommer til hele tiden. Vi vil have, at man kan smide ny software på enhederne, så man har et system kørende hele tiden. For det tredje vil vi have et distribueret system, hvor man kan lukke ned for den enkelte enhed, og resten af enhederne overtager funktionaliteten. Det gør systemerne mere robuste.«

Det minder om arkitekturen i sky-systemer, hvor man kan tolerere, at en enkelt enhed går ned, mens det samlede system kører videre uden problemer.

(Artiklen forsætter under eksemplet.)

class TreeNode
  left := null
  right := null
 
  TreeNode
 
  TreeNode left right
 
  size
    result := 1
    if left:  result += left.size
    if right: result += right.size
    ^result
 
build_tree depth
  if depth == 0: ^TreeNode
  ^TreeNode
    build_tree depth - 1
    build_tree depth - 1
 
main
  tree := build_tree 5
  assert tree.size == 63

Et eksempel på det endnu ufærdige sprog Toit. Hatten ‘^’ stammer fra sproget Self, der var Lars Baks første succes, og betyder det samme som ‘return’ i C-syntaks. Semikolonner, parenteser og tuborg-klammer er sat på porten til fordel for indrykning, som det kendes fra Python. Derudover benyttes der udstrakt brug af rekursion i eksemplet. Her skabes et træ rekursivt ved at kalde constructoren TreeNode med to rekursive parametre, med værdierne build_tree depth - 1. Sproget har ikke typer og byder på nedarvning, som det kendes fra andre objektsprog.

Virtuelle maskiner og garbage collection er godt for små enheder

Lars Bak mener ikke at virtuelle maskiner, garbage collection, og de forhold, det giver omkring ‘latency’, forsinkelse i udførslen, strider imod levevilkårene på indlejrede enheder.

Latency er slet ikke det store problem. Hvis man ønsker garanterede svartider, deler man blot applikationen op i en realtime- og en ikke-realtime-del.

»IoT betyder, at du snakker med internettet, og dermed ikke kan garantere, at et svar fra nettet kommer tilbage indenfor et bestemt stykke tid. Den del af applikationen kan aldrig blive realtime.«

Derudover synes Lars Bak, at virtuelle maskiner er det helt rigtige for små enheder:

»Når programmerne skrives i C, og der ikke er nogen beskyttelse mellem hukommelsen i enhedens forskellige dele, så medfører en fejl et sted at hele systemet går ned.«

Den slags sker ikke, hvis man afvikler programmet på en Unix-lignende arkitektur, hvor der er virtuel hukommelse, så er det kun den enkelte proces, der går ned, og som kan genstartes, hvis uheldet er ude. Så C er en dårlig løsning, mener Lars Bak.

class Set _HashedCollection
  -
  select :predicate
    result := Set
    do: if predicate.invoke it: result.include it
 
  | collection
    ^Set
      ..include_all this
      ..include:all collection
 
  -
 
main
 
    {1, 2, 3, 5, 8, 13, 21}.select: it.odd?

Et andet eksempel på Toit, med anvendelse af closures, som :predicate i eksemplet.

Sikkerhed som på Chromebooks

Sikkerheden bliver af sig selv meget bedre med en virtuel maskine, for man kan ikke ‘lege’ med bits og bytes under systemet. Garbage collection har den kæmpe fordel, at det bliver nemmere at skrive robuste programmer.

Og sikkerheden er et centralt punkt i IoT-verdenen, hvor den mulige angrebsflade ofte er stor og kompleks. Her mener Lars Bak, at Googles Chromebook byder på en god sikkerhedsmodel:

»Der er sikker boot, man er tvunget til at opdatere og kan kun kører programmer, som er designet til platformen, ved at bruge kryptering. Den løsning vil vi have til indlejrede systemer.«

Dertil kommer styring af krypteringsnøgler, så der er sikkerhed for, at det kun er udvikleren, der kan sende ny software til enheden.

Lars Bak og Kasper Lund fortæller, at sprog, kernebiblioteker og den virtuelle maskine vil blive open source på længere sigt. Og at de håber at udsende første version inden for et år.

Og hvorfor så navnet Toit?

»Du bliver nødt til at gå hjem og se filmen Austin Powers in Goldmember,« siger Lars Bak.

Tippet er hermed givet videre.

Kasper Lund og Lars Baks foredrag om sproget hos Ingeniørenforeningen IDA for nylig kan ses her.

Tips og korrekturforslag til denne historie sendes til tip@version2.dk
Følg forløbet
Kommentarer (10)
Troels Henriksen

Jeg er meget trist over at 'null' optræder i kode-eksemplet. Skal vi nu til det igen? Jeg håbede personligt at Swift ville være starten på en mainstream trend.

(Det er dog også lidt uklart om Toit overhovedet er statisk typet.)

Christian Lynbech

Det er jo både ædelt og tiltrængt at de gør noget for at forbedre sikkerheden i IoT applikationer men det store problem med mange af disse dimser er dels at producenten mangler kompetence/energi til at tage sikkerhed alvorligt og dels at brugerne er for dårlige til at opdatere de dimser de sætter op og det kommer nok ikke til at ændre sig bare fordi der kommer bedre værktøjer.

Torben Mogensen Blogger

(Det er dog også lidt uklart om Toit overhovedet er statisk typet.)

Jeg så et foredrag om det i Dansk Selskab for Datalogi (datalogi.dk), så jeg kan bekræfte, at sproget er dynamisk typet.

Jeg er stor tilhænger af statiske typer, men hvis man absolut vil lave et objektorienteret sprog, kan jeg godt forstå, at man vælger dynamiske typer: Statiske typesystemer for objektorienterede sprog har det med at være enten usunde, meget komplicerede, eller begge dele.

Den optimale løsning vil dog være at lave et sprog, der ikke er objektorienteret, men har statiske typer med begrænset polymorfi (typeklasser).

Tania Andersen Journalist

Interessant udmelding, Torben.

Men når jeg ser sprog som Haskell, Elm osv, så tænker jeg ofte, at det er sprogfolk, som måske skulle være blevet matematikere - typeteori, typealgebra, kategoriteori osv.

Det er spændende emner - men der er vel ikke det, udviklerne savner i deres daglige arbejde, eller hur? ;-)

Mvh Tania/V2

Christian Lynbech

Ok, det tager jeg i mig igen, der er åbenlyst et behov for nye sprog. I en artikel om C så jeg lige følgende lille godbid:

... indicating to the compiler that the pointer could not be null because dereferencing a null pointer is undefined behavior in C and therefore can be assumed not to happen

Jøsses, hvis det er sådan C compilere fungerer så har vi virkelig brug for nogen afløsere.

Folk med stærke nerver kan læse detaljerne her: https://queue.acm.org/detail.cfm?id=3212479

Bjarne Nielsen

Det er spændende emner - men der er vel ikke det, udviklerne savner i deres daglige arbejde, eller hur? ;-)

Det kan være svært at sige nej til tomme kalorier, så hvad man i almindelighed føler at man savner, er svært at svare på. Fristelserne fra syntaktisk sukker og overfladiske begreber som "truthiness" er nok svære at modstå.

Men personligt har jeg ikke brug for endnu et sprog, som være født med udgangspunkt i en blanding af bekvemmelighed og fikse ideer - dem er der allerede alt for mange af. Sprog, konstrueret på baggrund af solide ideer, holder derimod, også selvom de måske mangler glasur. Et sprog skal ikke hjælpe mig med vrøvle, det skal hjælpe mig med at udtrykke det, som jeg har brug for, præcist.

De bedste ting, er dem, som er avancerede inden i, men som er simple at bruge. Man behøver ikke forstå aerodynamik for at køre bil, men det er bedst at købe en bil lavet af nogen, som gør.

Og så tror jeg ikke på, at der et sprog, som kan alt. Man skal forstå, hvornår man skal bruge det ene eller det andet. Men mest af alt, så skal man tale et sprog, som bliver forstået af andre.

Torben Mogensen Blogger

Interessant udmelding, Torben.

Men når jeg ser sprog som Haskell, Elm osv, så tænker jeg ofte, at det er sprogfolk, som måske skulle være blevet matematikere - typeteori, typealgebra, kategoriteori osv.

Det er spændende emner - men der er vel ikke det, udviklerne savner i deres daglige arbejde, eller hur? ;-)

Javas typesystem er ikke meget enklere end Haskells (hvis overhovedet), og det er lige så matematisk. Man har bare valgt en mindre matematisk navngivning -- "generics" i stedet for "polymorphism", "inheritance" i stedet for "subtyping", osv. Men det er blot at skjule kompleksiteten under et tæppe af velkendte ord, der bruges i en betydning, der er langt fra deres dagligdags betydning. På den måde er Haskell mere ærlig om kompleksiteten.

Jeg er dog enig i, at Haskell er gået over gevind med komplicerede typer. Bevares, det giver flere muligheder for generisk programmering at have kind-polymorfi udover typepolymorfi, men det er de færreste programmører, der bruger det, og monader er efter min mening ikke en specielt elegant måde at håndtere effekter i et funktionssprog. Men, som sagt, så er Javas typesystem ikke specielt enkelt hellere.

Men typeklasser i deres grundlæggende form er essentielt det samme som interfaces i objektorienterede sprog: Navngivne grupper af operationer på en uspecificeret type, som enhver type sidenhen kan erklære sig at implementere. Og en polymorf funktion kan kræve, at en typeparameter skal implementere denne gruppe af operationer.

Den primære forskel er, at i f.eks. Java skal du, når du definerer en klasse, angive de interfaces. den implementerer. Med typeklasser kan du definere en type og typeklasse i vilkårlig rækkefølge, og bagefter definere, hvordan typen implementerer typeklassen -- uden at gå tilbage og ændre typedefinitionen.

Log ind eller Opret konto for at kommentere
Pressemeddelelser

Welcome to the Cloud Integration Enablement Day (Bring your own laptop)

On this track, we will give you the chance to become a "Cloud First" data integration specialist.
15. nov 2017

Silicom i Søborg har fået stærk vind i sejlene…

Silicom Denmark arbejder med cutting-edge teknologier og er helt fremme hvad angår FPGA teknologien, som har eksisteret i over 20 år.
22. sep 2017

Conference: How AI and Machine Learning can accelerate your business growth

Can Artificial Intelligence (AI) and Machine Learning bring actual value to your business? Will it supercharge growth? How do other businesses leverage AI and Machine Learning?
13. sep 2017
Jobfinder Logo
Job fra Jobfinder