Définitions
Calcul Lambda :
Le calcul lambda (ou
-calcul) est une théorie mathématique de la calculabilité, crée par Alonzo Church en 1933, ou l'on cherche à formaliser la notion de fonctions au sens mathématique du terme.
Effets de bords et Affectation :
Les effets de bords (ou Side effects) se définissent comme la modification par une fonction de son environnement (au sens large). Le rôle d'une fonction est en effet de délivrer un résultat mais il arrive qu'elle est d'autres effets, afficher une valeur à l'écran (et, par exemple déplacer le curseur), vider le contenu d'un tampon, modifier la valeur d'une variable libre (externe) ou tout autre chose, tous ces effets hétéroclites sont réunis sous le terme générique d'effets de bords.
On pourrait dire des effets de bords qu'ils sont un mal nécessaire. En effet un langage se vantant de ne pas en posséder, ne pourrait permettre l'affectation, bien, mais il ne pourrait non plus permettre la saisie de données, l'affichage, ou tout autre moyen de communiquer des résultats vers l'extérieur du programme avant la fin de celui-ci.
En fait, le premier de ses effets est bien l'affectation car qu'est l'affectation si ce n'est un effet de bord sur la valeur d'une variable. L'usage de l'affectation ouvre donc irrémédiablement la porte à ces troubles fêtes. Et c'est dommage car sans affectation la transparence référentielle du langage est maintenue. La transparence référentielle étant la propriété que possède un langage quand la substitution d'une expression dans un programme par une autre expression équivalente (calculant la même chose) ne modifie pas le comportement du programme, il retourne toujours le même résultat. La transparence référentielle permet notamment de nombreuses transformations de programmes comme le déplacement de code, l'évaluation parallèle ou encore l'évaluation paresseuse.
Affecter une variable dans une fonction c'est donc modifier sa valeur dans l'environnement présent (et par la même le faire évoluer), tout dépend maintenant de quel environnement disposons nous lorsque l'affectation à lieu. Si les liaisons sont lexicales l'affectation d'une variable libre dans une fonction n'a d'effet que sur la fermeture de cette fonction, comme de plus il ne s'agit que d'une copie, les modifications ne sont visible que pour le corps qui est en train d'être évaluer, comme toute variable locale. Mais attention ceci n'est valable que pour une gestion hyperstatique de l'environnement global, pour une gestion dynamique de l'environnement global, comme pour une gestion totalement dynamique, les modifications apportés à la variable seront visibles hors de la fonction.