Voordat de Java en C # programmeertalen verschenen, alleen computerprogramma's gecompileerd of geïnterpreteerd. Talen zoals Assembly Language, C, C ++, Fortran, Pascal werden bijna altijd gecompileerd in machinecode. Talen zoals Basic, VbScript en JavaScript werden meestal geïnterpreteerd.
Dus wat is het verschil tussen een samengesteld programma en een geïnterpreteerd programma?
Compileren
Om een programma te schrijven, gaat u als volgt te werk:
- Bewerk het programma
- Compileer het programma in machinecodebestanden.
- Koppel de machinecodebestanden aan een uitvoerbaar programma (ook bekend als een exe).
- Debuggen of het programma uitvoeren
Bij sommige talen zoals Turbo Pascal en Delphi worden stappen 2 en 3 gecombineerd.
Machinecodebestanden zijn op zichzelf staande modules van machinecode die aan elkaar moeten worden gekoppeld om het uiteindelijke programma te bouwen. De reden voor het hebben van afzonderlijke machinecodebestanden is efficiëntie; compilers hoeven alleen maar opnieuw te compileren
broncode die zijn veranderd. De machinecodebestanden van de ongewijzigde modules worden hergebruikt. Dit staat bekend als het maken van de aanvraag. Als u alle broncode opnieuw wilt compileren en opnieuw wilt opbouwen, staat dat bekend als een build.Koppelen is een technisch gecompliceerd proces waarbij alle functieaanroepen tussen verschillende modules aan elkaar worden gekoppeld, waarvoor geheugenlocaties worden toegewezen variabelen en alle code wordt in het geheugen neergelegd en vervolgens als een compleet programma naar de schijf geschreven. Dit is vaak een langzamere stap dan het compileren, aangezien 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
- Bewerk het programma
- Debuggen of het programma uitvoeren
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 regel code opnieuw moet worden gelezen en vervolgens opnieuw moet worden verwerkt.
Voer Java en C # in
Beide talen zijn semi-samengesteld. Ze genereren een tussencode die is geoptimaliseerd voor interpretatie. Deze tussentaal is onafhankelijk van de onderliggende hardware en dit maakt het makkelijker om over te dragen programma's geschreven in een van beide naar andere processors, zolang daarvoor een tolk is geschreven 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 wordt de Java-broncode samengesteld 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 ondersteunende services biedt zoals garbage collection en Just-In-Time-compilatie.
Zowel Java als C # maken gebruik van versnellingstechnieken, dus de effectieve snelheid is bijna net zo snel als een puur gecompileerde taal. Als de applicatie veel tijd besteedt aan invoer en uitvoer, zoals het lezen van schijfbestanden of het uitvoeren van database vragen dan 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.