Een programmeertaal is een taal die gebruikt wordt om een reeks opeenvolgende acties te beschrijven die door een computer moeten worden uitgevoerd.
Een programmeertaal is daarom een praktische manier voor ons (mensen) om instructies te geven aan een computer. Programmeertalen worden ook wel 'kunstmatige talen' genoemd.
Aan de andere kant wordt met de term 'natuurlijke taal' een communicatiemiddel bedoeld dat gedeeld wordt door een groep personen (bijvoorbeeld: Engels of Nederlands).
De talen die computers gebruiken om met elkaar te communiceren, hebben niets te maken met programmeertalen, noch met natuurlijke talen. Computers communiceren onderling namelijk via communicatieprotocollen. Beide concepten zijn heel verschillend.
De werking van een programmeertaal is zeer strikt: IEDERE instructie correspondeert met ÉÉN actie.
De taal die gebruikt wordt door de processor wordt machinetaal genoemd. De code die de processor bereikt, bestaat uit een reeks van nullen en enen, dat binaire wordt genoemd. Machinetaal is voor mensen erg lastig te begrijpen, daarom zijn er zogenoemde 'tussentalen' ontwikkeld die door mensen begrepen kunnen worden. De code die in dit type taal wordt geschreven, wordt getransformeerd tot machinetaal zodat de processor het kan verwerken.
De assembleertaal was de eerste programmeertaal die ooit gebruikt werd. Deze taal lijkt sterk op machinetaal, maar kan wel begrepen worden door ontwikkelaars. Desalniettemin lijkt deze taal zo erg op machinetaal dat het sterk afhangt van het soort processor dat gebruikt wordt (elke soort processor heeft zijn eigen machinecode). Dus een programma dat ontwikkeld is voor de ene processor, zal wellicht niet toegankelijk zijn voor een andere processor. De term portabiliteit beschrijft de mogelijkheid om een programma te gebruiken op verschillende soorten computers. Een programma dat geschreven is in assembleertaal, zal in sommige gevallen compleet moeten worden herschreven om te kunnen werken op een ander type computer.
Programmeertalen hebben als voordeel dat ze beter te begrijpen zijn dan machinetaal. Daarnaast zorgen ze voor meer portabiliteit. Dat wil zeggen dat de taal gemakkelijk kan worden aangepast om te kunnen werken op verschillende typen computers
Programmeertalen worden over het algemeen verdeeld in twee taalgroepen: imperatieve en functionele talen.
Een imperatieve taal programmeert met behulp van een reeks opdrachten, gegroepeerd in blokken en bestaande uit conditionele statements die ervoor zorgen dat het programma kan terugkeren naar een blokje met opdrachten als er aan de voorwaarde is voldaan. Imperatieve talen zijn de eerste programmeertalen die gebruikt werken. Zelfs nu gebruiken vele moderne talen nog steeds dit principe. Gestructureerde imperatieve talen lijden echter aan een gebrek aan flexibiliteit door de volgtijdelijkheid van de instructies.
Een functionele programmeertaal (vaak ook 'proceduretaal' genoemd) is een taal die programma's creëert met behulp van functies, die zich telkens weer in een andere vorm van output vertalen, en weer input ontvangen als resultaat van andere functies. Wanneer een functie een beroep op zichzelf doet, noemen we dit recursie.
Naast de bovengenoemde taalgroepen, kunnen programmeertalen in twee verschillende categorieën verdeeld worden: geïnterpreteerde en gecompileerde talen.
Een programmeertaal is per definitie anders dan een machinetaal. Deze moet daarom vertaald worden, zodat de processor de taal kan begrijpen. Een programma dat geschreven wordt in een geïnterpreteerde taal heeft een extra programma nodig (de interpreteerder) die de opdrachten van het programma naar behoefte vertaalt.
Feitelijk betekent geïnterpreteerde taal dat iedereen de geheimen van een programma kan achterhalen en het programma dus kan kopiëren of wijzigen. Er is daarom een risico op schending van copyright. Aan de andere kant hebben bepaalde beveiligde applicaties een beveiligingscode om illegaal kopiëren te vermijden (banktransacties, online betalingen, beveiligde communicatie etc.).
Een programma dat geschreven is in een gecompileerde taal wordt vertaald door een extra programma wat een compiler genoemd wordt. Deze creëert op zijn beurt een nieuw opzichzelfstaand bestand dat uitvoerbaar is zonder dat het een ander programma nodig heeft. Een dergelijk bestand noemen we een uitvoerbaar bestand.
Een programma dat geschreven is in gecompileerde taal heeft het voordeel dat het geen ander programma nodig heeft om te kunnen draaien, nadat het gecompileerd is. Aangezien de vertaling maar een keer gedaan hoeft te worden tijdens het compileren, is het sneller uit te voeren.
Gecompileerde taal is echter niet altijd even flexibel als geïnterpreteerde taal, aangezien iedere wijziging van het bronbestand (het bestand dat begrijpelijk is voor mensen) betekent dat het programma opnieuw gecompileerd moet worden, voordat de wijzigingen worden doorgevoerd. Aan de andere kant heeft een gecompileerd programma het voordeel de veiligheid van de broncode te kunnen garanderen.
Sommige talen zijn in beide categorieën te plaatsen (LISP, Java, Python etc.) aangezien het programma dat geschreven is in deze talen in sommige gevallen een extra compilatiefase ondergaat in het bestand dat geschreven is in een taal die anders is dan het bronbestand en niet-uitvoerbaar is, en op zijn beurt dus een interpreteerder vereist. Java-applets en kleine programma's die vaak in een webbrowser draaien, zijn een goed voorbeeld van gecompileerde bestanden die alleen uitgevoerd kunnen worden binnen een webbrowser. Deze bestanden zijn te herkennen aan de class-extensie.
Hieronder een aantal gangbare programmeertalen:
Taal | Belangrijkste applicatiegebied | Gecompileerd/geïnterpreteerd |
---|---|---|
ADA | Real-time | Gecompileerde taal |
BASIC | Programmering voor educatieve doeleinden | Geïnterpreteerde taal |
C | Systeemprogrammering | Gecompileerde taal |
C++ | Objectgeoriënteerd programmeren | Gecompileerde taal |
COBOL | Management | Gecompileerde taal |
Fortran | Rekenwerk | Gecompileerde taal |
Java | Objectgeoriënteerde programmeertaal | Tussentaal |
MATLAB | Wiskundige berekeningen | Geïnterpreteerde taal |
Mathematica | Wiskundige berekeningen | Geïnterpreteerde taal |
LISP | Kunstmatige intelligentie | Tussentaal |
Pascal | Educatie | Gecompileerde taal |
PHP | Ontwikkeling dynamische website | Geïnterpreteerde taal |
Prolog | Kunstmatige intelligentie | Geïnterpreteerde taal |
Perl | Verwerking tekenreeksen | Geïnterpreteerde taal |
Afbeelding: © kbuntu - 123RF.com