Wat is een tussenliggende taal?
In computerprogrammering, wanneer door de mens leesbare broncode wordt geparseerd door een compiler, vertaalt de compiler vaak de bronopdrachten in een reeks instructies die niet helemaal native machine-code zijn, maar die verder kunnen worden verwerkt, geoptimaliseerd of gecompileerd door de compiler of andere software hulpmiddelen. De bestanden die worden geproduceerd, bevatten instructies waarvan wordt gezegd dat ze in een tussenliggende taal zijn, omdat de taal die door de compiler wordt gebruikt niet van betekenis is voor het grotere besturingssysteem noch de taal die wordt gebruikt door de programmeur om de code in de eerste plaats te schrijven, maar in plaats daarvan is een taal die fungeert als een brug tussen het schrijven en uitvoeren van het programma. Soms wordt een tussentaal gebruikt om een compiler in staat te stellen zeer precieze optimalisaties te maken zodat het programma efficiënter werkt, maar het kan ook worden gebruikt om uitvoerbestanden te produceren die draagbaar zijn tussen verschillende, incompatibele systemen. De werkelijke syntaxis van de taal kan lijken op machinecode of andere typen niet-menselijke leesbare bytecode, of de taal kan gewoon een bestaande platformonafhankelijke computerprogrammeertaal zijn.
Bij gebruik voor compileroptimalisatie neemt een taalcompiler elke instructie in een broncodebestand en splitst het commando op in de tussenliggende taal. Een enkele door de mens leesbare programmeerverklaring kan worden opgesplitst in tientallen instructies voor machinetaal, dus de tussenliggende taal creëert een abstractieniveau dat de compiler kan gebruiken om delen van de code te identificeren waar optimalisaties kunnen worden gemaakt zonder eerst de code te binden native implementaties of bibliotheken. Eenmaal voltooid, kan het intermediaire codebestand vervolgens verder worden gecompileerd om een native binair bestand te maken, of het kan worden uitgevoerd door een ander programma, bekend als een interpreter, dat de code zal uitvoeren door het naar behoefte in native instructies te compileren.
Sommige talen, zoals Java®, gebruiken een tussentaal om gecompileerde bestanden te maken die zijn geoptimaliseerd maar ook draagbaar voor andere computersystemen. Dit type code wordt soms bytecode genoemd en lijkt op machinecode of assembleertaal. Bytecode wordt opgeslagen in bestanden op een platformonafhankelijke manier, wat betekent dat het kan worden overgebracht naar elk computersysteem of apparaat waarop een tolk kan worden uitgevoerd. Zodra de bytecode zich op een systeem bevindt, kan het worden uitgevoerd als een geïnterpreteerd programma of kan het worden gecompileerd om native op het doelsysteem te worden uitgevoerd.
In sommige gevallen is een computertaal ontworpen om het programmeren naar een specifiek doel te vergemakkelijken, zoals een interactieve webtoepassing, maar de ontwerpers willen geen aangepaste compilers, tolken of plug-ins voor verschillende systemen opnemen. In deze gevallen kan de tussentaal van de compiler een bestaande taal zijn die al platformonafhankelijke tolken heeft. De resulterende intermediaire taal is in dit geval leesbaar voor mensen. Een voorbeeld van een computerprogrammeertaal die ook als tussentaal wordt gebruikt, is JavaScript®, dat vanaf 2011 in bijna elke webbrowser op elk platform kan worden uitgevoerd.