Skillnader mellan kompilatorer och tolkar

Innan Java och C # programmeringsspråk dök upp, datorprogram var bara sammanställt eller tolkad. 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 igen källkod som har förä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.

instagram viewer

Länkning är en tekniskt komplicerad process där alla funktionssamtal mellan olika moduler kopplas samman, minnesplatser tilldelas variabler och all kod läggs ut i minnet och skrivs sedan 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 programmerare 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 hamna program skrivna i antingen till andra processorer, så länge en tolk har skrivits för det hårdvara.

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-In-Time-sammanställning.

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 spenderar mycket tid på att göra inmatning och utdata som att läsa diskfiler eller köra databas frågar då är hastighetsskillnaden knappt märkbar.

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.

instagram story viewer