Er zijn veel manieren om programmeertalen te onderscheiden. Om te beginnen vallen ze in verschillende paradigma's: functioneel, objectgericht en meer.
Je kunt een programmeertaal ook classificeren op basis van de vertaalmethode, iets dat een groot effect heeft op de prestaties van een taal. Gecompileerde programmeertalen zijn meestal sneller dan geïnterpreteerde. Dus in situaties zoals game-ontwikkeling die snelheid vereisen, hebben ontwikkelaars de neiging om gecompileerde talen te gebruiken.
Wat is vertalen?
Het vertaalproces zet code die door een programmeur is geschreven, om in machinecode die door een computer kan worden uitgevoerd. Machinecode is een soort taal op laag niveau, met enen en nullen. Dus wat de vertaler doet, is de code op hoog niveau die u in een programmeertaal maakt, converteren naar machinecode.
Zonder vertalers zou je in machinetaal moeten coderen. Elke programmeertaal op hoog niveau die u kent, gebruikt een van de drie vertaalmethoden: een compiler, een tolk of een hybride van beide.
Wat is een compiler?
Een compiler is software die broncode die in een taal op hoog niveau is geschreven, omzet in code op laag niveau voor uitvoering.
Het bovenstaande diagram vertegenwoordigt een compiler in zijn meest elementaire vorm. De compiler kent verschillende fasen. Elke fase transformeert de code van de ene toestand naar de andere. Het doel van elke compilerfase is om een uitvoer te creëren die de volgende fase gemakkelijker kan manipuleren. De algemene structuur van een compiler is als volgt:
- Scanner: deze fase neemt een stroom karakters en groepeert ze in tokens die identifiers, letterlijke tekenreeksen, enzovoort vertegenwoordigen.
- Parser: deze fase groepeert de tokens op basis van de grammatica van de bronprogrammeertaal. Het creëert een abstracte syntaxisboom die een verzameling uitdrukkingen is waaruit het programma bestaat.
- Semantiek: deze fase voert een semantische analyse uit op de abstracte syntaxisboom (AST). Het gebruikt de regels van de brontaal om betekenis toe te voegen door typen toe te wijzen aan de AST-uitdrukkingen en hun geldigheid te controleren. De AST wordt dan een tussenvertegenwoordiging.
- Intermediate Representation (IR): deze fase zet de broncode van het oorspronkelijke programma om in machinecode. Het produceert een vereenvoudigde versie van de assemblagecode. De IR gebruikt een of meer optimizers om de IR-code te verbeteren en om informatie te verzamelen voor de machine waarop hij draait. Een optimizer kan een programma efficiënter, sneller of zelfs kleiner maken.
- Code Generator: deze fase verbruikt de geoptimaliseerde IR-code en zet deze om in machinecode.
Welke programmeertalen gebruiken compilers?
Enkele populaire gecompileerde programmeertalen zijn:
- C
- C++
- Gaan
- Ada
- fortran
- COBOL
- Lisp
- Doelstelling C
- Snel
Een voordeel van het gebruik van een gecompileerde taal is dat het fouten tijdens het compileren identificeert. Hiermee kunt u dergelijke fouten oplossen en vervolgens proberen het programma opnieuw te compileren. Gecompileerde talen zullen minder snel mislukken zodra ze met de uitvoering beginnen. Deze talen zullen zelfs geen programma genereren om uit te voeren als de broncode syntaxisfouten bevat. Maar semantische fouten en andere vormen van runtime-bugs zullen er voorbij komen.
Gecompileerde talen worden ook zeer snel uitgevoerd nadat ze zijn gecompileerd.
Wat is een tolk?
Een tolk is een programma dat een enkele regel code tegelijk vertaalt en uitvoert. Dit proces herhaalt zich totdat de interpreter bij de laatste regel code in het gegeven programma of script aankomt.
Zoals u in het bovenstaande diagram kunt zien, heeft een tolk twee invoer nodig. Ten eerste is de volledige broncode (programma) nodig. Het leest dan de eerste regel van het programma (als invoer), vertaalt en voert het uit. Als die regel correct wordt uitgevoerd, gaat hij verder naar de volgende regel in het programma of script.
In tegenstelling tot een compiler vertaalt een interpreter niet een volledig programma in machinecode. In plaats daarvan parseert en analyseert het een bepaalde regel code voordat het wordt uitgevoerd. Een interpreter zou een programma moeten beginnen te draaien - vooral een groter programma - voordat een compiler het zelfs maar heeft vertaald.
Welke programmeertalen gebruiken tolken?
Enkele populaire geïnterpreteerde programmeertalen zijn:
- Python
- JavaScript
- Perl
- MATLAB
- BASIS
Hoewel een interpreter code sneller begint uit te voeren, zal het nog steeds mislukken als er een fout wordt aangetroffen. Als programmeur zou u een dergelijke fout moeten herstellen en het programma opnieuw moeten opstarten. Deze gebeurtenis vindt elke keer plaats wanneer de interpreter een nieuwe fout tegenkomt. Sommige fouten kunnen sluimerend zijn als ze betrekking hebben op een zeldzame reeks omstandigheden. In dergelijke gevallen, testen is belangrijker dan ooit.
Tolken zijn meestal gemakkelijker te ontwikkelen dan compilers, en hun programma's zijn qua ontwerp draagbaarder.
Wat is hybride vertaling?
Hybride vertaling maakt gebruik van een compiler en een tolk. Hybride vertaling compileert broncode op hoog niveau naar een vorm op een lager niveau, zoals bytecode. Het gebruikt dan een interpreter om die bytecode uit te voeren.
Hybride vertaling kan van de ene programmeertaal tot de andere verschillen, maar zal deze algemene structuur gebruiken. Een van de meer populaire programmeertalen die hybride vertaling gebruiken, is Java. De Java-compiler vertaalt zijn broncode naar: Java Virtual Machine (JVM) bytecode. De tolk vertaalt vervolgens de JVM-bytecode naar machinecode.
Welke programmeertalen gebruiken hybride vertaling?
Enkele populaire hybride programmeertalen zijn:
- Java
- C#
- Visuele Basis
- Erlang
- F#
Met hybride vertaling krijgt u het beste van twee werelden. Door de code eerst te compileren, kunt u bugs zo snel mogelijk oplossen. De bytecode die hybride compilers maken, is gemakkelijker te interpreteren dan een programmabroncode op hoog niveau.
De waarde van het kennen van de verschillende vertaalmethoden
U moet de specifieke vertaalmethode begrijpen die een taal gebruikt, vooral als u deze voor een nieuw project gebruikt. Een taalvertaalmethode is een belangrijk onderdeel van de identiteit van een programmeertaal. Het kan invloed hebben op hoe u uw programma distribueert en hoe gebruikers het zullen uitvoeren.
Elke vertaalaanpak heeft zijn eigen verdiensten. Topprogrammeertalen zoals C++, Python en Java gebruiken allemaal verschillende vertaalmethoden. Naast het paradigma van een taal, is de vertaalmethode een van de belangrijkste eigenschappen waarvan u zich bewust moet zijn.
Er zijn verschillende paradigma's die een programmeertaal kan gebruiken. De meeste van de beste programmeertalen zijn multiparadigmatalen; ze ondersteunen het gebruik van twee of meer verschillende paradigma's. Drie van de meest populaire paradigma's zijn imperatief, objectgeoriënteerd en functioneel programmeren.