| (Disclaimer: I know next to nothing about Ada). > Being able to define custom bounds checked ordinals That Rust doesn't have (builtin, at least). > being able to index arrays with any enumerable type In Rust you can impl `std::ops::Index` and index types, including arrays, with whatever you want. > Defining custom arithmatic operators for types Again, definitely possible by implementing traits from `std::ops`. > adding compile and runtime typechecks to types with pre/post conditions, iteration variants If you refer to the default runtime verification, that's just a syntax sugar for assertions (doable in Rust via a macro). If you refer to compile-time verification via SPARK, Rust's formal verification libraries usually offer this tool as well. > predicates Doable via newtypes. > Discriminant records That's just generic ADTs if I understand correctly? > Record representation clauses Bitfields aren't available but you can create them yourself (and there are ecosystem crates that do), other than that you can perfectly control the layout of a type. |