Hopp til innhold
NorscodeNorscode

Kompilatoren bygger seg selv

ArtikkelAv Norscode-prosjektet

Norscode er selvhostende: verktøykjeden er skrevet i språket den kompilerer.

Kompilatoren, lenkeren og standardbiblioteket i Norscode er skrevet i Norscode selv. Det høres sirkulært ut — hvordan kan et språk kompilere seg selv før det finnes noen kompilator? Svaret er en prosess som kalles bootstrapping, og den er verdt å forstå, for den sier noe om hvor ferdig et språk egentlig er.

Hvordan et språk løfter seg selv

Det begynner med en liten oppstartsbinær — en enkel kjørbar fil som forstår akkurat nok Norscode til å kompilere den første, minimale versjonen av kompilatoren. Den versjonen kan så kompilere en litt rikere versjon, som igjen kan kompilere en enda mer komplett en. Trinn for trinn løfter språket seg selv opp fra nesten ingenting, til den fullstendige verktøykjeden står ferdig — skrevet i språket den selv oversetter.

Den strengeste prøven

En kompilator er et av de mest krevende programmene som finnes. Den er full av tekstbehandling, store datastrukturer, kronglete logikk og null rom for uklarhet — én feil ett sted forplanter seg til alt annet. Klarer et språk å uttrykke sin egen kompilator på en lesbar måte, har det bestått en test de aller fleste programmer aldri kommer i nærheten av. Det er en av grunnene til at selvhosting regnes som et tegn på modenhet.

Hvorfor det betyr noe for deg

At det ikke ligger et annet språk skjult under, har en praktisk konsekvens: den som kan Norscode, kan lese hele veien fra kildekode til kjørende program. Det er ingen fremmed verktøykjede i et annet språk mellom deg og hvordan koden din faktisk blir oversatt og kjørt. Vil du vite hvordan noe fungerer, kan du følge sporet selv.

Åpenhet gjennom hele stakken

Det betyr også færre svarte bokser å stole blindt på. Kompilatoren, kjøretiden med sin kapabilitetsmodell, og standardbiblioteket er alle skrevet i det samme, lesbare språket. Selvhosting er ikke et kunststykke for skryt — det er en måte å gjøre hele systemet gjennomsiktig på, fra første oppstartsbinær til den ferdige NCB-fila du kjører i produksjon.

Et språk som bygger seg selv, sier med det at det er ferdig nok til å tas på alvor.

Les også

Tilbake til oversikten