Wikisage is op 1 na de grootste internet-encyclopedie in het Nederlands. Iedereen kan de hier verzamelde kennis gratis gebruiken, zonder storende advertenties. De Koninklijke Bibliotheek van Nederland heeft Wikisage in 2018 aangemerkt als digitaal erfgoed.
- Wilt u meehelpen om Wikisage te laten groeien? Maak dan een account aan. U bent van harte welkom. Zie: Portaal:Gebruikers.
- Bent u blij met Wikisage, of wilt u juist meer? Dan stellen we een bescheiden donatie om de kosten te bestrijden zeer op prijs. Zie: Portaal:Donaties.
Programmeertaal
Een programmeertaal is een formele taal waarin de opdrachten die een computer moet uitvoeren, worden geschreven. Deze talen hebben een andere syntaxis en grammatica dan natuurlijke talen. Deze laatste zijn te complex en ambigu om als programmeeraal te fungeren. Code die in een programmeertaal geschreven is, dient maar op één manier te kunnen worden 'begrepen' door de computer.
Programmeerparadigma
Zie Programmeerparadigma voor het hoofdartikel over dit onderwerp. |
Er zijn in de loop der jaren veel verschillende programmeertalen ontstaan en zij kunnen op verschillende manieren gecategoriseerd worden. Een veel gebruikt onderscheid is dat van programmeerparadigma. Enkele belangrijke voorbeelden zijn het objectgeoriënteerde, imperatieve, functionele en logische programmeerparadigma.
Gebruik
Nadat een programma in de computer is ingevoerd, kan deze het op vier verschillende manieren uitvoeren:
- direct: wanneer het programma is geschreven in de machinetaal van de betrokken computer, kunnen de instructies direct uitgevoerd worden.
- via een interpreter: met behulp van een interpreter voor de programmeertaal worden de instructies sequentieel omgezet in machinecode en direct uitgevoerd.
- na compilatie: met behulp van een compiler voor de programmeertaal worden de instructies eerst alle omgezet in machinetaal die door de processor in de computer direct kunnen worden begrepen, waarna deze instructies kunnen worden uitgevoerd.
- via tussencode: met behulp van een compiler voor de programmeertaal worden de instructies omgezet in een tussencode (bytecode, ook wel P-code genoemd), een speciale interpreter voor die bytecode voert dan deze instructies uit.
Een programma dat met een compiler wordt vertaald, kan over het algemeen sneller door de computer worden uitgevoerd dan wanneer gebruikgemaakt wordt van een interpreter, aangezien een interpreter de opdrachten eerst nog moet omzetten naar machinetaal. Programmeertalen worden over het algemeen óf altijd met een compiler óf altijd met een interpreter gebruikt.
Definitie
Onder programmeertalen worden, in de normaal gebruikte definitie, talen verstaan die turingvolledig zijn. Dat wil zeggen dat het mogelijk moet zijn om in de programmeertaal een interpreter voor een Turingmachine te schrijven, en het moet mogelijk zijn een interpreter te schrijven voor de programmeertaal op een Turingmachine. Het begrip Turing betekent in feite dat een taal zijn eigen commando's kan begrijpen.
In een taal die niet Turingvolledig is, kan een kleiner aantal problemen opgelost worden dan in een Turingvolledige taal. In SQL kan men bijvoorbeeld wel totalen van tabellen met gegevens berekenen, maar men kan bijvoorbeeld niet berekenen wat de kortste route tussen twee punten in een graaf is.
Elementen
In de meeste talen worden woorden (sleutelwoorden) gebruikt met een bepaalde betekenis. Deze woorden zijn steeds uit het Engels afkomstig. Programmeertalen komen vaak niet alleen qua paradigma (uitdrukkingsmethodiek van programma's), maar ook qua syntaxis en sleutelwoorden deels met andere talen overeen, zodat de kenner van een programmeertaal niet al te veel moeite zal hebben met het leren van een verwante taal.
Kenmerkend voor een imperatieve programmeertaal zijn sleutelwoorden zoals:
- IF. Hierna komt een voorwaarde en een statement dat voorwaardelijk uitgevoerd moet worden. Na de voorwaarde komt soms het woord THEN (ook wel eens DO). Na het voorwaardelijk uit te voeren statement komt eventueel ELSE gevolgd door een statement dat wordt uitgevoerd als niet aan de voorwaarde is voldaan.
- FOR (soms DO). Hierna komt een statement dat herhaaldelijk uitgevoerd moet worden (een iteratie. Er wordt gebruik gemaakt van een lopende variabele die na elke iteratie verhoogd of verminderd wordt tot dat een bepaalde waarde is gebruikt.
- WHILE. Ook dit is een iteratie, maar zonder lopende variabele. Het statement wordt uitgevoerd totdat er niet meer aan een voorwaarde voldaan is.
- BEGIN en END. Deze sleutelwoorden dienen om een aantal statements te groeperen tot een blok. Zo'n blok vormt op zich ook een statement.
- GOTO. Hier springt de uitvoering van het programma naar een ander statement. Dat andere statement is gemarkeerd met een label. Bijna alle programmeertalen kennen GOTO, maar het gebruik ervan wordt in de moderne programmeerpraktijk afgeraden.
- BREAK. Dient om een iteratie voortijdig te beëindigen.
- CALL. Aanroep van een subroutine. De uitvoering gaat verder met de subroutine. Is de subroutine voltooid, dan wordt de uitvoering hervat bij het statement na CALL.
Een programmeertaal bevat verder identifiers. Een identifier is door de programmeur bedachte naam. In veel talen is het niet toegestaan bestaande sleutelwoorden als identifier te gebruiken, in andere talen mag het wel.
Geschiedenis
Het is mogelijk om computers direct in hun eigen machinetaal te programmeren: direct de enen en nullen te specificeren die door de processor kunnen worden begrepen. Dit was voor de eerste computers gebruikelijk, met schakelaartjes werden groepen van 8 bits ingesteld. Men ondervond echter snel dat het veel te lastig was om programma's die op die manier waren geschreven, te onderhouden. Snel werd er daarom een symbolische manier bedacht om de machine-instructies als tekst weer te geven in de vorm van mnemonics. Zo werd het mogelijk om instructies veel eenvoudiger te lezen. Deze code, die nog wel een-op-een met de instructiecodes overeen komt, noemt men assembler.
Voor het programmeren van assembler en machinetaal moet de programmeur heel veel weten van de computer die hij wil programmeren. Om programmeren makkelijker te maken, zijn daarna andere programmeertalen, de zogenaamde hogere programmeertalen ontwikkeld. Hoe hoger de orde, hoe verder de taal van de machine-instructies af staat. Een imperatieve programmeertaal (zoals Pascal en C) staat bijvoorbeeld dichter bij de machine-instructies dan een functionele programmeertaal (zoals Scheme en Haskell). Een functionele programmeertaal sluit meer aan bij het denken van de mens dan bij de interne werking van de computer. Zo is het in Haskell mogelijk om 'normale' wiskundige definities te gebruiken.
Programmeertalen worden ook wel onderverdeeld in generaties:
- Eerste generatie: machinetaal.
- Tweede generatie: assembler (de kale machine-instructies, maar leesbaar neergezet).
- Derde generatie: procedurele talen als COBOL, Algol, C en Fortran, en later ook objectgeoriënteerde talen zoals C++ en Java.
- Vierde generatie: Talen met een hoger abstractieniveau die voor een bepaald doel zijn ontwikkeld, zoals bijvoorbeeld SQL.
- Vijfde generatie: Probleemoplossende talen. Hierbij specificeert de programmeur geen algoritme maar het probleem zelf, met een aantal bijbehorende beperkingen. Vijfde generatie-talen worden vooral gebruikt op het gebied van kunstmatige intelligentie. Het bekendste voorbeeld is Prolog.
De generaties worden vaak afgekort als GL, bijvoorbeeld 3GL, als afkorting van 3rd Generation Language(s).
Er zijn honderden programmeertalen bedacht, maar die worden niet allemaal frequent gebruikt. Veel zijn specifiek voor één doel ontworpen. Een van de eerste hogere programmeertalen was Plankalkül, in 1946 ontwikkeld door de Duitser Konrad Zuse.
Om programmeertalen te beschrijven, is een meta-taal bedacht: BNF of Backus Naur Form.
Bij het ontwikkelen van software in een bepaalde programmeertaal kan de programmeur gebruikmaken van een software-ontwikkelomgeving.
Zie ook
Overzicht van programmeertalen |
---|
Ada · ALGOL · APL · AWK · Assembler · BASIC · C · C++ · C# · COBOL · D · Eiffel · F# · Fortran · Haskell · J# · Java · JavaScript · Lisp · Logo · ML · Modula-2 · Oberon · Object Pascal · Ocaml · Pascal · Perl · PHP · PL/I · Prolog · Python · Ruby · Scheme · Simula · Smalltalk · Visual Basic |