Clevere Lösung für widersprüchliche Blanket-Implementierungen in Rust

2025-07-04
Clevere Lösung für widersprüchliche Blanket-Implementierungen in Rust

Rusts Trait-System ist leistungsstark, aber streng in Bezug auf die Vermeidung von Mehrdeutigkeiten bei Blanket-Implementierungen. Der Autor stieß bei der Entwicklung von Joydb auf dieses Problem, wobei zwei sich gegenseitig ausschließende Implementierungen des `Adapter`-Traits unterstützt werden mussten: `UnifiedAdapter` und `PartitionedAdapter`. Ein direkter Ansatz mit Blanket-Implementierungen schlug fehl. Die Lösung, die in diesem Beitrag detailliert beschrieben wird, verwendet Marker-Structs (`Unified` und `Partitioned`), ein Hilfstrait (`BlanketAdapter`) und einen assoziierten Typ im `Adapter`-Trait. Dies ermöglicht geschickt beide Verhaltensweisen, ohne gegen die Kohärenzregeln von Rust zu verstoßen, und erhält gleichzeitig eine gute Code-Ergonomie und Wartbarkeit.

Mehr lesen