IFT-2035 Concepts des Langages de Programmation
Stefan Monnier (AA-2341)
monnier@iro.umontreal.ca
http://www.iro.umontreal.ca/˜monnier/2035/
•
David A. Watt, Programming Language Design Concepts•
Ravi Sethi, Programming Languages: Concepts & Constructs•
Benjamin C. Pierce, Types and Programming Languages•
Simon Thompson, Haskell: The Craft of Functional Programming•
Paul Hudak, The Haskell School of ExpressionCalendrier
Historique, syntaxe des langages Compilation et interpr ´etation
S ´emantique des langages,
λ
-calcul, types Programmation fonctionnellePort ´ee, passage d’argument
Fonctions d’ordre sup ´erieur, fermetures Programmation logique
Programmation imp ´erative Repr ´esentation des donn ´ees Pointeurs et gestion m ´emoire
Macros, totalit ´e, exceptions, modules, abstraction Concurrence
Aperc¸u du cours
Il y a plusieurs milliers de langages de programmation
•
Etre capable d’utiliser efficacement la majorit ´e de ces langagesˆ•
Savoir comparer et tirer parti de leurs similarit ´es et diff ´erences•
Pouvoir comprendre comment ils interagissent•
Comprendre les concepts fondamentaux – Syntaxe et s ´emantique, types– Abstraction
– Port ´ee et passage d’arguments
– Analyse, raisonnement, libert ´e d’implantation
•
Mieux programmerComment?
•
Peu de syntaxes•
Peu de diff ´erents styles de programmation•
Equivalence de Turing´Confin ´e par notre cr ´eativit ´e, les contraintes des langages machines, et les besoins de performance
Styles de programmation
•
Imp ´eratif– Proc ´edural – Objet
•
D ´eclaratif– Fonctionnel – Logique
•
Concurrent– M ´emoire partag ´ee
– Passage de messages
Historique: langage machine (1)
Seul langage compris directement par la machine
La m ´emoire contient le programme et les donn ´ees, le processeur op `ere dessus:
•
Transferts entre m ´emoire et registres•
Op ´erations internes (arithm ´etiques, tests, ...)•
Flot de contr ˆoleAX BX CX DX registres add
mul
UC UCT
programme
MÉMOIRE
périphériques et données
Historique: langage machine (1)
1. Lire le mot de l’instruction courante 2. Le d ´ecoder
3. Chercher les op ´erandes 4. Effectuer l’op ´eration
5. Socker le r ´esultat
6. Passer `a l’instruction suivante.
10001011 01000101 00001010 00000011 01000101 00010100
Les instructions et les donn ´ees sont encod ´ees par des chaˆınes de bits Diff ´erent pour chaque type de machine
Inintelligible pour les humains
Historique: assembleur
Repr ´esentation textuelle symbolique du langage machine
mov 10(%ebp),%ax add 20(%ebp),%ax
Toujours diff ´erent pour chaque type de machine La m ´emoire manque toujours de structure
Irr ´egularit ´es du jeux d’instructions
Beaucoup de d ´etails `a ´ecrire; les erreurs sont l ´egion
Beaucoup de variantes; la meilleure est diff ´erente pour chaque machine
Historique: Langages de haut niveau
Langage ind ´ependant de la machine; se rapproche de l’humain M ˆeme exemple qu’avant:
X + Y
•
Notation plus famili `ere•
Portabilit ´e•
Fiabilit ´eNombre de lignes/jour et bugs/ligne plus ou moins constant
•
Plus facile `a lire•
Plus restrictifUne infinit ´e de niveaux
Tous les langages de haut niveau ne sont pas n ´es ´egaux
machine
<
assembleur<
C<
Java<
anglais<
StefanLe niveau d’abstraction est la distance conceptuelle par rapport au langage machine.
Les langages souvent combinent des aspects de niveaux diff ´erents, donc il n’y a pas toujours d’ordre clair entre langages.
G ´en ´ealogie
1990
1995 1955
1960
1965
1970
1975
1980
1985
1955
1960
1965
1970
1975
1980
1985
1990
1995 Dylan
2000 2000
Prolog Lisp
Scheme InterLisp MacLisp
Common ZetaLisp
Lisp
SASL
Miranda ML
StandardML
Haskell Smalltalk
Simula
C++
Java Ada95
Ada ConcurrentPascal
CSP BCPL
CPL
C Algol 68
Pascal Algol 60
Modula 2
Modula 3 Oberon Fortran Assembly
CLOS B
Machine/
impératif
concurrent fonctionnel
logique orienté objet
ANSI C++
Les pionniers:
Fortran, Lisp, Cobol
Les influents:
Algol, Simula, Prolog, ML
Programmation imp ´erative: proc ´edurale
Fortran, Algol 60, Pascal, C, Ada
M ˆeme mod `ele que la machine: s ´equence d’op ´erations sur la m ´emoire La m ´emoire est compos ´ee d’un graphe d’objets
Les instructions sont regroup ´ees en proc ´edures Notion implicite d’´etat omnipr ´esente; effets de bord Facile `a traduire en langage machine (compiler) De nos jours, consid ´er ´e comme “bas niveau”
Programmation imp ´erative: objets
Simula, Smalltalk, C++, Java
Chaque objet de la m ´emoire est accompagn ´e de code qui lui permet d’interagir avec les autres objets
Les objets sont actifs
Les m ´ethodes remplacent les proc ´edures
Le flot de contr ˆole passe d’un objet `a l’autre par appel de m ´ethode Plusieurs types d’objets peuvent ˆetre utilis ´es de mani `ere uniforme
Programmation fonctionnelle
Lisp, ML, Haskell, APL
Calcul = fonction au sens math ´ematique Eviter les effets de bord´
Pas de destruction, pas de d ´ependance au temps Facilite l’analyse, le raisonnement
Les fonctions peuvent ˆetre manipul ´ees comme n’importe quel objet Appr ´eci ´e pour son ´el ´egance
Programmation logique
Prolog, Mercury, Oz
Calcul = recherche d’une preuve logique ou d’une solution
Tr `es d ´eclaratif: d ´ecrire ce que l’on veut, pas comment l’obtenir Mod `ele d’ex ´ecution tr `es diff ´erent: difficile `a m ´elanger
On ne peut pas prouver n’importe quoi automatiquement
Programmation concurrente
CSP, Occam, Ada, Modula-2
Calcul divis ´e en plusieurs t ˆaches, ex ´ecut ´ees simultan ´ement Synchronisation et communication, implicites ou explicites Apporte potentiellement des acc ´el ´erations importantes Non-d ´eterminisme
Beaucoup d’occasions d’introduire des erreurs
Plagiat
Plagiat = ⇒ Pas bien
Caract ´eristiques externes des langages (1)
•
S ´ecurit ´e– Le langage incite-t-il `a un style de programmation dangereux?
– Les erreurs sont elles bien d ´etect ´ees?
•
Maintenance– Est-il facile de modifier les programmes?
•
Simplicit ´e conceptuelle– Nombre et r ´egularit ´e des concepts
Caract ´eristiques externes des langages (2)
•
Degr ´e de sp ´ecialization•
Niveau d’abstraction– Doit ˆetre adapt ´e `a la t ˆache
•
Puissance expressive– Supporte plusieurs styles de programmation
•
Support de gros projets– Modularisation, compilation s ´epar ´ee
Caract ´eristiques externes des langages (3)
•
Environnement– Existe-t-il beaucoup de bons outils?
– Et de bons programmeurs?
•
Performance– Rapide `a ´ecrire – Rapide `a compiler – Rapide `a ex ´ecuter
•
Portabilit ´e– Le langage est-il disponible sur toutes les machines?
– Les programmes fonctionneront-ils ailleurs?
Implantation
Interpr ´etation (aka VM)
•
D ´ecodage progressif des instructions•
Simple, compact, portable, flexibleCompilation
•
Traduction d’un langage dans un autre•
Vitesse, standalone, compilation crois ´eeHybrides