Hver linje kode, du skriver, skal oversættes til et sprog, din computer kan forstå. Men hvordan sker det?

Kildekoden til programmeringssprog på højt niveau som PHP, Swift og JavaScript ligner lidt naturligt sprog. Du vil se engelske ord i en sådan kode, og du vil være i stand til at forstå noget af dens funktionalitet, selvom du ikke kender selve sproget. Men sådan kildekode skal være i et maskinlæsbart format, for at computeren kan køre det endelige program.

For at gøre dette har maskinen brug for en mellemmand til at oversætte din kode til noget, den kan behandle. Denne mellemmand kunne være en fortolker, en compiler eller en assembler. De gør alle en lignende ting: de oversætter kildekode fra en menneskelæsbar form til en maskinlæsbar form. Men hvordan de gør det er meget forskelligt.

Hvad er en tolk?

En fortolker læser hver linje kode, en ad gangen, og udfører den med det samme ved kørsel. En tolk venter ikke på, at hele kildekoden bliver konverteret til maskinkode, før den sender den til CPU'en. I stedet konverterer den hver kodelinje til den fortolkerspecifikke bytekode og udfører hver instruktion, efterhånden som den bliver oversat. Mens udførelsesopgaven er afhængig af tolken direkte, driver CPU'en selve tolken.

instagram viewer

Da den analyserer og kører hver linje ad gangen, er processen ofte relativt langsommere. Med det i tankerne er fejl i fortolkede programmeringssprog nemme at få øje på, da de giver øjeblikkelig feedback for hver kodelinje.

Et tilbageslag for denne adfærd er imidlertid, at en runtime-fejl bryder programmet ned under udførelse, hvilket resulterer i en dårlig brugeroplevelse, især hvis dit projekt mangler tilstrækkelig test.

Hvad er en compiler?

En compiler læser din kildekode og oversætter den til en maskinlæsbar eksekverbar. I modsætning til en tolk læser den hele kildekoden på én gang og genererer maskinkode til senere behandling af CPU'en. Da compileren udfører denne opgave kun én gang, er kompilerede programmer typisk hurtigere og mere hukommelseseffektive.

Compileren tager dog ikke højde for køretidsfejl. I stedet vil den markere visse fejl på kompileringstidspunktet, hvilket normalt er bedre. Denne type fejl dukker op under udvikling, ikke når programmet begynder at køre. Du skal dog huske på, at køretidsfejl stadig er mulige, selv i kompilerede programmer.

De vigtigste forskelle

Tolke og kompilatorer er begge almindelige, så det er nyttigt at kende de vigtigste forskelle mellem dem.

Kodeudførelse: Input- og outputbehandling

En tolk kan kun indsamle, oversætte og udføre hvert input pr. linje. Den kører hver linje i kildekoden sekventielt, efterhånden som den kommer, og det endelige output afhænger af, hvad hver linje udsender under udførelsen.

En compiler samler hele kildekoden og oversætter den kun én gang. Så det tager hele din kildekode som input, som den konverterer og sender til CPU'en for at få et output.

Fejlsøgning og fejlsporbarhed

For fortolket kode er fejl mere sporbare, da tolken kan rapportere dem ved direkte at henvise til den originale kilde. Men når der er en fejl på noget tidspunkt under udførelsen, stopper tolken. Så fejlretningsfejl kan være lidt udfordrende, da du skal genskabe dem under kørslen. Det kan endda blive værre, hvis der er utilstrækkelig runtime-logning.

På den anden side kan køretidsfejlene i et kompileret sprog være sværere at spore, da der ikke er en tolk til at rapportere om dem. Men fejl, du opdager på kompileringstidspunktet, er normalt nemmere at håndtere, da compileren konsekvent vil identificere dem.

De fleste kompilerede sprog har også en mekanisme til at opdage ubrugte variabler, typeinkompatibilitet og defekt syntaks, hvilket forhindrer denne slags fejl tidligt.

Ydeevne og hastighed

Som forventet hjælper en compiler maskinen med at køre programkode hurtigere, da CPU'en kun behandler koden én gang. Dette er ikke tilfældet for tolke, som oversætter hver linje under kørsel.

Selvom der er programmeringsprincipper du kan bruge for at optimere fortolket kode, vil fortolkeren stadig bruge tid på at parse og udføre hver linje, før han går videre til den næste. Der er dog kompileringshjælpere til rådighed for at gøre fortolkede sprog hurtigere.

For eksempel behandler Chrome-browseren JavaScript ved hjælp af V8-motoren; dette kører på Just-In-Time (JIT) compileren. Pyinstaller-modulet er en anden hjælper, der samler og kompilerer et Python-script til en eksekverbar pakke.

Selvom disse hjælpere er praktiske til at samle et fortolket sprog i en compiler, ændrer det ikke på det faktum, at basisoversætteren stadig er en tolk.

Hukommelsesbrug

Hukommelsesbrugsadfærden for fortolkeren og compileren er relativ og afhænger ofte af kildekoden og andre faktorer. Mens nogle programmører hævder, at kodechunking i tolke reducerer hukommelsesforbrug, registrerer tolke også samlet hukommelsesbrug.

For eksempel, når du undersøger hukommelsesbrugsprofil for din Python-kode, kan mængden af ​​hukommelse, den bruger, måske overraske dig.

Generelt kræver kompilerede programmer dog mindre køretidshukommelse. Da de på forhånd konverterer hele kildekoden til maskinlæsbar kode, giver de CPU'en mindre arbejde. Dette er i modsætning til tolke, som kun oversætter kode under kørsel.

Understøttelse af programmeringssprog

Tolken og compileren har en rimelig andel af distribution af programmeringssprog. Nogle populære kompilerede sprog inkluderer C, C#, Rust og Golang. Tolkede sprog er også populære, blandt dem Python, JavaScript og PHP.

Flere programmører har en tendens til at foretrække fortolkede sprog. Mens JavaScript og Python bruger tolke, er de de to overordnede mest ønskede sprog, ifølge 2023 Stack Overflow Developer Survey. Rust og C# repræsenterer de kompilerede grupper på femte og sjette position.

Hvor fortolkede sprog skinner

Tolke skinner på disse områder:

  • De tillader nem fejlsporing, da tolken udfører hver kodelinje separat.
  • Det er ofte hurtigere at opnå et minimum levedygtigt produkt tidligere med fortolkede sprog, da de har mindre komplekse syntakser sammenlignet med kompilerede sprog.
  • I modsætning til statisk indtastede kompilerede sprog bruger fortolkede sprog dynamisk skrivning, hvilket reducerer kodekompleksiteten og forbedrer læsbarheden.

Hvor kompilerede sprog vinder

Hvad med compilere? Her er nogle aspekter, som deres sprog viser en vis styrke:

  • Kompilerede sprog er typisk hurtigere ved udførelse og kræver mindre runtime-hukommelse, da kodeoversættelse kun sker én gang i forvejen.
  • Udførelse efter kompilering hjælper med tidlig fejldetektion. Compileren sikrer, at implementeringen mislykkes, når der er en fejl. Dette er bedre end at fange fejl under kørsel.
  • Selvom de er statisk skrevet, definerer kompilerede sprog klart hensigten med variabler og funktioner, hvilket gør dem mere dokumenterede.

Valg af den rigtige oversætter til dit projekt

Som du har set, har compileren og tolken deres respektive områder, hvor de udmærker sig. Mens nogle programmører fastholder, at kompilerede sprog er hurtigere og bedre generelt, hævder andre, at ydeevne afhænger af kodestruktur og platform.

Men endnu vigtigere, dit valg af oversætter bør også afhænge af flere andre faktorer udover deres tekniske mekanismer. Den nemme læring, fællesskabet og projektets hensigt er blandt de faktorer, der skal tages i betragtning, når man vælger mellem fortolkede og kompilerede sprog.