On est d’accord que le cas raisonnable est plutôt d’avoir assert x == 1
qui passe ? Autrement dit, x=2
shadow le x
du scope parent dans le bloc, mais ne change pas ce que le scope global voit. J’ai l’impression que le cas du shadowing est couvert proprement en ne faisant jamais remonter le HashMap<Ident, Value>
(et en faisant descendre les variables capturées). Autrement dit, le code suivant doit passer :
let x = 1
let y = 42
{
let x = y + 1
assert x == 43
}
assert x == 1
hs: pourquoi plusieurs personne utilise ocaml pour créer un mini langage parce qu’a part d’être fonctionnelle(même si c’est déjà un grand avantage) il a pas de tres grand avantage (sans vouloir blesser les fan d’OCaml)
C’est sûrement un mélange de plusieurs choses :
- écrire un lexer, un parser, et un interpréteur marche plutôt bien en paradigme fonctionnel ;
- il n’y a pas besoin d’un écosystème très riche pour écrire un compilateur ou un interpréteur, donc le fait que OCaml soit relativement "niche" n’est pas un problème ;
- les gens qui écrivent des petits langages pour étudier des aspects précis du design d’un langage ont souvent une culture informatique relativement large, et tendent à graviter autour de langages qui sont eux-même plutôt bien conçus d’un point de vue académique (certains de ces projets qui démarrent comme une expérience donnent naissance à des langages industriels puisque les premiers compilateurs Rust étaient en OCaml, jusqu’à ce que Rust en tant que langage ait été suffisamment mûr pour écrire le compilo en Rust) ;
- le phénomène s’auto-entretient probablement puisqu’il y a beaucoup de ressources sur le sujet qui utilisent des exemples en OCaml.
+0
-0