0%

Hoe gegevens tot uitvoering komen

Van broncode naar een draaiend programma

Hier is een regel Python:

print("Hello")

Die kun je min of meer lezen, ook als je nog nooit hebt geprogrammeerd. De CPU kan dat niet. Die leest geen Engels, weet niet waarvoor aanhalingstekens dienen en kent het begrip afdrukken niet. Die voert machine-instructies uit, en deze regel is er geen.

Tekst als deze is broncode: geschreven voor mensen. Er moet iets tussen staan en de machine-instructies die echt worden uitgevoerd. In het schema betekent SOURCE CODE broncode; het Python-programma kan ook als bytecode worden aangeboden. De PYTHON RUNTIME / INTERPRETER is een native programma dat jouw programma leest en volgt. De CPU voert de machine-instructies van die runtime uit. Dat is ook wat de tekst onderaan samenvat: de runtime volgt jouw programma terwijl de CPU de runtime uitvoert.

Een Python-programma in broncode of bytecode wordt gevolgd door een native Python-runtime en interpreter. De CPU voert de machine-instructies van de runtime uit terwijl de runtime het programma volgt.

Broncode heeft een implementatie nodig

Een programmeertaal is een verzameling regels voor het schrijven van broncode. Een implementatie levert de werkende software die door mensen geschreven code omzet in bewerkingen die de machine kan uitvoeren. Implementaties gebruiken verschillende strategieën, vaak in combinatie.

Een veelgebruikte route vertaalt code vooraf. Een compiler leest broncode en maakt een native uitvoerbaar bestand met machine-instructies voor een bepaald soort systeem. Het vertalen kan op de computer van de ontwikkelaar gebeuren voordat je de applicatie downloadt. Tijdens het uitvoeren kan dat bestand nog steeds afhankelijk zijn van het juiste besturingssysteem, de architectuur, bibliotheken en toegangsrechten.

Een andere route houdt een runtime, oftewel uitvoeromgeving, betrokken wanneer het programma draait. Een runtime kan broncode naar een tussenvorm vertalen, die vorm interpreteren, delen tijdens het uitvoeren naar machine-instructies compileren of die stappen combineren. Een interpreter is het onderdeel dat broncode of tusseninstructies leest en uitvoert wat die beschrijven. Deze strategieën horen bij een bepaalde implementatie, niet voor altijd bij de taal zelf.

Python gebruikt een route die door een runtime wordt beheerd. Een Python-implementatie vertaalt de broncode naar een interne vorm en voert die uit. Die interne stappen hoef je nu nog niet te kennen. Voor deze cursus telt het praktische gevolg: de Python-implementatie moet aanwezig zijn wanneer je een Python-bronbestand uitvoert.

Waarom een Python-bestand Python nodig heeft

Een .py-bestand is brontekst, geen native uitvoerbaar bestand. Het kan zijn instructies niet zelfstandig uitvoeren.

Om het uit te voeren moet Python zelf geïnstalleerd zijn. Python leest je bestand en doet wat erin staat. Je eigen code uitvoeren gaat dus altijd over twee dingen: het programma Python en het bestand dat je het wilt laten lezen.

Onthoud dat. In hoofdstuk 7 start je Python zelf op die manier. Een van de mogelijke problemen is dat de computer Python helemaal niet kan vinden. Als je weet dat Python een programma is dat iemand heeft moeten installeren, is die fout duidelijk in plaats van raadselachtig.

Je stuurt een vriend een klein .py-bestand dat alleen gewone Python-mogelijkheden gebruikt. Die vriend heeft Python niet geïnstalleerd. Waarom is alleen het ontvangen bronbestand niet genoeg om het uit te voeren?

Dubbelklikken op een bestand zonder uitvoer te zien bewijst op zichzelf niet dat Python ontbreekt. Het bestand kan in een editor openen, of een terminalvenster kan sluiten voordat je het kunt lezen. Hoofdstuk 7 leert je het bestand vanuit een open terminal uit te voeren en het echte resultaat te bekijken.

Wat je kunt vragen als iets niet wil draaien

Al deze strategieën eindigen ermee dat de CPU machine-instructies uitvoert. Het verschil is welke implementatie de vertaling heeft gedaan, wanneer dat gebeurde en wat er op je computer aanwezig moet zijn.

Dat levert een korte vragenlijst op. Elke vraag benoemt iets specifieks dat kan ontbreken:

  • Is dit het juiste soort programma voor deze computer?

  • Als het een runtime nodig heeft, zoals Python, is die dan geïnstalleerd?

  • Zijn de andere onderdelen waarvan het afhankelijk is ook aanwezig?

  • Heeft het besturingssysteem toegestaan dat het bestand werd uitgevoerd?

Je gebruikt een versie van die lijst in hoofdstuk 7, met een echte foutmelding voor je.

Eén vraag staat nog open. Een gecompileerd programma bestaat uit machine-instructies, klaar om uit te voeren. Maar klaar voor wat? Niet elke CPU begrijpt dezelfde instructies.