вообще удивительно почему до сих пор contract-based programming в Rust неразвит
Потому что основной источник ошибок это неучтённые сайдэффекты или изменившееся окружение (которое ломает инварианты): http://www.cse.psu.edu/~gxt29/bug/softwarebug.html А контракты можно и проперти-тестами покрыть. (Их правда тяжело дизайнить, но это уже другая история)