Dr.Godfried-Willem RAES

Kursus Experimentele Muziek: Boekdeel 1: Algoritmische Kompositie

Hogeschool Gent : Departement Muziek & Drama


<Terug naar inhoudstafel kursus> <Programmeren>  

1030:

KOMPUTERTALEN EN SYSTEMEN

Komputers werken op grond van hun elektrische schakeling alleen met aan of uit toestanden van veelal een 5Volt spanning. (In moderne komputers meestal 3.3V of minder). Dit zijn de BITS in elektrische vorm. De spanning op een bepaald punt in de schakeling gemeten tegenover massa is 0 of 5Volt, overeenkomstig een konventionele mapping op logische toestanden 'waar' of 'vals'. Bij 'negatieve logika' is de konventie dat 0 'waar' is en '1' vals, bij 'normale' logika geldt '1' (=5Volt) als waar en '0' als vals. (Uiteraard kunnen ook andere spanningsnivos gebruikt worden: -12V en +12V bvb., of 3.3V en 0V ..., of, stromen i.p.v. spanningen) Dit is voor de mens echter wel bijzonder onhandig en vooral oninzichtelijk. Daarom werden er 'interfaces' ontwikkeld om de mens toe te laten de machine te bedienen op een manier die voor hem relatief eenvoudig is. Deze 'interfaces' behoren tot de zogeheten 'SOFTWARE'. Men noemt deze primaire interfaces 'KOMPUTERTALEN' en die vormen op het gebied van de software het meest elementaire nivo. Een komputertaal is dan ook niets meer dan een stuk software dat voor de mens begrijpelijke tekens en syntaktische samenhangen van tekens, vertaalt in 'eentjes' en 'nulletjes' die de komputer rechtstreeks kan verwerken. De taal zorgt ook omgekeerd voor een vertaling van het resultaat van een bepaalde bewerking naar een voor ons leesbare vorm.

In funktie van de zeer diverse toepassingen die voor komputers kunnen worden worden verzonnen, werden er ook bijna evenveel komputertalen ontwikkeld. In de laatste jaren is er wel een stagnatie ingetreden in de diversiteit aan nieuwe en verder ontwikkelde komputertalen. Een konvergentie naar enkele families is erg opvallend: C (met vele varianten), Basic en de nieuwkomer Java.


Overzicht van diverse komputertalen

- Machinetaal

Dit zou je het meest elementaire en fundamentele taalnivo van de komputer kunnen noemen. Het bestaat immers uit niets anders dan de nullen en enen ( wel genoteerd in het hexadecimale stelsel, om het toch niet kompleet onleesbaar te maken) waar de machine elektrisch mee werkt. De relatie tussen 0 en 1 enerzijds en 0Volt en 5Volt anderzijds is zuiver konventioneel. Machines - of bepaalde onderdelen daarvan - die 0 Volt als logisch 0 interpreteren heten te werken met 'positieve logika' , die waar 5 Volt overeenkomt met logisch 0, schrijft men 'negatieve logika' toe. De getalrepresentatie is voor diverse machines geenszins gestandaardiseerd! De ene komputer is big endian, de andere little endian: d.w.z. de ene werkt met een getalrepresentatie waarbij de kleinste 'digits' links staan en de grootste (de MSB's) rechts, terwijl het bij een andere komputer precies andersom verloopt.

Een stuk programma in hexadecimale machine-taal kan er bvb. uitzien alsvolgt:

0000 8D361B00
0004 FC
0005 2BDB
0007 2BC0
0009 A31900
000C B96400
000F AC
0010 03D8
0012 E2FB
0014 891E1900
0018 C3
0019
001B
007F

Dit programma, in machine-taal die alleen door de 8088/8086 microprocessor kan worden begrepen, telt 100 8-bits grote getallen bij elkaar op... Dat had je vast nooit kunnen raden. De linkerkolom is een 'regelteller' en bepaalt de programmavolgorde, de rechterkolom bevat de instrukties en hun operands. 


- Assembler

Dit is het eerste taalnivo waarin mensen rechtstreeks programmas kunnen schrijven voor komputers. De tekens die hier worden gebruikt zijn de zogeheten 'mnemonics' (geheugensteuntjes) die stuk voor stuk overeenkomen met een of meer hexadecimale machinekodes, maar die in hun formulering toch alvast iets onthullen van hun funktie.

Een voorbeeld van een Assembler-programma dat precies hetzelfde doet als wat hierboven in machinetaal werd weergegeven is :

ADDITION PROC NEAR
LEA SI,TABLE
CLD
SUB BX,BX
SUB AX,AX
MOV SUM,AX
MOV CX,100
ADD: LODSB
ADD BX,AX
LOOP ADD
MOV SUM,BX
RET
SUM DW
TABLE DB 10,12,12,13,14,56,67,67,67,45,0,0,0,0,0,1
DB 1,2,5,9,8,7,3,4,5,6,90,4,5,23,24,34,56,56
DB 1,3,2,34,45,5,7,8,9,7,8,5,4,3,2,43,6,7,78
DB 1,6,5,7,6,8,7,6,5,6,5,4,5,3,4,3,4,5,4,5,4
DB 4,6,7,8,6,7,5,6,54,6,5,4,3,2,3,4,3,4,5,65
DB 34,78,12,34,88
ADDITION ENDP

De omzetting van dit soort instrukties naar machinecode, gebeurt door het vertaalprogramma dat men een Assembler noemt. Het schrijven van de kode zelf kan met een gewone (ASCII) tekstverwerker gebeuren (een 'editor' in het vakjargon). Hoe angstaanjagend het er ook moge uitzien, wanneer we eigen hardware gaan ontwikkelen en die willen interfacen naar onze gewone PC's, of wanneer we dedicated systems inzetten voor bepaalde projekten, zullen we op het aanleren en gebruiken van de voor de gebruikte processor geldige assembleertaal aangewezen zijn. Ook in deze kursus zal assembler -zij het met mondjesmaat- op geregelde tijden opduiken.


Interpreters en Compilers

- Forth

FORTH is een heel erg flexibele taal, die als een bouwdoos zelf kan worden samengesteld, en dus in het gebruik alsmaar rijker kan worden. Omdat ze relatief dicht staat bij het machine nivo, wordt ze erg snel door de komputer verwerkt kan is ze heel erg geschikt voor besturingstoepassingen. Ook voor muzikale toepassingen wordt ze erg vaak gebruikt. De Amsterdamse STEIM-studio werkte lange tijd (met name tot op het moment dat ze de historische vergissing begingen zich MacIntoshes aan te schaffen en in een duivelsverbond met de Ircam maffia te treden...) zelfs bijna uitsluitend binnen FORTH. Belangstellende studenten kunnen in mijn biblioteek heel wat boeken met betrekking tot deze taal vinden.

Een stukje Forth programma kan er bijvoorbeeld uitzien als:

CODE 1PLUS
SP)+D0 .L MOVE
1 # D0 .L ADDQ
D0 SP -) .L MOVE
NEXT
END-CODE
1PLUS.
 

Sedert 1996 lijkt de taal evenwel zo goed als dood. In elk geval hebben we ze ook zelf verlaten omdat er geen compilers meer werden ontwikkeld die de nieuwste ontwikkelingen op het gebied van de pc-hardware ondersteunen.


- Basic

Mag zonder twijfel als de meest verspreide komputertaal doorgaan. Er bestaan zowel kompilerende als geinterpreteerde versies van, kinderlijk eenvoudige, naast hoogst gestruktureerde en gesofistikeerde. Basic is voor zowat elke denkbare machine beschikbaar. De taal werd afgeleid van het wiskundige 'Fortran'. Het mag tot op de dag van vandaag gerekend worden tot de vijf meest gebruikte komputertalen, ook al zijn de 'interpreters', waaraan Basic zijn vaak negatieve bijklank ontleende, thans zo goed als uitgestorven.

Met enkele geavanceerde en sterk gestruktureerde versies van deze taal gaan we in deze kursus vooral verder werken. Hier volgt alvast een programma dat precies hetzelfde doet als dat wat beschreven werd bij machinekode en bij assembler:

DIM I AS Integer, X AS Integer, Som AS Long
FOR I = 0 TO 99
READ X
SOM = SOM + X
NEXT I
PRINT SOM
DATA 23,34,46,56,12,35,45,23,45,34,23,45,56
DATA 57,6,5,6,7,8,3,2,4,3,5,6,4,67,5,4,2,3
DATA 45,56,45,34,45,56,67,5,6,7
DATA 8,9,7,6,5,4,3,2,1,2,3,4,5,6,7,8,9,0,56,
DATA 45,34,23,4,5,6,7,4,5,3,34
DATA 1,2,5,3,4,6,5,7,6,8,7,9,8,7,5,6,45,34,
DATA 23,12,34,45,23,12,34,56,45, 88,100

Wij gebruiken op dit ogenblik (op de Intel PC's) volgende vier Basic varianten/versies:


- Pascal

Goldt lange tijd als de taal bij uitstek voor gestruktureerd programmeren. Het is een nogal omslachtige taal, die alleen als compiler bestaat, en de laatste tijd nogal op teruggang is (cfr. de intrekking van de 'moderne' wiskunde) , ten voordele van het meer moderne en flexibele C. Pascal was een 'europees' en 'logisch ondersteund' antwoord op het pragmatische en Amerikaanse Basic.

Een Pascal programma kan eruit zien alsvolgt:

TYPE VECTOR = SUPER ARRAY [1..*] OF REAL;
VAR X: VECTOR (12);Y: VECTOR (24);Z: VECTOR (36);
FUNCTION SUM (VAR V: VECTOR): REAL;
VAR S: REAL; I : INTEGER;
BEGIN
S :=0;
FOR I := 1 TO UPPER (V) DO S := S+V[I];
SUM : S;
END;
BEGIN
TOTAL := SUM (X) + SUM (Y) + SUM (Z);
END

Merk op dat het programma begint met de deklaratie van de variabelen. Dit is in moderne Basic versies eveneens mogelijk, zoniet noodzakelijk.

bvb.: DIM VECTOR (size) AS REAL

Het aanleren en gebruiken van Pascal kan sedert 1993 niet langer worden aanbevolen.


- C en C++

C en de modernere varianten C++ en Cplus is een gestruktureerde en erg efficiente taal, die voor zowat alle machines beschikbaar is, maar waarvoor tot op heden nog steeds geen echte internationale standaard (ANSI) werd ontwikkeld. Doordat het vrij eenvoudig is binnen C machine-specifieke kode te schrijven, wordt de taal vaak gebruikt voor het schrijven van zogeheten User-Interfaces, maar ook voor operating systems zoals Windows. Ook tekstverwerkingsprogrammas, spreadsheets, serversoftware, browsers... worden meestal in C ontworpen. De overdracht van software van de ene processor naar een andere kan door de modulaire aanpak van de taal relatief eenvoudig en efficient geschieden. Hoe we het ook draaien of keren, zelf hebben we C steeds behoorlijk onleesbaar gevonden... Wie op gebied van programmeren ver wil komen zal zich vroeg of laat echter toch een goede kennis van C of C++ eigen dienen te maken, al was het maar omdat heel wat source code waaruit we voorbeelden en modellen kunnen putten, in C wordt gepubliceerd.

Hier een programma-voorbeeld :

/ * array-sorteer programma. */
#define SWAP(x,y) (temp=(x),(x)=(y),(y)=temp)
static void adjust (v,m,n)
int v[],m;
register int n;
{
register int *b,j,k,temp;
b=v-1;
j=m;
k=m*2;
while (k<=n) {
if ((k<n) && (b[k]<b[k+1])) ++k;
if (b[j] < b[k]) SWAP (b[j],b[k]);
j=k;
k *=2;
}
}
int v[],n;
{
int *b,j,temp;
b=v-1
for (j=n/2; j>0; j--)
adjust(v,j,n);
for (j=n-1; j>0 ; j--) {
SWAP (b[1],b[j+1]);
adjust (v,1,j);
}
}

- Fortran

Een taal met een erg lange staat van dienst (ca.1956), en die vooral in wetenschappelijke en/of industriele middens populariteit geniet of genoot. Zij wordt vooral toegepast op grote (mainframe)-komputers en kan nauwelijks worden aanbevolen voor personal-komputer gebruik.

Voor zeer komplexe wiskundige berekeningen biedt zij nogal wat voordelen, vooral omdat het werken met complexe getallen deel uitmaakt van de standaard taal. Overigens ziet een fortran programma er niet zo heel erg verschillend uit dan een programma in een moderne Basic-taal, wat niet zo verwonderlijk is, aangezien Basic eigenlijk van Fortran werd afgeleid. Fortran is een acroniem voor 'Formula Translator'.

Een voorbeeld van een klein Fortran programma :

| DIMENSION W(150)
| READ(5,10) (W(I),I=1,150)
| SOM=0.
| DO 1 J=1,150
1| SOM=SOM+W(J)
10| FORMAT(15F5.2)
| WRITE(6,17)SOM
17| FORMAT(1H,'SOM=',F9.2)
| STOP
| END

- Cobol

Een sterk verouderde taal waarin echter nog steeds het gros van de zuiver administratieve en boekhoudkundige programmas (vooral voor de overheid...) voor mainframe-computers geschreven worden. Cobol programmas hebben een vrij gemakkelijke leesbaarheid. Voor nieuwe toepassingen mag het gebruik ervan echter beslist niet meer aanbevolen worden.

Een voorbeeldje:

ENVIRONMENT DIVISION
INPUT-OUTPUT SECTION
FILE CONTROL
SELECT IX-FILE
ASSIGN TO DISK
ORGANISATION INDEXED
ACCESS DYNAMIC
RECORD KEY IX-KEY
FILE STATUS IX-STAT
DATA DIVISION
FILE SECTION
FD IX-FILE
LABEL RECORD STANDARD
VALUE OF FILE-ID "IXFILE.DAT"
RECORD CONTAINS 75 CHARACTERS
DATA RECORD IX-REC
01 IX-REC
05 IX-DATE PIC X(6)
05 IX-TIME PIC X(6)
05 IX-KEY
10 IX-STATE PIC XX
10 IX-CITY PIC X(20)
10 IX-STREET PIC X(30)
05 IX-ZIP PIC X(5)
05 IX-ZONE PIC X(6)

- Logo

Een taal die, steunend op onderzoek in de ontwikkelingspsychologie (cfr. Jean Piaget), zou aansluiten bij de verstandelijke ontwikkeling van het kind. De taal bevat nogal wat grafische tekens en topologische probleembenaderingen. Het ziet ernaar uit dat Logo binnenkort echter, zoals ook de zgn. Moderne wiskunde en naar we hopen in haar kielzog, eveneens Pascal, geheel van de scene zal zijn verdwenen. Dit laat zich wellicht en onder meer verklaren uit het feit dat de laatste jaren allerlei grafisch georienteerde user-interfaces zoals Windows zijn doorgedrongen, waarmee eenvoudige handelingen op intuitieve wijze kunnen worden uitgevoerd. 


- dBase3+ / Foxbase / Clipper

Doelspecifiele talen en taalvarianten die werden ontwikkeld om het organiseren en beheren van databases te vergemakkelijken.

Aangezien Databases een enorme vlucht kennen en we nu reeds geen professionele bibliotheek meer kunnen raadplegen zonder toch min of meer met de komputers overweg te kunnen, moet het leren van dBase-programmatie worden aanbevolen. De taal staat erg dicht bij Basic , wat het leren zeker erg kan vergemakkelijken. De dBase taal moet als de stamvader van een hele reeks afgeleiden en verbeteringen worden beschouwd. Foxbase heeft de originele dBase-taal vandaag bijna geheel verdrongen. Clipper is de naam van een programma dat toelaat in dBase of Foxbase geschreven programma te compileren zodat ze onafhankelijk van een voorafgaandelijk te laden interpreter hun werk kunnen doen.

Een klein programmavoorbeeldje : 

SET DATE BRIT
SET TALK ON
USE C:\FOX\SCORES
COPY STRUCTURE TO C:\FOX\KEUZE.DBF
CLOSE ALL
USE C:\FOX\KEUZE
APPEND ALL FROM C:\FOX\SCORES FOR PROPER(INSTRUM) = 'Viool' .OR. PROPER(INSTRUM) ='Altviool' .AND. UPPER(AUTEUR) = 'CAGE'
CLOSE ALL

Dit programma maakt vanuit een partiturenbestand, een deelbestand met alleen alle partituren van Cage voor viool of altviool.


-LISP

Een erbarmelijk trage taal, die vooral werd ontwikkeld voor onderzoek aan universiteiten in verband met zogenaamde 'artificiele' intelligentie. Tenzij supersnelle personal computers ter beschikking zouden komen, zit hierin eigenlijk weinig praktisch perspektief. De laatste jaren raakte Lisp wat in de vergeethoek. Vele ideeen uit de opbouw van de taal -het zogeheten objekt-georienteerd programmeren- werden evenwel in recentere talen geimplementeerd (o.m. in C++ en vooral in Visual Basic en Power Basic).


-JAVA

Java vormt een geheel nieuwe ontwikkeling op het vlak van de programmeertalen. Het is ontwikkeld (maar ook nog volop in ontwikkeling...) voor gebruik in kombinatie met internet en wel zo dat de in Java geschreven programmas moeten kunnen lopen op eender welk komputerplatform (voorzover dit Java ondersteund weliswaar, maar onafhankelijk van de gebruikte hardware en de processor). Op zichzelf genomen is dit natuurlijk een prachtig idee dat we alleen maar kunnen toejuichen. Het ligt dan ook in de lijn der verwachtingen dat in deze kursus in de toekomst heel wat aandacht zal gaan naar Java kode en toepassingen, vooral dan met het oog op de ontwikkeling van interaktieve muzikale toepassingen. We zijn het echter zelf nog onder de knie aan het krijgen zodat dat gretige student nog wat op zijn honger zal moeten blijven. Een eenvoudig voorbeeldje van java kode, waarmee je een datum-klokje in je webpagina kan inbouwen ziet eruit alsvolgt:


Today: Clock:

(het probleem met uitgerekend dit voorbeeld is natuurlijk dan deze paragraaf zelf in HTML is geschreven waarbinnen Java onder de meeste moderne Browsers automatisch is geimplementeerd. Wil je de kode zien, dan moet je via notepad deze sektie bekijken...


Naast komputertalen, werden ook nog in dergelijke talen geschreven programmas ontwikkeld , die een bedienings-systeem voor de machine vormen, zo dat niet elke bewerking die van de machine gevraagd wordt telkens weer opnieuw dient te worden geprogrammeerd. Dit noemt men de 'Operating Systems' en 'User Interfaces'. Deze User Interfaces kunnen in zekere zin als een soort meta-taal worden beschouwd. Zij hebben ook symbolische voorstellingen evenals een syntax, zelfs al zijn zij volkomen grafisch opgevat. Meer en meer van dergelijke besturingssystemen , evenals programmas die op de meest diverse machines moeten kunnen draaien, worden vandaag geschreven in de taal C.

Enkele bekende besturingssystemen en User-interfaces voor diverse komputers zijn :

- voor IBM personal komputers en klonen daarvan :

- voor 68xxx machines ( Atari , Macintosh, Amiga ...):

- platformonafhankelijk:

Naargelang een komputer van andere CPU chips gebruik maakt, heeft hij ook nood aan andere machine-instrukties. Vandaar dat machines die van verschillende chip-architekturen gebruik maken niet of nauwelijks met elkaar kompatibel kunnen zijn. Kompatibiliteit noemt men de mogelijkheid van een machine om een programma geschreven voor een andere machine te kunnen draaien. Naast een gelijkaardigheid van de gebruikte CPU chips is daarvoor ook een zeer sterk overeenkomstige hardware-architektuur van de periferie van de machine nodig. Om deze laatste reden zijn bvb. de Atari ST en Apple's Mac -ondanks de identische processorchip- niet onderling kompatibel.

Enkele belangrijke machine-families, en de CPU chips waarvan zij gebruik maken zijn: 

Intel-chips:

8088 - 8086 - 80186 - 80286 - 80386 - 80486 - Pentium - PentiumPro

Machines:

Chips: Motorola 68000 - 68040 ...

Chips: RISC

Voorts zijn er nog een hele reeks microprocessor-chips voor zogenaamde 'dedicated-systems'. Dit zijn relatief kleine komputersysteempjes die een vast ingebouwd programma hebben en die voor een heel specifieke toepassing worden ingezet. Zij zijn niet vrij door de gebruiker te programmeren. Bijna alle hedendaagse elektronische muziekinstrumenten, maar ook wasautomaten, microwave ovens (magnetrons), robots enz. hebben een dergelijk systeem ingebouwd. Veel gebruikt worden volgende chips:

Hiernaast zijn er nog vele (oudere 8 bits) systemen die hun aktualiteit min of meer verloren hebben maar wel in heel wat literatuur zijn terug te vinden:

Chips: Z80

Chips: 6800 - 6302

Chips: 6500


Lesvoorbeelden:

1.Voorstelling en demonstratie van de Atari ST1040

2.Voorstelling en demonstratie van een Pentium IBM-AT kloon

3.Voorstelling en demonstratie van een 80486DX Laptop-komputer

4.Voorstelling van enkele dedicated systems

5. Voorstelling van netwerkkonfiguraties (klaskonfiguratie)


Filedate: 881028/971024/98-10-10

Terug naar inhoudstafel kursus: <Index Kursus>

Naar homepage dr.Godfried-Willem RAES

<programmeren>