Rust programlama dilinde API tasarımını geliştirmeye yönelik önemli bir yaklaşım olan 'Parse, don't Validate' ve 'Type-Driven Design' kavramları, genellikle Haskell örnekleriyle açıklansa da, bu makale Rust odaklı bir bakış açısı sunuyor. Temel fikir, çalışma zamanında (runtime) doğrulama fonksiyonları kullanmak yerine, veri yapılarının değişmezlerini (invariants) doğrudan tür seviyesinde kodlayarak hataları derleme zamanına taşımaktır. Bu sayede, programların daha güvenli ve hatasız olması, hataların mümkün olan en erken aşamada yakalanması ve geliştirme sürecinin verimliliğinin artırılması amaçlanır.
Makale, sıfıra bölme gibi yaygın bir problemi örnek alarak konuyu açıklıyor. Geleneksel yaklaşımlarda, bir sayıyı sıfıra bölmek ya programın çökmesine (panic) neden olabilir ya da NaN gibi sessiz hatalara yol açabilir. Python gibi dinamik dillerde bu tür hatalar genellikle ancak program çalıştırıldığında ortaya çıkarken, Rust'ın zengin tür sistemi bu hataları daha erken, yani derleme aşamasında yakalama potansiyeli sunar. Yaygın bir çözüm olan Option veya Result döndüren 'hata verebilen fonksiyonlar' (fallible functions) yaklaşımı, fonksiyonun başarısız olabileceğini belirtse de, değişmezlerin dönüş türünde, yani 'sonradan' kodlandığı anlamına gelir.
Bu noktada 'newtype pattern' (yeni tür deseni) devreye girer. Yazar, f32 gibi bir temel türün sıfır olmama garantisi veren NonZeroF32 adında yeni bir tür oluşturmayı önerir. Bu türün içindeki f32 alanı özel (private) tutularak ve yalnızca sıfır olmayan değerleri kabul eden bir kurucu fonksiyon (constructor) aracılığıyla oluşturulmasına izin verilerek, sıfır olmama değişmezi tür seviyesinde garanti altına alınır. Böylece, bölme işlemi yapan fonksiyon, doğrudan NonZeroF32 türünde bir parametre kabul ederek, sıfıra bölme hatasının derleme zamanında önlenmesini sağlar. Bu yaklaşım, hataları çalışma zamanından derleme zamanına taşıyarak daha sağlam ve güvenilir API'ler tasarlamanın yolunu açar.
Bu yaklaşım, programlama hatalarını çalışma zamanından derleme zamanına taşıyarak yazılım güvenilirliğini ve API tasarım kalitesini önemli ölçüde artırır.