Mcarthy
Dans le langage mathématique il n’existe pas de notation idoine lorsqu’il s’agit d’exécuter une suite d’opérations selon une condition, sinon que de l’écrire en toutes lettres en dehors du langage mathématique.
Avec le formalisme de McCarthy dans les années 60, la notion d’exécution conditionelle ou paresseuse et de parties faibles apparait, ainsi que des notations abstraites proches de la logique venant avec.
Ce formalisme permet d’expliciter explicitement les étapes que l’on souhaite exécuter ou non via une notation idoine jusque là absente des mathématiques.
L’exécution conditionelle des blocs existait deja de facto dans le langage ALGOL, McCarthy leur a donné un formalisme mathématique et a introduit la notion d’evaluation paresseuse.
Evaluation paresseuse
Soient A()
et B()
deux suites
qui convergent vers le resulat R
a des vitesses differentes
Dans le pseudo-programme
if(equal(R , A() or B()))
then
...
Ici si le programe constate qu’une des deux suites converge
plus rapidement vers le résultat R
, on remarque
que le programme peut être paresseux et stopper
l’exécution d’une des deux suites et alouer toute
sa ressource à l’autre.
Ces considérations sont académiques et n’ont
pas d’équivalent dans la réalité mais par la
nature court-circuitante et “paresseuse”
des opérateurs &&
et ||
, on les appelle parfois dans les
années 70 « opérateurs de Mc Carthy ».
En C il n’est pas question d’exécution parellèle, mais l’évaluation paresseuse existe à plusieurs endroits de sa syntaxe suivant des règles strictes d’exécution séquentielle de gauche à droite et de haut en bas.
int y() {
return 1;
}
int n() {
return 0;
}
int main() {
int a = 2;
volatile int b = 0;
int c = b && y(); // y() n'est pas exécuté
int d = y() || n(); // n() n'est pas exécuté
if(b) {
...; // sur les processeurs récents sera
// probablement pré-exécuté si pas d'effets de bord
// en pratique le processeur peut etre paresseux et ne rien
// exécuter de ce bloc.
} else {
puts("ko"); // sera probablement exécuté en fonction
// de la valeur de b - qui peut varier sans qu'on puisse le prévoir
}
}
References
A BASIS FOR A MATHEMATICAL THEORY OF COMPUTATION, JOHN McCARTHY 1961–1963 : http://jmc.stanford.edu/articles/basis/basis.pdf 🌍⤴
A Note on Conditional Expressions , Daniel P. Friedman and David S. Wise, 1978 : https://dl.acm.org/doi/pdf/10.1145/359642.359650 🌍⤴