3 ms·
Show HN: Zig-DbC – A design by contract library for Zig
Hi everyone,
I've made an open-source library for using design by contract (DbC) principles in the Zig programming language.
It's called Zig-DbC, and it currently provides the following features:
- A simple API to define preconditions, postconditions, and invariants.
- Contracts are active in `Debug`, `ReleaseSafe`, and `ReleaseSmall` modes to catch bugs early.
- All checks are removed at compile time in `ReleaseFast` mode for zero performance cost.
- An optional mode to handle partial state changes in functions that return errors.
- Transparent error handling that propagates errors from your code to the caller.
Project's GitHub repo: https://github.com/habedi/zig-dbc https://github.com/habedi/zig-dbc
- deleted 1y ago[deleted]
- metalliqaz 1y agoThis is pretty cool, I like to see this kind of project coming to Zig. Zig's compile-time language features make DbC a natural fit. I am not yet proficient enough in Zig to be able to evaluate how well the syntax fits into idiomatic Zig. Good work.
- habedi0 1y agoThanks. I'm new to Zig myself and created this library because I had trouble verifying the correctness of the code I wrote for a set of complex data structures in another larger Zig project (this one: https://github.com/habedi/ordered https://github.com/habedi/ordered). I'm currently experimenting with how to use DbC in Zig, which led to the creation of this library.
- skavi 1y agoWhy are the checks included in ReleaseSmall?
- habedi0 1y agoI created this library to help me verify the correctness of my Zig code in another project. However, I wanted the option to strip the checks when the code becomes more mature, for efficiency. For efficiency, I mainly care about speed, which is why checks are only compiled out in `ReleaseFast`.
- Defletter 1y agoAnother project burdened by Andrew Kelley's weird hate-boner for function literals. (struct { fn run }).run How ridiculous that this is required to do something so simple.
- ivanjermakov 1y agoRelated RFC for context: https://github.com/ziglang/zig/issues/20242 https://github.com/ziglang/zig/issues/20242
- habedi0 1y agoI think they want to add lambdas to Zig at some point. The number of changes is high between releases.
- Defletter 1y agoUnless something has changed from this (https://github.com/ziglang/zig/issues/1717#issuecomment-1627790251 https://github.com/ziglang/zig/issues/1717#issuecomment-1627...), that is unlikely. The irony is that Zig's new async/await strategy is to use event loops with passed-in functions (https://www.youtube.com/watch?v=x3hOiOcbgeA&t=3643s https://www.youtube.com/watch?v=x3hOiOcbgeA&t=3643s).
- skyzouwdev 1y ago[dead]