Stel: TAC wil abonnementen aankopen
voor wat kiest hij?
- maatwerk?
- pakket?
- Web service?
Golf 1: Maatwerk
1.1 Generaties Programmeertalen:
1ste Generatie (1 GL): Machinetaal
- Numerieke instructies
- Zéér performant: 109 instructies per sec…
- Processor-afhankelijk
- Moeilijk leesbaar, veel fouten => weinig gebruikt nu
2de Generatie (2 GL): Assembly-talen (Assembleertalen)
→ moesten programmeren toegankelijker maken door een betere
begrijpelijkheid
- Tekst-codes ipv numerieke instructies
- Zéér performant: bijna 109 instructies per sec…
- Processor-afhankelijk
- Moeilijk leesbaar, veel fouten => weinig gebruikt nu
werden geprogrammeerd in assembly talen:
De Motorola 6800 is een 8-bit CPU met:
- 8-bit accumulatoren A en B (soort mini-variabelen in de CPU)
- 16-bit adresbus – kan 64 KB geheugen aanspreken
- Een eenvoudige set instructies (ongeveer 72)
Saturn V: Guidance Computer
- De Saturn V was de reuzenraket waarmee NASA de Apollo-astronauten naar de
maan stuurde (1967–1973).
- Het is nog steeds de krachtigste raket die ooit succesvol bemande missies heeft
gelanceerd.
- volledig in een assembly-achtige taal geprogrammeerd.
- De software die de raket bestuurde was een vorm van assembly.
1968-Software Crisis
de periode (eind jaren 60 – jaren 70) waarin duidelijk werd dat het ontwikkelen van software
veel moeilijker, duurder en onvoorspelbaarder was dan men tot dan toe dacht.
Programmeertalen: stijgend abstractieniveau
3de Generatie (3 GL): Procedurele talen
- Procedureel: ‘programmeur geeft stap voor stap op hoe een bepaalde taak moet
uitgevoerd worden’
- Abstractieniveau neemt toe:
→ Programmeertaalinstructie lijkt enigszins op natuurlijke taal
→ Programmeertaalinstructie is niet meer processor-afhankelijk
, → 1 programmeertaalinstructie = N processor-instructies
3GL zijn relatief goed leesbaar, lijken enigszins op natuurlijke taal:
vb. In Python:
Vertaling: Interpreter vs Compiler
Interpreters:
- Instructie per instructie wordt vertaald naar machinetaal en meteen uitgevoerd; bij
elke uitvoering wordt het programma opnieuw vertaald
- Een interpreter voert je code regel per regel uit
=> Talen zoals Python, Javascript
Compilers:
- volledige Source Code (Broncode) wordt volledig en éénmalig vertaald naar een
uitvoerbaar programma in machinetaal (Object File), waarna het programma wordt
uitgevoerd
- Een compiler vertaalt je hele programma op voorhand naar snelle, directe
machinecode.
=> Talen zoals Java, C++, C#, Mojo
Interpreter vs Compiler
Opdracht:
1. Matrixvermenigvuldiging van 128 x 128 x 128 = 2 097 152 waarden
2. Rapportering van de snelheid in MFLOP/s (mega/miljoen floating point operations per
seconde)
→ Python voert de 128×128 matrixvermenigvuldiging stap voor stap uit via de
interpreter → langzamer → minder MFLOP/s.
→ Mojo voert de matrixvermenigvuldiging uit met gecompileerde machinecode →
veel sneller → veel hogere MFLOP/s.
Aspect Python (Interpreter) Mojo (Compiler)
Hoe werkt Voert code regel per Verwerkt alles vooraf in snelle machinecode
het? regel uit
, Snelheid Langzamer Zeer snel
Overhead Groot Klein
Ideaal voor Scripting, prototyping Rekenintensieve taken (zoals
matrixvermenigvuldiging)
MFLOP/s Laag Hoog
Compiler – Hogere Performantie
Mojo met parallelle verwerking (meerdere CPU’s)
voordelen: je kan performantie beter optimaliseren
parallellisatie over meerdere cores (processoren) moet in vele gevallen manueel worden
geprogrammeerd:
testbaarheid:
Stel de code is fout:
Python: interpreter – code afgeleverd aan gebruiker
→ interpreter vindt fout niet op tijd => eindgebruiker merkt fout
Mojo: compiler – géén uitvoerbaar programma gegenereerd
compiler vindt fout voor stuk van code kan uitgevoerd worden
resultaat: compiler genereert geen machinetaal
gevolg: eindgebruiker heeft geen code om uit te voeren,
→ er kan geen fout gebeuren
Programmeur merkt fout
=> Eindgebruiker krijgt énkel gecorrigeerd programma
Voorbeelden 3 GL programmeertalen
Gestructureerde programmeertalen
- COBOL (°60’s): common business organisational language
- Pascal (°70’s): voor onderwijs
- … (C, Fortran): voor wiskundigen
C: voor operating system: beheert geheugen, je wil hier maximale snelheid
zeer krachtig, hoge performantie → hierdoor veel fouten
Object-georiënteerde talen: bouwen software obv objecten en klassen
- Java, JavaScript (°90’s):