clang-contracts
gcc-invariant-plugin
clang-contracts | gcc-invariant-plugin | |
---|---|---|
1 | 1 | |
29 | 5 | |
- | - | |
10.0 | 10.0 | |
over 5 years ago | over 1 year ago | |
C++ | C++ | |
GNU General Public License v3.0 or later | - |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
clang-contracts
-
Adding “invariant” clauses to C++ via GCC plugin to enable Design-by-Contract
I'm the author, and even I think so. I'm more of an LLVM fan myself (though I can't not mention David Malcom's work on the GCC Static Analyzer).
Ideally it wouldn't be a plugin at all, it'd be a language feature. We got Contracts and left out the most useful contract of them all, the stateful invariant!
Originally, I started it as a Clang plugin, thinking that I could also implement support for the Contracts "[[pre]]" and "[[post]]" specification on top (or at least some minimal implementation of it.
The difficulty seemed a lot greater to support pre/post attributes with expressions inside of them than [[invariant]] marker attributes.
If people would like to use this from Clang, even without support for regular Contracts, I will publish a compatible Clang plugin.
I think at some point there was support for Contracts in Clang, maybe longer term I'll try to get them working again? (I've no experience here)
https://github.com/arcosuc3m/clang-contracts
This fellow wrote a whole ~200 page thesis on this just as recently as 2018, such a shame for it to go to waste =/
https://e-archivo.uc3m.es/bitstream/handle/10016/29231/TFG_J...
gcc-invariant-plugin
-
Adding “invariant” clauses to C++ via GCC plugin to enable Design-by-Contract
The inspiration was taken directly from D, I credit as much in the README =)
https://github.com/GavinRay97/gcc-invariant-plugin#gcc-desig...
> Inspired wholly by the D Programming Language's invariant feature.
What are some alternatives?
CMake - Mirror of CMake upstream repository
MIRAI - Rust mid-level IR Abstract Interpreter
icontract-hypothesis - Combine contracts and automatic testing.