“doc” (Col. : Science Sup 17x24) — 2007/7/19 — 18:18 — page 37 — #47
i
i
i
i
i
i
i
i
2.1 Définir un langage de programmation pratique
37
Un exemple simple d’une abstraction linguistique est la fonction. Cette abstraction
utilise le mot clé fun. Sa syntaxe et sa traduction sont expliquées dans la section 2.6.2.
Nous avons déjà utilisé des fonctions au chapitre 1. Mais notre langage noyau n’a
que des procédures. Nous utilisons des procédures parce que tous les arguments sont
explicites et qu’il peut y avoir plusieurs résultats. Il y a d’autres raisons, plus profondes,
pour choisir les procédures. Elles sont expliquées plus loin. Mais comme les fonctions
sont très utiles, nous les avons ajoutées comme une abstraction linguistique.
Nous définirons une syntaxe pour les définitions et les appels de fonction, et une traduction de cette syntaxe vers le langage noyau. La traduction nous permet de répondre
à toutes les questions sur les appels de fonction. Par exemple, que fait {F1 {F2 X}
{F3 Y}} exactement (quand il y a des appels imbriqués) ? L’ordre des appels est-il
défini ? Si oui, quel est cet ordre ? Il y a beaucoup de possibilités. Certains langages
prennent la décision de ne pas spécifier l’ordre d’évaluation des arguments d’une
fonction. Ils supposent uniquement que les arguments sont évalués avant la fonction
elle-même. D’autres langages supposent qu’un argument sera évalué uniquement si
on a besoin de son résultat, au moment de ce besoin. Nous voyons qu’une chose aussi
simple que les fonctions imbriquées n’a pas forcément une sémantique évidente. Un
des rôles de la traduction est de clarifier cette sémantique.
Les abstractions linguistiques sont utiles pour d’autres choses que pour simplement augmenter l’expressivité d’un programme. Elles peuvent aussi améliorer des
propriétés comme l’exactitude, la sécurité et l’efficacité. En cachant l’implémentation
d’une abstraction du programmeur, le soutien linguistique rend impossible l’utilisation
erronée de l’abstraction. Le compilateur peut profiter de ce fait pour générer du code
plus efficace.
Le sucre syntaxique
Il est souvent commode d’avoir une notation raccourcie pour certaines expressions
idiomatiques. Il s’agit d’une courte séquence d’instructions qui est souvent utilisée. On
peut définir une notation plus courte pour une expression idiomatique. Cette notation
fera partie de la syntaxe du langage pratique et sa définition fera partie des règles
de grammaire. Cette notation s’appelle le sucre syntaxique. Le sucre syntaxique est
semblable à l’abstraction linguistique dans la mesure où pour les deux, la sémantique
est définie par une traduction vers le langage noyau. Mais il ne faut pas les confondre :
le sucre syntaxique ne définit pas une nouvelle abstraction, mais réalise simplement
une réduction de la taille du programme et une amélioration de sa lisibilité.
Nous donnons un exemple de sucre syntaxique basé sur l’instruction local. Une
variable locale peut à tout moment être définie avec l’instruction local X in ...
end. Quand cette instruction est à l’intérieur d’une autre, il est commode d’avoir un
sucre syntaxique qui permet d’omettre les mots clés local et end. Au lieu de
if N==1 then [1] else local L in ... end end
© Dunod – La photocopie non autorisée est un délit
Précédent

- 52/370

Suivant