La principale différence entre Common Lisp et Scheme prend sa source dans les objectifs de la conception du langage. Le langage qui en résulte reflète ces objectifs.
Scheme était conçu pour servir de langage de recherche et d'enseignement. Il était donc très important que la sémantique soit sans ambiguïtés, qu'elle soit possible à définir formellement et qu'elle soit courte (quelques pages).
Scheme n'était donc pas destiné à de gros programmes nécessitant des années de maintenance, ni à des programmes extrêmement rapides. La généralité et la puissance des fonctionnalités était importante, afin de permettre aux programmeurs de réaliser leurs propres outils. La notion de continuation en est un exemple. C'est une fonctionnalité qui n'est pratiquement jamais directement utilisée, mais qui est très utile pour programmer d'autres constructions habituellement utilisées (comme return-from par exemple). Par contre, à cause des continuations, Scheme est relativement difficile à implémenter efficacement. On dit que Scheme est un langage orthogonal, c'est-à-dire un langage qui possède des mécanismes puissants, indépendants et arbitrairement composables. Le langage Common Lisp, lui, a été conçu pour servir de langage de production. L'orthogonalité n'était pas un objectif immédiat comme en Scheme. Par contre, il était très important que les constructions de base puissent être implémentées efficacement afin que les implémentations du langage soient aussi rapides que celle des langages traditionnels comme C. Ainsi, Common Lisp permet des déclarations de types afin que le programmeur puisse fournir autant d'informations au compilateur que le programmeur C.
Irene DURAND