Varje rad kod du skriver måste översättas till ett språk som din dator kan förstå. Men hur går det till?

Källkoden för programmeringsspråk på hög nivå som PHP, Swift och JavaScript ser lite ut som naturligt språk. Du kommer att se engelska ord i sådan kod och du kommer att kunna förstå en del av dess funktionalitet, även om du inte kan själva språket. Men sådan källkod måste vara i ett maskinläsbart format för att datorn ska köra det slutliga programmet.

För att göra detta behöver maskinen en mellanhand som översätter din kod till något den kan bearbeta. Denna mellanhand kan vara en tolk, en kompilator eller en assembler. De gör alla en liknande sak: de översätter källkod från en mänsklig läsbar form till en maskinläsbar. Men hur de gör det är helt olika.

Vad är en tolk?

En tolk läser varje kodrad, en i taget, och exekverar den omedelbart vid körning. En tolk väntar inte på att hela källkoden ska konverteras till maskinkod innan den skickas till CPU: n. Istället konverterar den varje kodrad till den tolkspecifika bytekoden och exekverar varje instruktion när den översätts. Medan exekveringsuppgiften förlitar sig på tolken direkt, driver CPU: n tolken själv.

instagram viewer

Eftersom den analyserar och kör varje rad åt gången är processen ofta relativt långsammare. Med det i åtanke är fel i tolkade programmeringsspråk lätta att upptäcka eftersom de ger omedelbar feedback för varje kodrad.

Ett bakslag för detta beteende är dock att ett körtidsfel kraschar programmet under körning, vilket resulterar i en dålig användarupplevelse, särskilt om ditt projekt saknar adekvat testning.

Vad är en kompilator?

En kompilator läser din källkod och översätter den till en maskinläsbar körbar fil. Till skillnad från en tolk läser den hela källkoden på en gång, och genererar maskinkod för senare bearbetning av CPU: n. Eftersom kompilatorn utför denna uppgift bara en gång, är kompilerade program vanligtvis snabbare och mer minneseffektiva.

Kompilatorn tar dock inte hänsyn till körtidsfel. Istället kommer den att flagga vissa fel vid kompilering, vilket vanligtvis är bättre. Den här typen av fel dyker upp under utvecklingen, inte när programmet börjar köras. Kom dock ihåg att körtidsfel fortfarande är möjliga, även i kompilerade program.

De viktigaste skillnaderna

Tolkar och kompilatorer är båda vanliga, så det är användbart att känna till de viktigaste skillnaderna mellan dem.

Kodexekvering: In- och utdatabearbetning

En tolk kan bara samla in, översätta och utföra varje indata per rad. Den kör varje rad i källkoden sekventiellt när den kommer, och den slutliga utmatningen beror på vad varje rad matar ut under körningen.

En kompilator paketerar hela källkoden och översätter den bara en gång. Så det tar hela din källkod som indata, som den konverterar och skickar till CPU: n för att få en utdata.

Felsökning och felspårbarhet

För tolkad kod är fel mer spårbara eftersom tolken kan rapportera dem genom att direkt hänvisa till originalkällan. Men när det uppstår ett fel vid någon tidpunkt under körningen, stannar tolken. Så felsökningsfel kan vara lite utmanande eftersom du behöver återskapa dem under körning. Det kan till och med bli värre om det finns otillräcklig loggning under körtiden.

Å andra sidan kan körtidsfelen i ett kompilerat språk vara svårare att spåra eftersom det inte finns någon tolk att rapportera om dem. Men fel du upptäcker vid kompilering är vanligtvis lättare att hantera eftersom kompilatorn konsekvent identifierar dem.

De flesta kompilerade språk har också en mekanism för att upptäcka oanvända variabler, typinkompatibilitet och felaktig syntax, vilket förhindrar den här typen av misstag tidigt.

Prestanda och hastighet

Som förväntat hjälper en kompilator maskinen att köra programkod snabbare eftersom CPU: n bara bearbetar koden en gång. Detta är inte fallet för tolkar, som översätter varje rad vid körning.

Även om det finns programmeringsprinciper du kan använda för att optimera tolkad kod kommer tolken fortfarande att spendera tid på att analysera och exekvera varje rad innan han går vidare till nästa. Det finns dock kompilatorhjälpmedel tillgängliga för att göra tolkade språk snabbare.

Till exempel bearbetar webbläsaren Chrome JavaScript med V8-motorn; detta körs på Just-In-Time (JIT) kompilatorn. Pyinstaller-modulen är en annan hjälpare som buntar och kompilerar ett Python-skript till ett körbart paket.

Även om dessa hjälpare är praktiska för att bunta ett tolkat språk till en kompilator, ändrar det inte det faktum att baslinjeöversättaren fortfarande är en tolk.

Minnesanvändning

Tolkens och kompilatorns minnesanvändningsbeteende är relativt och beror ofta på källkoden och andra faktorer. Medan vissa programmerare hävdar att kodklumpning i tolkar minskar minnesanvändningen, registrerar tolkarna också den samlade minnesanvändningen.

Till exempel, när du undersöker minnesanvändningsprofil för din Python-kod, kan mängden minne det förbrukar överraska dig.

Men generellt sett kräver kompilerade program mindre körtidsminne. Eftersom de konverterar hela källkoden till maskinläsbar kod i förväg ger de processorn mindre arbete. Detta till skillnad från tolkar, som endast översätter kod under körning.

Stöd för programmeringsspråk

Tolken och kompilatorn har en rejäl del av distribution av programmeringsspråk. Några populära kompilerade språk inkluderar C, C#, Rust och Golang. Tolkade språk är också populära, bland dem Python, JavaScript och PHP.

Fler programmerare tenderar att föredra tolkade språk. Medan JavaScript och Python använder tolkar, är de de två överlag mest önskade språken, enligt 2023 Stack Overflow Developer Survey. Rust och C# representerar de sammanställda grupperna på femte och sjätte plats.

Där tolkade språk lyser

Tolkar lyser i dessa områden:

  • De tillåter enkel felspårning eftersom tolken exekverar varje kodrad separat.
  • Det går ofta snabbare att uppnå en minsta möjliga produkt tidigare med tolkade språk, eftersom de har mindre komplexa syntaxer jämfört med kompilerade språk.
  • Till skillnad från statiskt skrivna kompilerade språk använder tolkade språk dynamisk typning, vilket minskar kodkomplexiteten och förbättrar läsbarheten.

Där kompilerade språk vinner

Hur är det med kompilatorer? Här är några aspekter som deras språk visar viss styrka:

  • Kompilerade språk är vanligtvis snabbare vid exekvering och kräver mindre körtidsminne eftersom kodöversättning endast sker en gång i förväg.
  • Exekvering efter kompilering hjälper till att upptäcka fel tidigt. Kompilatorn säkerställer att distributionen misslyckas när det väl finns ett fel. Detta är bättre än att fånga fel under körning.
  • Även om de är statiskt typade, definierar kompilerade språk tydligt syftet med variabler och funktioner, vilket gör dem mer dokumenterade.

Att välja rätt översättare för ditt projekt

Som du har sett har kompilatorn och tolken sina respektive områden där de utmärker sig. Medan vissa programmerare hävdar att kompilerade språk är snabbare och bättre överlag, hävdar andra att prestanda beror på kodstruktur och plattform.

Men ännu viktigare, ditt val av översättare bör också bero på flera andra faktorer förutom deras tekniska mekanismer. Lättheten att lära sig, gemenskapen och projektets avsikt är bland faktorerna att ta hänsyn till när man väljer mellan tolkade och kompilerade språk.