Parse, Don't Validate and Type-Driven Design in Rust
Cet article présente le motif parse-dont-validate et propose une approche Rust‑centrée qui encode des invariants directement dans les types plutôt que de s’appuyer sur des vérifications à l’exécution. Il montre comment la division par zéro peut panique au runtime et compare des solutions avec Option ou Result pour signaler les échecs de façon explicite. Pour éviter les panics, il introduit le pattern newtype comme NonZeroF32 et NonEmptyVec, afin que les invariants soient établis avant l’exécution et réduire les vérifications répétées. L’article évoque aussi des usages concrets comme String et la désérialisation via des types pour transformer des données en structures sûres plutôt que de s’appuyer sur des validations dynamiques. Enfin, il tire des leçons sur rendre les états illégaux impossibles et privilégier la validation précoce (type-driven design), tout en reconnaissant les limites et les défis de ce paradigme.