CompCert VS acsl-by-example

Compare CompCert vs acsl-by-example and see what are their differences.

Our great sponsors
  • WorkOS - The modern identity platform for B2B SaaS
  • InfluxDB - Power Real-Time Data Analytics at Scale
  • SaaSHub - Software Alternatives and Reviews
CompCert acsl-by-example
36 1
1,757 94
1.6% -
7.3 1.8
19 days ago almost 3 years ago
Coq TeX
GNU General Public License v3.0 or later MIT License
The number of mentions indicates the total number of mentions that we've tracked plus the number of user suggested alternatives.
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.

CompCert

Posts with mentions or reviews of CompCert. We have used some of these posts to build our list of alternatives and similar projects. The last one was on 2024-01-31.

acsl-by-example

Posts with mentions or reviews of acsl-by-example. We have used some of these posts to build our list of alternatives and similar projects. The last one was on 2021-12-30.
  • Why the C Language Will Never Stop You from Making Mistakes
    5 projects | news.ycombinator.com | 30 Dec 2021
    Yes, Frama-C uses a plugin architecture, and there are plugins to verify all kinds of things, including functional correctness. The Frama-C tutorials page,

    https://frama-c.com/html/tutorials.html

    Has a link to the ACSL-by-example PDF which gives examples of creating in C various C++ STL inspired data structures and routines:

    https://github.com/fraunhoferfokus/acsl-by-example/blob/mast...

    Also, it is less effort to write bug-free code in OCaml than C. The Coq/Gallina proof assistant even has an OCaml-extraction (and also Haskell-extraction) feature where you extract runnable code from a formally verified algorithm in the Gallina specification language. (It's generally easier to proof theorems about code in the theorem prover itself, go figure.) Most of these C verification tools are written in OCaml, not C, with varying levels of assistance from Coq/Gallina.

    The main reason the functional languages make it easier is because you generally execute side-effect free functions on data structures to give them the mathematical property you want. For example, you execute a lexicographical sort function on a list of strings and then the strings in the list all satisfy the mathematical property of a total ordering. You don't have to do any reasoning about the "in-between state" where pointers under the hood are being manipulated, and you don't have to add pre-conditions and post-conditions about the global environment if the code is side effect free and does not access non-local memory.

What are some alternatives?

When comparing CompCert and acsl-by-example you can also consider the following projects:

seL4 - The seL4 microkernel

sol2 - Sol3 (sol2 v3.0) - a C++ <-> Lua API wrapper with advanced features and top notch performance - is here, and it's great! Documentation:

coq - Coq is a formal proof management system. It provides a formal language to write mathematical definitions, executable algorithms and theorems together with an environment for semi-interactive development of machine-checked proofs.

hacl-star - HACL*, a formally verified cryptographic library written in F*

unbound - Replib: generic programming & Unbound: generic treatment of binders

RecordFlux - Formal specification and generation of verifiable binary parsers, message generators and protocol state machines

gcc

spark-by-example - SPARK by Example is an adaptation of ACSL by Example for SPARK 2014, a programming language which is a formally verified subset of Ada

vericert - A formally verified high-level synthesis tool based on CompCert and written in Coq.

corn - Coq Repository at Nijmegen [maintainers=@spitters,@VincentSe]

koika - A core language for rule-based hardware design 🦑