Antwoord
Dag Daan,
het is eigenlijk gek dat je een verschil maakt tussen een kunstmatige taal, een computertaal en een machinetaal, want die 3 dingen overlappen heel sterk.
Dus laat ons beginnen met die dingen wat preciezer te definieren.
- een kunstmatige taal is voor mij een taal die niet natuurlijk is, waarbij ik een natuurlijke taal zie als iets levend waarmee mensen zich min of meer spontaan uitdrukken.
Je zou kunnen zeggen dat een taal die iemands moedertaal is of is geweest, een natuurlijke taal is. Voorbeelden zijn alle dialecten en de "officiële" talen van een land, zoals Nederlands, Duits, Frans, ... Ook Latijn valt hier onder alhoewel er waarschijnlijk niet veel mensen zijn die nu nog Latijn als moedertaal hebben, maar het is ooit wel een moedertaal geweest.
Esperanto zou ik onder kunstmatige taal klasseren omdat de taal geconstrueerd is door mensen en die geëvolueerd uit een natuurlijke omgeving.
Programmeertalen zijn kunstmatige talen, maar niet alle kunstmatige talen zijn programmeertalen (bv. Esperanto of geheimtalen).
- Een computertaal definiëren vind ik moeilijk. Je kan hiermee de taal bedoelen waarmee computers teksten voorlezen: dat taaltje klinkt meestal toch anders dan hoe wij zelf praten. Je kan hiermee ook de taal bedoelen waarmee je tegen computers kan praten om die handelingen laten uit te voeren. Er zijn bv. robots die je met spraak kan aansturen "links"-"rechts"-"ga"-"stop". Maar je bedoelt waarschijnlijk geen van beiden. Je kan ook een taal bedoelen waarmee computers onderling communiceren, bv. om boodschappen uit te wisselen. XML zou zo'n voorbeeld kunnen zijn.
Kortom "computertaal" zou ik niet gebruiken in de context die je bedoelt. Ik denk dat je eigenlijk "programmeertaal" bedoelt: de taal waarin je een programma voor een computer schrijft.
- Machinetaal definiëren lukt wel goed: dat is de taal die rechtstreeks door de processor van een computer begrepen wordt. Dit noemen we ook wel de instructieset van een processor. Het moge duidelijk wezen dat dit afhankelijk is van processor tot processor. Een ARM heeft een andere instructieset dan een Pentium, een Motorola 68000 (uit mijn jeugd ;-) of een i7.
- Maar je bent eigenlijk nog een extra "taal" vergeten: "bytecode". Dit is een taal die niet begrepen wordt door de processor zelf, maar wel door een virtuele machine. De virtuele machine kan dan de bytecode uitvoeren door deze te vertalen naar de machinetaal van de onderliggende computer. De "Java Virtuele Machine" (JVM genoemd) is hiervan een voorbeeld. De mensen van Oracle hebben voor elk soort computer (Mac, Windows, Linux, Android en nog veel andere embedded devices) een virtuele machine gemaakt die Java-bytecode kan uitvoeren.
En met deze definities kunnen we een compiler definiëren als een programma dat code geschreven in een programmeertaal omzet in een andere programmeertaal, een vertaalprogramma dus.
Meestal ga je een programma in een 'hogere' programmeertaal omzetten in een 'lagere' programmeertaal. Met een "hogere" programmeertaal bedoelen we dan een programmeertaal waar je grotere concepten in kan toepassen en "dichter bij de mensentaal" kan programmeren. Je kan wel begrijpen dat dit een relatief vage definitie is en dat mensen kunnen discussieren over welke taal "hoger" is, maar het is in ieder geval wel duidelijk dat machinetaal een bytecode heel lage talen zijn in de zin dat het niet meer nodig is om die nog verder te vertalen. Maar je zou perfect een compiler kunnen schrijven die machinetaal compileert naar Java of C++. Of dat mooie resultaten zou geven, is een andere vraag, maar het kan.
In de praktijk zullen de nuttigste compilers een (hogere) programmeertaal vertalen naar ofwel machinetaal ofwel bytecode. Compilers voor meer experimentele talen gaan eerst vertalen naar een populaire taal waarna die compiler vertaalt naar uitvoerbare code.
Merk op dat er heel gekke programmeertalen zijn, bv. ArnoldC gebaseerd op de online van Arnold Schwarzenegger.
Reacties op dit antwoord
Er zijn nog geen reacties op deze vraag.
Enkel de vraagsteller en de wetenschapper kunnen reageren op een antwoord.