• [^] # Re: Joli journal

    Posté par . En réponse au journal Tagless-final ou l'art de l'interprétation modulaire.. Évalué à 4.

    Sur la question de where, il y a deux niveaux de réponse.

    1. Pourquoi ça a été enlevé. Ça a été enlevé parce que Xavier Leroy a conçu Caml Light comme un sous-ensemble simplifié du Caml existant à l'époque, en retirant tout ce qui lui semblait peu utilisé en pratique ou redondant. Donc where a sauté parce qu'on avait déjà let pour faire la même chose.

    2. Pourquoi ça n'a pas été remis. J'aime bien where aussi et si j'étais convaincu de pouvoir fournir une argumentation solide pour le remettre, je l'aurais fait. Le problème c'est que where pose plein de questions délicates sur les précédences de la grammaire qui n'ont pas de réponses claires—je m'en suis rendu compte en implémentant une extension de syntaxe pour where, pa_where. let <p> = <e1> in <e2> est une construction qu'on peut appeler "ouverte à droite", il y a un délimiteur qui ferme la construction sur la gauche mais pas sur la droite (comme if <e1> then <e2> else <e3> ou d'autres, mais au contraire de begin <e> end qui n'est ouvert d'aucun côté). Au contraire, <e1> where <p> = <e2> est ouverte à gauche; mélanger des constructions ouvertes à gauche et ouverte à droite pose de nombreux problèmes de précédence à décider. Par exemple, quelle est la signification de let x = e1 in e2 where y = e3 ? Un autre cas délicat est la gestion du and qui est commun à where et let: let x1 = e1 where x2 = e2 and x3 = e3 in e4, à qui est attaché le and ?

    Dans un langage à indentation significative, on a beaucoup moins de problèmes de précédence puisque le parenthésage apporté par l'indentation ferme beaucoup plus les constructions. C'est un avantage notable de ces langages en terme d'évolutions possibles de la syntaxe.