Show HN: Zig-DbC – A design by contract library for Zig

46 points by habedi0 ↗ HN
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

7 comments

[ 2.7 ms ] story [ 23.8 ms ] thread
(comment deleted)
This 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.

Why are the checks included in ReleaseSmall?
Another 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.