Verschillen tussen compilers en tolken

Voordat de programmeertalen Java en C # verschenen, werden computerprogramma's alleen gecompileerd of geïnterpreteerd. Talen zoals assembler, C, C ++, Fortran en Pascal werden bijna altijd in machinecode gecompileerd. Talen zoals Basic, VbScript en JavaScript werden meestal geïnterpreteerd.

Dus wat is het verschil tussen een gecompileerd programma en een geïnterpreteerd programma??

Het compileren

Om een ​​programma te schrijven, gaat u als volgt te werk:

  1. Bewerk het programma
  2. Compileer het programma in machinecodebestanden.
  3. Koppel de machinecodebestanden in een uitvoerbaar programma (ook bekend als een exe).
  4. Debug of voer het programma uit

Bij sommige talen zoals Turbo Pascal en Delphi worden stappen 2 en 3 gecombineerd.

Machinecodebestanden zijn zelfstandige modules van machinecode die moeten worden gekoppeld om het uiteindelijke programma te bouwen. De reden voor het hebben van afzonderlijke machinecodebestanden is efficiëntie; compilers hoeven alleen de gewijzigde broncode opnieuw te compileren. De machinecodebestanden van de ongewijzigde modules worden opnieuw gebruikt. Dit staat bekend als het maken van de applicatie. Als u alle broncode opnieuw wilt compileren en opnieuw opbouwen, wordt dit een build genoemd.

Koppelen is een technisch gecompliceerd proces waarbij alle functieaanroepen tussen verschillende modules aan elkaar worden gekoppeld, geheugenlocaties worden toegewezen voor variabelen en alle code in het geheugen wordt opgeslagen en vervolgens als een volledig programma op schijf wordt geschreven. Dit is vaak een langzamere stap dan compileren, omdat alle machinecodebestanden in het geheugen moeten worden gelezen en aan elkaar moeten worden gekoppeld.

Tolken

De stappen om een ​​programma via een tolk uit te voeren zijn

  1. Bewerk het programma
  2. Debug of voer het programma uit

Dit is een veel sneller proces en het helpt beginnende programmeurs hun code sneller te bewerken en te testen dan met een compiler. Het nadeel is dat geïnterpreteerde programma's veel langzamer werken dan gecompileerde programma's. Maar liefst 5-10 keer langzamer omdat elke coderegel opnieuw moet worden gelezen en vervolgens opnieuw moet worden verwerkt.

Voer Java en C # in

Beide talen zijn semi-gecompileerd. Ze genereren een tussenliggende code die is geoptimaliseerd voor interpretatie. Deze intermediaire taal is onafhankelijk van de onderliggende hardware en dit maakt het gemakkelijker om programma's te porten die in een van beide processors zijn geschreven, zolang er een tolk is geschreven voor die hardware.

Java, wanneer gecompileerd, produceert bytecode die tijdens runtime wordt geïnterpreteerd door een Java Virtual Machine (JVM). Veel JVM's gebruiken een Just-In-Time-compiler die bytecode converteert naar native machinecode en die code vervolgens uitvoert om de interpretatiesnelheid te verhogen. In feite is de Java-broncode gecompileerd in een proces in twee fasen.

C # is gecompileerd in Common Intermediate Language (CIL, voorheen bekend als Microsoft Intermediate Language MSIL. Dit wordt beheerd door de Common Language Runtime (CLR), onderdeel van het .NET framework, een omgeving die ondersteuningsservices biedt zoals garbage collection en Just -In-Time compilatie.

Zowel Java als C # maken gebruik van speedup-technieken, dus de effectieve snelheid is bijna net zo snel als een puur gecompileerde taal. Als de toepassing veel tijd besteedt aan invoer en uitvoer, zoals het lezen van schijfbestanden of het uitvoeren van databasequery's, is het snelheidsverschil nauwelijks merkbaar.

Wat betekent dit voor mij?

Tenzij u een zeer specifieke behoefte aan snelheid heeft en de framesnelheid met een paar frames per seconde moet verhogen, kunt u de snelheid vergeten. Elk van C, C ++ of C # biedt voldoende snelheid voor games, compilers en besturingssystemen.