Programmeertaal
Er zijn in de loop der jaren duizenden[1] programmeertalen ontstaan en zij kunnen op verschillende manieren gecategoriseerd worden. Een veel gebruikt onderscheid is dat van programmeerparadigma. Enkele belangrijke voorbeelden zijn de imperatieve, functionele en logische programmeerparadigma's, waarbij vermeld moet worden dat programmeertalen soms meerdere paradigma's combineren.
Gebruik
Er zijn verschillende manieren waarop een door een softwareontwikkelaar geschreven computerprogramma door een computer uitgevoerd kan worden. De code die de ontwikkelaar ziet en bewerkt, wordt de broncode van de programmatuur genoemd; die moet op de een of andere manier worden omgezet in de machinetaal van de computer in kwestie die door de processor kan worden uitgevoerd. Grosso modo zijn er de volgende mogelijkheden:
Geen omzetting: de programmeur voert machinecode direct in het geheugen van de computer in. Dit is zo onpraktisch en tijdrovend dat het niet of nauwelijks meer gebeurt.
Interpretatie: een interpreter leest stukje bij beetje tekst van de broncode in, interpreteert deze in termen van betekenisvolle instructies en voert die, gesteund door een runtimebibliotheek, direct uit. Een programma dat zo werkt, wordt meestal een script genoemd en de programmeertaal in kwestie een scripttaal.
Assemblage: een assembleertaal maakt het mogelijk om programma's te schrijven als reeksen instructies en gegevens die direct op machinetaal af te beelden zijn, maar waarin op een wat meer symbolische manier gewerkt kan worden, bijvoorbeeld doordat de machine-instructies namen hebben, geheugenadressen namen kunnen krijgen en macro's kunnen worden gebruikt; een assembler zet zulke code om naar bestanden met objectcode, die door een linker samen met de al vooraf aanwezige objectcode van softwarebibliotheken tot een uitvoerbaar programma worden samengesteld.
Compilatie: vertaling van de broncode naar een andere taal (de doeltaal) door een compiler. De doeltaal kan assembleertaal zijn; of een speciaal voor het vertaalproces ontworpen machine-onafhankelijke tussentaal (bytecode, ook wel P-code genoemd), die vervolgens gecompileerd of geïnterpreteerd moet worden; of een andere programmeertaal.
Hiervan bestaan allerlei tussenvormen en varianten.
Een hogere (d.w.z. gecompileerde of geïnterpreteerde) programmeertaal is ontworpen om de programmeur zo helder en elegant mogelijk te laten specificeren wat een programma moet doen in de termen waarin de programmeur over het probleem nadenkt, zonder detailkennis over hoe het precies door de computer uitgevoerd gaat worden: zulke talen bieden abstracties op hoog niveau en zijn machine-onafhankelijk. In assembleertaal wordt alleen geprogrammeerd als er specifieke kennis over de precieze werking van de computer in kwestie gebruikt moet worden, bijvoorbeeld omdat het programma anders te veel ruimte of tijd zou gebruiken.
Is er sprake van compilatie, dan is vaak een onderscheid nodig tussen handelingen verricht tijdens het bewerken van de broncode ('at edit time'), tijdens het vertaalproces van broncode naar doelcode ('at compile time'), en tijdens het uitvoeren van de doelcode ('at run time'). In elk van deze fasen kan software de programmeur ondersteunen, bijvoorbeeld door de geldigheid of zinnigheid van bepaalde bewerkingen of uitdrukkingen te controleren.
Tijdens het vertalen vindt vaak optimalisatie van de code plaats. Een simpel voorbeeld: als tijdens het vertalen blijkt dat er in de doelcode een optelling of aftrekking met 0 ontstaat, kan die worden weggelaten.
Een programma dat met een compiler vertaald is naar doelcode, kan over het algemeen mede door optimalisatie sneller door de computer worden uitgevoerd, dan wanneer gebruikgemaakt wordt van een interpreter, omdat de laatste de opdrachten altijd eerst nog moet omzetten naar machinetaal - het equivalent van de compilatie wordt in run-time gedaan. Veel talen werken echter met een tussenvorm, waarin op het moment dat opdracht tot uitvoering van een programma wordt gegeven, alsnog een compilatie naar tussencode en/of doelcode wordt gedaan: Just-In-Time-compilatie.
Het traditionele onderscheid tussen gecompileerde talen enerzijds en geïnterpreteerde talen (of 'scripttalen') is daarom niet helemaal juist. Is een geïnterpreteerde programmeertaal populair, dan worden er vaak compilers (JIT of anderszins) voor geschreven om de uitvoering te versnellen; ook komt het wel voor dat er een interpreter wordt geschreven voor een tot dan toe alleen gecompileerde taal, of een vertaler van de ene programmeertaal naar de andere.
|