Langages sûrs
De nombreuses propriétés différencient les langages de programmation.
Il y a, par exemple, des langages typés et des langages sûrs.
Un langage typé possède un système de types permettant de qualifier
les valeurs que sait manipuler ce langage à savoir: des valeurs
simples comme des chaînes de caractères ou des vecteurs d'entiers mais
aussi des valeurs plus compliquées comme des fonctions. Cette
vérification est effectuée avant l'exécution et garantit que quelque
soit les valeurs réelles que possèderont les variables l'exécution du
programme ne saurait mener à une erreur de type (comme, par exemple,
l'addition d'un booléen et d'une chaîne). La plupart des langages (C,
Caml, Java) sont typés, Scheme ne l'est pas. La vérification de types
dénonce rapidement de très nombreuses erreurs ce qui permet de les
corriger non moins rapidement. En revanche, tout ne peut être vérifié
par typage: une division par zéro, un indice de vecteur hors vecteur,
une tentative de lecture d'un fichier qui n'existe pas sont des
erreurs hors d'atteinte des sytèmes de types.
Un langage sûr est un langage qui, à l'exécution, vérifie que le
programme se comporte correctement et qui signale immédiatement toute
anomalie. Scheme (comme Caml ou Java) est un langage sûr, C ne l'est
pas. Dans un langage sûr, l'addition ne peut être appliquée à un
booléen car cette valeur n'est pas un nombre; une division par zéro
est également signalée car anormale; enfin, tout accès hors vecteur
est dépisté. Pour assurer cette sûreté, les valeurs de Scheme sont
typées, il est possible de les interroger à l'aide des prédicats
comme string? ou integer? pour connaître leur type.