Contournement astucieux pour les implémentations blanket conflictuelles en Rust
2025-07-04
Le système de traits de Rust est puissant mais strict quant à l'évitement de l'ambiguïté dans les implémentations blanket. L'auteur a rencontré ce problème lors de la création de Joydb, devant prendre en charge deux implémentations mutuellement exclusives du trait `Adapter` : `UnifiedAdapter` et `PartitionedAdapter`. Une approche directe utilisant des implémentations blanket a échoué. La solution, détaillée dans ce billet, utilise des structs marqueurs (`Unified` et `Partitioned`), un trait auxiliaire (`BlanketAdapter`) et un type associé dans le trait `Adapter`. Cela permet habilement les deux comportements sans violer les règles de cohérence de Rust, en maintenant une bonne ergonomie et maintenabilité du code.
Développement
Implémentations Blanket