Wat zijn compilers? - 1

"Hallo Amigo. Ik ben professor Hans Uilemans. Ik ben hoofd van de Wetenschappelijke Raad aan boord van de Galactische Galei. Bovendien houd ik toezicht op onze inspanningen om jou te leren programmeren in Java."

"Hallo professor Uilemans."

"Ik zal je uitleggen waarom Java zo'n prachtige programmeertaal is.

Je zult nog vaak te horen krijgen dat Java een uniek voordeel heeft: het is een heel erg platformonafhankelijke taal. Wat is dat en wat heeft dat voor nut, denk je nu misschien. Ik zal het je via een omweg uitleggen.

Een computer kan eigenlijk alleen maar heel erg simpele numerieke instructies uitvoeren. Wanneer we honden trainen, geven we commando's zoals 'zit!' of 'blijf!' om de hond iets te laten doen.

Bij computers hebben die instructies de vorm van getallen. Elke instructie wordt aangegeven door een bepaalde getalcode (ook wel 'machinecode' genoemd).

Maar voor mensen is het heel moeilijk om te programmeren als je alleen maar getalcodes kunt gebruiken. Daarom hebben we programmeertalen en compilers uitgevonden. Een programmeertaal is begrijpelijk voor mensen en voor compilers. Een compiler is een speciaal programma om een programma dat in een programmeertaal is geschreven, te vertalen naar een reeks machinecodes, zodat een computer er iets mee kan aanvangen.

Een programmeur schrijft een programma meestal in een aantal bestanden met programmacode in een programmeertaal. Vervolgens gebruikt hij of zij een compiler om die programmacode te vertalen naar één enkel bestand met machinecode. Dat is het uiteindelijke (gecompileerde) programma.

  • Programma in C++
  • Compiler
  • Machinecode

Het gecompileerde programma kan direct door de computer worden uitgevoerd. Maar het slechte nieuws is dat de code in het gecompileerde programma sterk afhangt van de processor en het besturingssysteem van de computer. Dit betekent dat een programma dat is gecompileerd voor een Windows-computer, nooit zal werken op een Android-smartphone."

"Dus als ik een programma schrijf en dat compileer voor Android, werkt het niet in Windows?"

"Precies."

"Ik snap het."

"Maar Java pakt het veel slimmer aan!

  • Programma in Java
  • Java-compiler
  • Speciale platformonafhankelijke code (bytecode)
  • JVM
  • Machinecode

Een Java-compiler compileert niet alle klassen naar één groot programma in machinecode. In plaats daarvan worden alle klassen apart gecompileerd. Bovendien worden ze niet naar machinecode vertaald, maar naar een speciale tussencode: de bytecode. De bytecode wordt pas naar machinecode vertaald wanneer het programma wordt gestart."

"Ja, maar wie compileert het programma dan naar machinecode wanneer het wordt uitgevoerd?"

"Daar is een speciaal programma voor, dat we de Java Virtual Machine (JVM) noemen. De Java Virtual Machine moet eerst worden gestart voordat je een programma in bytecode kunt uitvoeren. De JVM vertaalt de bytecode naar machinecode voordat het programma wordt uitgevoerd."

"Bijzonder hoor. Maar waar dient dat voor?"

"Nou, dit is een heel krachtige aanpak en één van de redenen waarom Java zo dominant is.

Hierdoor kunnen Java-programma's worden uitgevoerd op zo'n beetje alle soorten apparaten die er zijn, van computers en smartphones tot pinautomaten, broodroosters en creditcards!"

"Wauw!"

"Deze aanpak heeft heel veel voordelen. Het is de reden waarom alle Android-programma's in Java worden geschreven. Onder andere dankzij de snelle opkomst van de mobiele telefoon is Java verschillende softwaresectoren gaan domineren:

1) Enterprise: zware, op servers uitgevoerde applicaties voor banken, beleggingsmaatschappijen en andere grote ondernemingen.

2) Mobiel: software voor mobiele apparaten (smartphones en tablets), dankzij Android.

3) Web: PHP staat op nummer 1, maar Java heeft ook een flink marktaandeel veroverd.

4) Big data: gedistribueerde verwerking in clusters bestaande uit duizenden servers.

5) Smart devices: software voor elektronische apparaten, koelkasten met IoT, slimme woningen enzovoort.

Java is niet zo maar een taal, maar een heel ecosysteem: er zijn miljoenen kant-en-klare modules die je in je eigen programma's kunt gebruiken, en er zijn duizenden online community's en messageboards waar je om hulp of tips kunt vragen.

Hoe meer programma's je in Java schrijft, hoe meer antwoorden je krijgt op de vraag: 'Waarom Java?'. Zo, dat was het voor vandaag."

"Dank u wel, professor. Het was erg bijzonder en inspirerend."