A goal of programming is to divide a complex task into simpler parts. In a well organized program each of these simpler tasks is represented by a procedure. Each procedure should perform a distinct action. Its user should not have to be conscious about the details of its implementation and should not have to undo or repeat work performed by it. This excess interaction between procedures is called leakage. When leakage is eliminated, the clarity and correctness of programs is enhanced. Our goal in this paper is to show how some leakage can be removed by using a generalization of continuation-passing style. We emphasize the development of a clear programming style rather than efficiency.
Lire maintenant ?
gasche
J’ai apprécié la lecture de cet article qui est à la fois simple, clair et, je trouve, stimulant. Cependant, je pense que le traitement du sujet n’est pas satisfaisant, dans le sens où ils n’ont pas résolu le problème qu’ils posaient au départ, mais ont obtenu une solution intéressante (bien qu’à développer) à un autre problème.
Le cœur de l’article est une critique des valeurs de retour encodant un flot de contrôle. Si par exemple la fonction appelée contient un cas d’erreur, elle peut renvoyer une valeur de type
'a optionet représenter ce cas parNone. Ensuite l’appelant distingue selon les valeurs de retour le comportement à adopter. Les auteurs critiquent une conversion contrôle->données->contrôle superflue, et proposer de donner à l’appelé des continuations (une pour le cas None et une pour le cas Some) qu’il invoque directement.Cette approche est plus efficace (ou plutôt, peut être rendue plus efficace), puisqu’elle revient à effectuer à la main une forme de déforestation. C’est à mon avis son intérêt principal, en tout cas c’est dans cette optique que je m’y suis intéressé. Par contre, les auteurs se trompent quand ils pensent avoir évité une "duplication" le long de la bordure appelé/appelant : elle est toujours présente, mais est maintenant encodée dans la façon dont l’appelant passe les continuations. Ce qu’il faudrait en réalité c’est une façon systématique de structure le flot de contrôle, de même que les types algébriques proposent une façon systématique de structure les données. Mais dans tous les cas, cette structure est exposée en retour de la fonction et doit être consommée par l’utilisateur du résultat.