Als je in 1985 bent begonnen met hobby-computers, dan weet je hoe weinig geheugen de computers toen hadden. Een buurjongen had een ZX-81 met 1024 "laden", dat is 1024 bytes. Die verkochten ze en kochten een Commodore-64. Die C64 kochten wij ook. Spelletjes kopiëren ging via cassette bandjes (TDK D90), waarbij je niet teveel mocht bewegen vanwege load-errors.
Anyway, in 1985 bestond de programmeertaal C al 12 jaar, want die kwam in 1973 uit.
De context van de programmeertaal C is dus weinig geheugen. De voorganger van C, dat is de programmeertaal B, die ook binnen Bell Labs is gemaakt door Ken Thompson en Dennis Ritchie, had maar 1 datatype, namelijk de natuurlijke grootte van één geheugen element (ook wel "woord" genoemd). In de nieuwe PDP-11 mini-computer was de woord grootte echter 16 bits. Aangezien ASCII (7 bits) populair werd en de PDP-11 daarvoor ondersteuning had, waren er meerdere datatypes nodig. Samen met andere verbeteringen werd dat C.
Het geheugen was zo krap, dat vrijwel alles via tape of disk verliep. Dat zie je ook aan de eerste versie van de C compiler van Ritchie. De transformatie van de C code naar assembly verliep via variabelen en kleine arrays die in het geheugen pasten. Structs of geheugen allocatie via malloc zie je nergens in de eerste C compiler. Ook in het C handboek zie je dezelfde opzet: kleine buffers en verder alles via stdin en stdout.
C heeft van die vervelende header files omdat vroeger de systemen veel te traag waren om alle code steeds te compileren. Je moest een manier hebben om te bepalen welke functies er allemaal in een gecompileerde, relocatable objectfile zaten die je kon linken. Iedere sourcefile moest apart gecompileerd kunnen worden naar een objectfile.
Waarom gebruikte men überhaupt C als compilatie lang duurde en de
gegenereerde code traag was? Nou, omdat grote bedrijven formules
duidelijk en goed uitgevoerd wilde hebben. C code is veel duidelijker en
minder foutgevoelig dan assembly.
Mijn eerste kennismaking met C was via het Amiga boek "C für Einsteiger" van uitg. Data Becker. Compilatie op de Amiga 500 met Aztec C duurde meerdere minuten vanwege het wisselen van diskettes. Verder was de gegenereerde code traag ten opzichte van 68000 assembly. De taal was daarom niet populair bij mij en vele andere ontwikkelaars. Assembler was de beste keuze voor demo's en spellen. De reden om überhaupt met C bezig te zijn op de Amiga was het feit dat de Amiga GUI genaamd Intuition in C was ontwikkeld.
Een gecompileerde taal werd pas populair met de geïntegreerde ontwikkelomgeving Turbo Pascal van Borland voor MS-DOS. In 1987 werd Turbo C uitgebracht.
Als je deze historie van de programmeertaal C kent, dan begrijp je waarom unicode strings, async/await, multicore programming, virtual classes en memory management niet voorkomen in de taal. Over memory management gesproken: vroeger had je die niet. Op de C64, Amiga, IBM PC met MS-DOS kon je op ieder geheugenadres data neerzetten en uitvoeren. Die opzet gaf trouwens wel vastlopers als de processor de weg kwijtraakte.
De oorspronkelijke taal C is best mooi. Het monster C++ is pas ontstaan in de loop van de tijd na talloze uitbreidingen. Toen ik in 1996 voor school een WIN32 programma met event-loop maakte was C++ al een draak die memoryleaks in de hand werkte.
Als je tegenwoordig 16 gigabyte geheugen, een multicore CPU en textfiles in UTF-8 hebt, dan is C geen passende match meer. Gebruik liever C#, Rust of een andere nieuwe taal. De oorspronkelijke makers van C, Ken Thompson and Dennis Ritchie, zaten er ook niet mee om de programmeertaal B te dumpen toen C een betere match was.
Geen opmerkingen:
Een reactie posten