“doc” (Col. : Science Sup 17x24) — 2007/7/19 — 18:18 — page 26 — #36
i
i
i
i
i
i
i
i
26
2
• La programmation déclarative
structures de données partielles. On l’appelle aussi la programmation sans état, par
opposition à la programmation avec état qui est traitée dans le chapitre 5.
Le modèle déclaratif de ce chapitre est un modèle clé. Il contient le noyau de
deux paradigmes de programmation importants, la programmation fonctionnelle et
la programmation logique. Il permet la programmation des fonctions sur les valeurs
complètes, comme dans les langages Scheme et Standard ML. Il permet aussi la
programmation logique déterministe, comme dans Prolog quand la recherche n’est
pas utilisée. Et finalement, on peut l’étendre avec la concurrence tout en gardant ses
bonnes propriétés déclaratives (voir le chapitre 4).
La programmation déclarative est un domaine riche : elle contient la plupart des
idées des modèles plus expressifs, si ce n’est qu’en forme embryonnaire. Nous la
présentons en deux chapitres. Le chapitre 2 définit le modèle de calcul et un langage
déclaratif basé sur celui-ci. Il ajoute aussi le concept d’exception (voir section 2.7),
qui nous permet de gérer les erreurs dans un programme. Le chapitre 3 présente des
techniques de programmation pour le langage déclaratif. Il ajoute aussi le concept de
nom, une constante infalsifiable (voir section 3.5), ce qui permet de construire des
types de données abstraits. Les chapitres suivants enrichissent le modèle de base avec
encore d’autres concepts. Le chapitre 4 ajoute celui de fil (« thread »), qui permet
de faire de la programmation concurrente dataflow (avec des flots). Le chapitre 5
ajoute le concept de cellule (« cell », ou variable affectable), qui permet de faire
de la programmation avec état et abstractions de données. Le chapitre 6 explique
la programmation orientée objet, un ensemble de techniques pour bien utiliser la
programmation avec état.
D’autres concepts ne peuvent pas être décrits ici, faute de place. Par exemple, les
capacités (pour l’encapsulation et la sécurité), l’exécution paresseuse, les canaux de
communication et la programmation par envoi de messages, les objets actifs et la
programmation par état partagé avec les verrous, les moniteurs et les transactions.
Tous ces concepts se trouvent dans la version originale du livre [97], qui contient
aussi des chapitres sur les interfaces homme-machine, la programmation répartie,
la programmation relationnelle (comme le langage Prolog) et la programmation par
contraintes.
Parmi ces concepts, les capacités sont particulièrement importantes. Une capacité
objet est une référence infalsifiable à un objet [67]. Un système basé sur les capacités
objet donne une sécurité en profondeur qui permet d’éviter la plupart des problèmes
des virus et autres programmes malicieux, sans sacrifier la facilité de son utilisation. Pour des raisons historiques, la plupart des systèmes d’exploitation actuels ne
soutiennent pas assez les capacités objet pour jouir de ces propriétés.
Précédent

- 41/370

Suivant