Vol. 4 · № 00 · Un atelier RubyA Ruby workshop

Le fil du Vol 4, ou tout opère en surface The thread of Vol 4, or everything works at the surface

Avant les trois numéros, le pourquoi. En Ruby, a = b ne copie rien : l'objet est partagé. Les trois numéros répondent à une question — qui partage quoi — avec une même limite : chaque geste s'arrête au premier niveau. Nommer le danger, geler pour neutraliser, copier pour isoler — et freeze comme dup ne couvrent qu'une couche. Before the three issues, the why. In Ruby, a = b copies nothing: the object is shared. The three issues answer one question — who shares what — with one same limit: each move stops at the first level. Name the danger, freeze to neutralize, copy to isolate — and freeze like dup cover one layer only.

AudienceAudience
Avant d'ouvrir le volume : pourquoi ces trois numéros, dans cet ordre Before opening the volume: why these three issues, in this order
Format
Self-paced
ChapitresChapters
3
Date
Fév 2026 Feb 2026
≈ 3 min ●○○○ Le filMutabilité
SommaireContents ·
№ —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 mechanismCe qu'il installeWhat it installs
1Référence partagée — le dangerShared reference — the dangera = 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.
2freeze — neutraliserfreeze — neutralizeGeler 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.
3dup vs clone — isolerdup vs clone — isolateCopier 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.