Se Anders Hejlsberg forklare, hvordan moderne compilere virker

Den moderne compiler skal ikke blot spytte eksekverbar kode ud, men også hjælpe mens koden skrives. Det kræver et andet compiler-design, end man finder i lærebøgerne.

Slår man op i lærebøgerne for at se, hvordan en compiler fungerer, så vil svaret typisk være en beskrivelse af en klassisk compiler, der tager kildekoden og spytter eksekverbar kode ud. Men en moderne compiler er bygget noget anderledes op.

Det forklarer Anders Hejlsberg i denne video fra Microsofts Channel 9.

Udfordringen for den moderne compiler er, at den også skal understøtte moderne udviklingsværktøjer, og eksempelvis hjælpe programmøren ved at foreslå relevante metoder, der kan kaldes på et objekt eller en klasse, når navnet indtastes efterfulgt af et punktum.

I stedet for at lave et separat værktøj, som klarer disse ting i IDE'et, så kan en moderne compiler konstrueres, så den ikke blot kan omsætte færdig kode, men også hjælpe undervejs.

Samme compiler analyserer koden i IDE'et og leverer det færdige output

Anders Hejlsberg forklarer, hvordan C# først havde både en compiler og et kodefortolkningsværktøj, der hjalp under skrivning i Visual Studio, men det gav problemer, når der blev ændret i sproget og dermed compileren, fordi de to skulle stemme overens.

Med den nye compiler, Roslyn, og med den compiler, der oversætter Typescript til Javascript, er det den samme compiler, der både analyserer koden i IDE'et og leverer det færdige output.

Problemet med den klassiske compiler er, at programmøren potentielt ændrer hele programmet, hver gang der bliver indtastet et nyt tegn. Det vil tage alt for lang tid, hvis al koden skal gennemløbes for hvert nyt tegn. Derfor bliver der i de nye compilere brugt principper fra funktionel programmering til ganske vist at begynde forfra hver gang, men samtidig skyde genvej til at skabe den nye struktur.

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

Den primære forskel fra tidligere er i oversætterens forende, altså parser, typetjekker, og så videre. Optimiseringstrinnet, som udgør størsteparten af koden i en moderne (ahead-of-time) oversætter, er stadigvæk som det altid har været - omend noget mere kompliceret. LLVM, som har udgjort en lille revolution indenfor oversætterkonstruktion, er f.eks. udelukkende fokuseret på bagenden.

  • 2
  • 0
Nikolaj Brinch Jørgensen

Som jeg forstår det, er ECJ en ekstra compiler, som Eclipse har hægtet på sit udviklingsmiljø. Her er der tale om kun én compiler til både udviklingsmiljø og produktion


ECJ er en fuld Java compiler, som kan bruges og bliver brugt i produktion. Den kan erstattet JVM compileren.
Udover at blive brugt i Eclipse (og den kan også bruges med IntelliJ). Maven, Gradle osv. kan alle bruge ECJ, og Apache Tomcat bruger f.eks. ECJ.

  • 1
  • 0
Fritz Henglein

"Derfor bliver der i de nye compilere brugt principper fra funktionel programmering."

Da jeg ankom i 90erne i Danmark og undersætte 'functional programming', som jeg havde arbejdet med i adskillige år i USA, til 'funktionel programmering', blev jeg straks rettet af en seniorkollega: Det hedder funktionsprogrammering på dansk. 'Funktionel programmering' er 'praktisk' eller 'formålstjenlig' programmering; det er funktionsprogrammering helt bestemt, men forhåbentligt ikke ene om. Ellers studerer vi snart computervidenskab (datalogi) og skyder med blanke patroner (løspatroner), uden at det hjælper med forståelsen af hverken det ene eller det andet.

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