Skillnader mellan kompilatorer och tolkar

Innan programmeringsspråket Java och C # dök upp kompilerades eller tolkades bara datorprogram. Språk som Assembly Language, C, C ++, Fortran, Pascal sammanställdes nästan alltid till maskinkod. Språk som Basic, VbScript och JavaScript tolkades vanligtvis.

Så vad är skillnaden mellan ett sammanställt program och ett tolkat program?

sammanställa

Så här skriver du ett program:

  1. Redigera programmet
  2. Kompilera programmet i maskinkodfiler.
  3. Länka maskinkodfilerna till ett körbart program (även känt som ett exe).
  4. Felsöka eller köra programmet

Med vissa språk som Turbo Pascal kombineras Delphi steg 2 och 3.

Maskodkodfiler är fristående moduler av maskinkod som kräver att de kopplas ihop för att bygga det slutliga programmet. Anledningen till att ha separata maskinkodfiler är effektivitet; kompilatorer behöver bara kompilera om källkoden som har ändrats. Maskinkodfilerna från de oförändrade modulerna återanvänds. Detta är känt som att göra applikationen. Om du vill kompilera om och bygga om all källkod kallas det Build.

Länkning är en tekniskt komplicerad process där alla funktionssamtal mellan olika moduler är kopplade ihop, minnesplatser tilldelas för variabler och all kod läggs ut i minnet, sedan skrivs till disken som ett komplett program. Detta är ofta ett långsammare steg än att sammanställa eftersom alla maskinkodfiler måste läsas i minnet och kopplas samman.

Tolkning

Stegen för att köra ett program via en tolk är

  1. Redigera programmet
  2. Felsöka eller köra programmet

Detta är en mycket snabbare process och det hjälper nybörjare att redigera och testa deras kod snabbare än att använda en kompilator. Nackdelen är att tolkade program går mycket långsammare än sammanställda program. Så mycket som 5-10 gånger långsammare som varje kodrad måste läsas om och sedan behandlas på nytt.

Ange Java och C #

Båda dessa språk är halvkompilerade. De genererar en mellanliggande kod som är optimerad för tolkning. Detta mellanspråk är oberoende av den underliggande hårdvaran och det gör det enklare att porta program skrivna i antingen till andra processorer, så länge en tolk har skrivits för den hårdvaran.

Java producerar, när den sammanställs, bytekod som tolkas under körning av en Java Virtual Machine (JVM). Många JVM: er använder en Just-In-Time-kompilator som konverterar bytekod till inbyggd maskinkod och sedan kör den koden för att öka tolkningshastigheten. I själva verket kompileras Java-källkoden i en tvåstegsprocess.

C # sammanställs till Common Intermediate Language (CIL, som tidigare var känt som Microsoft Intermediate Language MSIL. Detta drivs av Common Language Runtime (CLR), som är en del av .NET-ramverket, en miljö som tillhandahåller supporttjänster som skräpsamling och Just -Sammanställning i tid.

Både Java och C # använder speedup-tekniker så den effektiva hastigheten är nästan lika snabb som ett rent sammanställt språk. Om applikationen lägger ner mycket tid på att göra inmatning och utdata som att läsa diskfiler eller köra databasfrågor märks hastigt skillnaden.

Vad betyder detta för mig?

Om du inte har ett mycket specifikt behov av hastighet och måste öka bildhastigheten med ett par bilder per sekund, kan du glömma hastigheten. Någon av C, C ++ eller C # ger tillräcklig hastighet för spel, kompilatorer och operativsystem.