Introduction
Historique des langages de progr. (1)
=> Débuts (< 1955): langage machine
-
seul langage compris par la machine (directement)
-
architecture de Von Neumann: Unité de Calcul (UC) et Unité
de Mémoire (UM)
-
types d'instructions machine:
-
arithmétique (addition, soustraction, multiplication, division,
etc...)
-
déplacement (transfert d'une unité de memoire entre les registres
et la mémoire principale)
-
contrôle (continuer l'exécution du programme à une
autre addresse que la suivante, de manière conditionnelle ou inconditionnelle).
-
l'UC obtient puis exécute 1 à 1 les instructions de la mémoire
-
exemple sur Pentium: additionner 2 entiers
binaire hex
10001011 8B \
01000101 45 | lire 1er entier dans reg. AX
00001010 0A /
00000011 03 \
01000101 45 | lire 2em entier et ajouter a AX
00010100 14 /
Avantage: contrôle total sur la machine.
Désavantages: inintelligible pour les humains, différent
pour chaque type de machine.
Historique des langages de progr. (2)
=> langage d'assemblage (``assembler'')
-
Essentiellement une représentation textuelle symbolique du langage
machine.
-
Même exemple:
mov 10(%ebp),%ax ; lire 1er entier dans reg. AX
add 20(%ebp),%ax ; lire 2em entier et ajouter a AX
Un peu plus lisible mais:
-
beaucoup de code à écrire pour faire peu de choses,
-
le programmeur doit être constamment conscient des contraintes de
la machine (nb. registres, taille des registres et mémoire, irrégularités
du jeu d'instruction, contrôle efficace des pipelines de l'UC).
Ce sont des langages de bas-niveau: où il faut s'occuper
de détails qui ont plus rapport avec la machine qu'avec le calcul à
faire
Historique des langages de progr. (3)
=> langage de haut niveau (``high-level language'')
-
Pourquoi les langages de programmation: organiser la complexité.
Problème avec la capacité d'attention des humains. Solution:
introduire de la structure dans les programmes, e.g.,
organisation hiérarchique,
découpler les élements (encore le bon vieux
principe de diviser pour régner).
-
Citation (traduite) de Dijkstra: "Il s'agit d'organiser les calculs de
telle manière à ce que nos moyens limités nous permettent
d'en garantir l'effet."
-
La programmation implique beaucoup plus que le développement des
programmes et leur performance, mais aussi et surtout la facilité
avec laquelle on pourra les modifier, les entretenir, et donc les comprendre.
-
Langage de haut niveau: facilite la tâche de programmation en cachant
les détails se rapportant à la machine
-
Même exemple en C: X+Y
-
Avantages:
-
Notation plus familière et lisible
-
portabilité (un programme est portable s'il peut être
exécuté sur une autre machine avec peu ou pas de changements)
-
réutilisation de librairies de code
-
détection automatique d'erreurs
-
aide le programmeur à structurer et rendre plus robuste ses programmes
-
Tout cela contribue à rendre le programmeur plus productif (moins de temps
requis pour réaliser un programme donné).
-
Le langage de programmation est un intermédiaire entre le programmeur
et la machine.
Il peut y avoir plusieurs niveaux entre l'humain et la machine. Par
exemple
-
humain->pseudocode->Java->C->assembleur->code objet->machine
Historique des langages de progr. (4)
-
Le niveau d'abstraction est un continuum à plusieurs dimensions
-
Tout est relatif: un langage qui en 1960 était de ``haut-niveau''
peut bien paraitre de ``bas-niveau'' aujourd'hui
-
machine
-
assembleur
-
FORTRAN
-
C (aujourd'hui considéré bas niveau)
-
Java
Généalogie des langages de progr.