Échappements et sauts

Common Lisp permet de quitter une fonction ou un bloc nommé à n'importe quel point de l'exécution (un peu comme le break et return en C, mais en plus général). Cette fonctionnalité est essentielle pour éviter des constructions artificielles très souvent utilisées au temps de la programmation structurée dans les années 1970 avec des langages sans cette fonctionnalité ; une variable booléenne dont le nom est trouvé, done, continuer ou done en sont un symptôme.

En plus des échappements qui nécessitent un contexte syntaxique (nom d'une fonction ou d'un bloc), Common Lisp permet aussi des sauts non locaux (en Anglais : non-local goto) similaires à setjmp et longjmp du langage C (voir chapitre 17). Ces primitives (catch et throw) sont indispensables pour la gestion des erreurs et des situations exceptionnelles. De plus Common Lisp permet à une fonction de se protéger d'un tel saut avec unwind-protect. Dans plusieurs langages modernes (comme C++ par exemple), il y a confusion entre les sauts non locaux et les exceptions, alors qu'en Common Lisp il s'agit de deux mécanismes séparés.

Irene DURAND
2011-10-14