Adloun

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                           !b

Corrigé

(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.