Bytecode
Het begrip bytecode staat tegenover machinetaal: het laatste is een reeks instructies (en bijbehorende gegevens) bedoeld voor een bepaald type processor; bytecode is bedoeld voor een virtuele machine zoals de .net Common Language Runtime (CLR) of de Java Virtual Machine (JVM), die de bytecode uitvoert of op het moment dat de code wordt gebruikt vertaalt in machine instructies (dit laatste heet Just in time'/JIT compilatie)
Deze benadering maakt het mogelijk platform-onafhankelijke programma's te schrijven: op elk platform waarvoor een Virtuele Machine beschikbaar is, kan dan hetzelfde programma worden uitgevoerd.
Voor- en nadelen van bytecode
Een vaak genoemd nadeel van bytecode is dat het langzamer zou zijn dan het uitvoeren van machinecode; de machinecode kan immers direct door de processor worden uitgevoerd. Indien bytecode wordt 'geïnterpreteerd', dan zal deze inderdaad trager zijn (soms wel tot een factor 20) dan machinecode. Indien de bytecode echter van tevoren zou worden omgezet naar machinecode is deze theoretisch gezien even snel. In de Java Virtual Machine wordt Just-in-time compilatie en interpretatie door elkaar gebruikt (Just-in-time voor de kritieke, vaak aangeroepen stukken bytecode).
Een voordeel van bytecode is naast platformonafhankelijkheid dat het in principe specifiek te optimaliseren is voor de hardware waar het op draait. Stel dat een programma geschreven in machinecode is gemaakt voor een bepaalde processor met een snelle instructie X (bijvoorbeeld Intel's SSE-instructies), dan kunnen processors zonder deze instructie X het programma niet uitvoeren, en moet het programma zo worden gecompileerd dat de snelle instructie X niet voorkomt en wordt vervangen door een aantal langzamere instructies die wél op alle processoren werken. Een virtual machine zou pas bij compilatie kunnen kijken welke instructies beschikbaar zijn en de bytecode automatisch kunnen omzetten naar de snelste instructies die beschikbaar zijn op de computer.
Zie ook
- Parallax Propeller, een microcontroller met ingebouwde bytecode interpreter
- Java bytecode