Définition du concept de couleur
Dans la littérature technique, un « couleur » désigne un attribut de fonction dont la modification impose une adaptation immédiate de tous les appelants situés au‑dessus dans la pile d’appels. Le texte décrit trois scénarios de propagation : aucune modification requise, modification du caller direct, ou modification de l’ensemble de la chaîne. La différence clé réside dans le fait que, pour une couleur, le changement ne s’arrête pas à l’appelant immédiat mais s’étend inévitablement à chaque niveau supérieur.
Analyse du contexte Go
Le context.Context de Go illustre un cas souvent invoqué comme couleur. Il transporte timeout, annulation et un petit jeu de données, et est censé être transmis à chaque fonction susceptible d’en avoir besoin. En pratique, l’ajout d’un paramètre context.Context à une fonction ne force pas systématiquement la mise à jour de tous les appelants : tout appelant peut invoquer context.Background() pour fournir un contexte « dégradé » mais fonctionnel. Cette possibilité d’injection d’un contexte par défaut montre que le changement de signature ne se propage pas automatiquement, contredisant la définition stricte d’une couleur.
Propagation des changements dans la pile d’appels
Le texte propose un graphe de dépendance où un changement « normal » se propage uniquement au caller direct, puis éventuellement à d’autres niveaux si chaque fonction ne capture pas la modification. En revanche, un changement de couleur impose une propagation totale. L’exemple de Go révèle que les développeurs utilisent fréquemment des points d’arrêt précoces (le contexte de fond) pour interrompre la chaîne, ce qui rend la propagation totale rare. Cette pratique repose sur la capacité du langage à fournir des valeurs par défaut qui satisfont l’interface attendue sans imposer de contraintes supplémentaires.
Implications et limites
La distinction entre couleur et paramètre ordinaire dépend fortement des mécanismes du langage. Dans certains langages, l’asynchronisme peut être une couleur (par ex. JavaScript async/await) si chaque fonction doit être marquée async pour être appelée correctement. Dans d’autres, comme Zig, la couleur dépend de la valeur d’entrée (un objet I/O) plutôt que de la fonction elle‑même. Ainsi, la classification n’est pas universelle : elle exige une analyse du modèle de propagation du langage. Enfin, l’absence de métriques quantitatives dans l’article limite la capacité à mesurer la fréquence réelle des propagations totales, ce qui laisse la théorie partiellement non vérifiée.