3 ms·
It would be great if C++, Rust, Zig or similar languages could have language features to support invariant assertions. The library solutions are not good enough
by wyldfire 3y ago
It would be great if C++, Rust, Zig or similar languages could have language features to support invariant assertions. The library solutions are not good enough IMO.
- hansvm 3y agoI could see C++ or Rust maybe adding that eventually, but it seems unlikely for Zig unless they relax some of their core design goals. The problem with invariant assertions is figuring out when exactly they should run, and that idea that something might run _every_ time any public method is called or whatever definitely conflicts with the design they're going for. That said, Zig does make it pretty easy to handle a lot of the features you might want. As a library, you can offer the ability for a person to rewrite a type (maybe only in non-optimized modes if you want) and check the invariants before/after every public function call. You can always add explicit pre/post-condition checks to any function you'd like. Invariants in your inputs/outputs can be hoisted to the type checker (I wrote a toy project doing this [0]). Like...at some point you have to describe what you want to check and when you want it to run for the invariant checking to be useful, and Zig allows you to write the checks and use comptime magic to place them where you want them to run, all in the userspace of the language. Which language features would you like to make the process smoother (automatic subtype resolution on a lattice of constraints, a bit of syntax, ...)? [0] https://github.com/hmusgrave/pdv https://github.com/hmusgrave/pdv