№ —La tensionThe tension1 min
Une variable ne contient pas un objet — elle pointe vers lui.A variable doesn't contain an object — it points at one.
Ce frontispice n'enseigne pas un mécanisme : il dit le fil qui relie les trois numéros du volume. En Ruby, a = b ne copie rien : les deux noms désignent le même objet partagé. De ce seul fait découlent les bugs les plus silencieux du langage — et les outils pour les tenir. Le dev venant d'un langage à valeurs doit désapprendre un réflexe : ici, passer un objet, c'est en partager l'accès. Les trois numéros tournent autour d'une vérité et d'une même limite : chaque opération travaille en surface, sur un seul niveau.This frontispiece teaches no mechanism: it states the thread linking the volume's three issues. In Ruby, a = b copies nothing: both names name the same shared object. From this single fact flow the language's quietest bugs — and the tools to hold them. A dev from a value-language must unlearn a reflex: here, passing an object shares access to it. The three issues circle one truth and one recurring limit: every operation works at the surface, on a single level.
Le réflexe du volume : cette variable tient-elle une copie ou le même objet — et qui d'autre tient ce même objet ?The volume's reflex: does this variable hold a copy or the same object — and who else holds that same object?
№ —Le filThe thread1 min
Trois gestes, une même limite : un seul niveau.Three moves, one same limit: a single level.
Les trois numéros ne sont pas trois astuces : ils répondent à une seule question — qui partage quoi, et jusqu'où va mon opération ? Le № 1 nomme le danger : l'objet partagé, muté à distance. Le № 2 le neutralise : freeze rend l'objet immuable, donc sûr à partager. Le № 3 l'isole : dup le copie — mais d'un seul niveau, les sous-objets restent partagés. Le miroir est exact : freeze gèle une couche, dup copie une couche. Ruby travaille au premier niveau ; c'est à toi de décider du reste.The three issues aren't three tricks: they answer one question — who shares what, and how far does my operation reach? № 1 names the danger: the shared object, mutated at a distance. № 2 neutralizes it: freeze makes the object immutable, hence safe to share. № 3 isolates it: dup copies it — but one level only, the sub-objects stay shared. The mirror is exact: freeze freezes one layer, dup copies one layer. Ruby works at the first level; the rest is yours to decide.
Chaque geste s'arrête au premier niveauEach move stops at the first level
№ 1
PartagerShare
le même objetthe same object
partagéshared
№ 2
GelerFreeze
immuable, partageableimmutable, shareable
partagéshared
№ 3
CopierCopy
dup, un crandup, one notch
partagéshared
↑ niveau 1 (agi) · ↓ contenu imbriqué, toujours partagé↑ level 1 (acted on) · ↓ nested contents, still shared
Aliasing, freeze, dup : les trois opèrent en surface et laissent le contenu d'en dessous tel quel. La discipline n'est pas « copie tout » ni « gèle tout » — c'est sache qui partage quoi, et n'agis qu'au niveau qui compte.Aliasing, freeze, dup: all three operate at the surface and leave the contents beneath as they are. The discipline isn't 'copy everything' nor 'freeze everything' — it's know who shares what, and act only at the level that matters.
№ —Les numéros du volumeThe volume's issues1 min
Nommer le partage, geler, copier — et le contre-exemple à chaque fois.Name the sharing, freeze, copy — and the counter-example each time.
| № | Le mécanismeThe mechanism | Ce qu'il installeWhat it installs |
|---|
| 1 | Référence partagée — le dangerShared reference — the danger | a = b ne copie rien : muter en place (<<, gsub!) se voit chez tous les détenteurs. equal?/==/eql?, object_id.a = b copies nothing: mutating in place (<<, gsub!) shows for every holder. equal?/==/eql?, object_id. |
| 2 | freeze — neutraliserfreeze — neutralize | Geler rend la mutation impossible, donc le partage sûr. Frozen string literals, FrozenError — mais gel superficiel : un seul niveau.Freezing makes mutation impossible, so sharing safe. Frozen string literals, FrozenError — but shallow freeze: one level only. |
| 3 | dup vs clone — isolerdup vs clone — isolate | Copier ne copie qu'une couche : les sous-objets restent partagés. Copie ciblée vs Marshal « au cas où ».Copying copies only one layer: sub-objects stay shared. Targeted copy vs Marshal 'just in case'. |
Un nom est une flèche vers un objet ; plusieurs flèches visent le même. Geler comme copier s'arrêtent au premier maillon — le contenu, lui, reste en commun.A name is an arrow to an object; several arrows aim at the same one. Freezing like copying stops at the first link — the contents stay shared.