Partage d'une référence (aliasing)
Exercice · OCaml (option informatique), chapitre 4 — Programmation impérative : références et boucles
Énoncé
Donner la valeur finale de chacun des deux fragments, et expliquer la différence.
(* A *) (* B *)
let a = ref 0 in let a = ref 0 in
let b = a in let b = ref !a in
a := 5; a := 5;
!b !bCorrigé
(A) renvoie 5 ; (B) renvoie 0.
En (A), let b = a lie b à la même référence que a (les deux noms désignent l'unique case mémoire) : modifier via a se voit à travers b. C'est l'aliasing.
En (B), ref !a crée une nouvelle référence initialisée avec la valeur actuelle de a (soit 0) ; a et b sont alors indépendantes, et l'affectation ultérieure sur a ne touche pas b.
(C'est tout l'enjeu du « à bon escient » : une référence partagée par mégarde est une source classique de bogues. On retiendra : let b = a partage, let b = ref !a copie.)
Les autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.