26.02.2013 Views

résumés des cours et travaux - Collège de France

résumés des cours et travaux - Collège de France

résumés des cours et travaux - Collège de France

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

832 GÉRARD BERRY<br />

l’ensemble <strong>de</strong> son outillage (compilateur, débogueur, <strong>et</strong>c.) <strong>de</strong>man<strong>de</strong> un<br />

investissement <strong>de</strong> plus en plus considérable.<br />

5.2. Pourquoi tant <strong>de</strong> langages ?<br />

Le nombre <strong><strong>de</strong>s</strong> langages est une conséquence normale <strong>de</strong> l’existence <strong>de</strong> nombreux<br />

styles pour exprimer un algorithme ou une classe d’algorithmes. Chaque style<br />

exprime un niveau d’abstraction particulier : le style fonctionnel décrit le résultat à<br />

obtenir plus que la façon <strong>de</strong> le calculer, le style impératif fait exactement l’inverse, le<br />

style logique définit les algorithmes par <strong><strong>de</strong>s</strong> combinaisons <strong>de</strong> règles individuellement<br />

simples, le style obj<strong>et</strong> encapsule les données dans <strong><strong>de</strong>s</strong> classes fournissant <strong><strong>de</strong>s</strong> métho<strong><strong>de</strong>s</strong><br />

<strong>de</strong> traitement locales, le style parallèle abandonne l’idée <strong>de</strong> suivre un programme<br />

avec un doigt, le style graphique propose une programmation plus visuelle que<br />

textuelle ; la gestion <strong>de</strong> la mémoire est soit explicite soit implicite, les pointeurs sont<br />

autorisés ou non, <strong>et</strong>c. Par ailleurs, il existe plusieurs styles syntaxiques capables à eux<br />

seuls <strong>de</strong> faire se battre les gens : C est piquant <strong>et</strong> impératif, LISP est rond <strong>et</strong> récursif,<br />

CAML est mathématique <strong>et</strong> récursif, <strong>et</strong>c. Comme en art, chaque style a son intérêt<br />

<strong>et</strong> combiner <strong>de</strong>ux styles n’est jamais simple.<br />

5.3. Syntaxe, types <strong>et</strong> sémantiques<br />

Tout langage a trois composantes fondamentales : une syntaxe, qui définit les<br />

programmes bien écrits, un système <strong>de</strong> types, qui assure avant d’exécuter les<br />

programmes qu’on n’additionnera pas <strong><strong>de</strong>s</strong> choux <strong>et</strong> <strong><strong>de</strong>s</strong> carottes, <strong>et</strong> une sémantique,<br />

qui définit le sens <strong><strong>de</strong>s</strong> programmes.<br />

L’analyse syntaxique est un problème magnifiquement réglé <strong>de</strong>puis longtemps. Le<br />

typage évolue encore. Il est fondamental pour détecter les erreurs avant l’exécution <strong>et</strong><br />

donc avant qu’elles n’aient <strong><strong>de</strong>s</strong> conséquences. FORTRAN n’avait que <strong><strong>de</strong>s</strong> nombres<br />

entiers <strong>et</strong> flottants. LISP n’avait pas <strong>de</strong> types du tout. Pascal, C, Ada, C ++ , <strong>et</strong>c. ont<br />

incorporé <strong><strong>de</strong>s</strong> systèmes <strong>de</strong> types <strong>de</strong> plus en plus riches, perm<strong>et</strong>tant <strong>de</strong> définir <strong><strong>de</strong>s</strong><br />

structures <strong>de</strong> données complexes tout en détectant beaucoup d’erreurs. ML a fait un<br />

pas important en introduisant un système <strong>de</strong> types qui garantit mathématiquement<br />

l’absence d’erreur à l’exécution, avec inférence <strong>de</strong> types pour éviter d’écrire les types à<br />

la main, <strong>et</strong> généricité pour écrire par exemple <strong><strong>de</strong>s</strong> files d’attente bien typées<br />

fonctionnant sur types paramétriques. La théorie <strong><strong>de</strong>s</strong> types est bien établie<br />

mathématiquement mais peut encore progresser pratiquement.<br />

La sémantique <strong><strong>de</strong>s</strong> programmes définit ce qu’ils doivent faire. Elle est souvent<br />

traitée un peu par <strong><strong>de</strong>s</strong>sus la jambe : exécutez donc votre programme pour voir ce<br />

qu’il fait ! Pourtant, avoir une sémantique claire est indispensable pour avoir <strong><strong>de</strong>s</strong><br />

programmes portables d’une machine à une autre, être sûr <strong>de</strong> ce qu’ils font, <strong>et</strong> les<br />

prouver formellement. La communauté théorique sait maintenant définir<br />

complètement la sémantique d’un langage, pourvu qu’il soit conçu pour. Par<br />

exemple, <strong><strong>de</strong>s</strong> langages comme Caml, Lustre <strong>et</strong> Esterel sont définis <strong>de</strong> façon<br />

mathématique <strong>et</strong> ne peuvent donner lieu à <strong><strong>de</strong>s</strong> erreurs d’interprétation.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!