Just a bunch off stuff related to formal verification of Strimzi, Kafka and compilers related..
This repository contains a collection of formal verification models, compiler experiments, and testing suites designed to improve software reliability and correctness. The projects within this repository utilize TLA+ for formal verification, Java for property-based testing, and ANTLR for compiler development.
The repository is organized into several sections:
The formal_verification
directory includes various subdirectories, each targeting different systems and concepts:
TLA+: Contains specific implementations for distributed systems algorithms and designs. Models cover areas like Kafka’s leader election, Raft consensus, Strimzi topic lifecycle management, and various simple algorithmic examples (e.g., Dining Philosophers, Stack operations, counter implementations). The Strimzi models (see formal_verification/TLA+/strimzi/README.md
) delve into operator behavior, Zookeeper interactions, failover/recovery, scaling, and more.
Quint: A specification language and tool used for modeling and verifying systems, similar to TLA+. This section includes examples of Quint for distributed systems like leader election in a ring network (formal_verification/quint/distributed_systems/leader_election_ring/README.md
) and simple concurrent scenarios like deadlock detection (formal_verification/quint/simple/deadlock_example/README.md
). Quint is also utilized for model-based testing.
Abstract Interpretation: Features examples using a “point language” to illustrate static analysis concepts by analyzing program states in a 2D geometric space. This approach helps in understanding how abstractions can prove safety properties (e.g., a point never entering a negative x-axis). More details can be found in formal_verification/abstract_interpretation/point_language/README.md
.
Model Checking: This section provides examples (like formal_verification/model_checking/example/wire.tla
) and an overview of model checking concepts, a method to verify complex interactions in concurrent and distributed systems by exhaustively exploring system states against a formal property. See formal_verification/model_checking/README.md
for more details, including references to TLA+ as a specification language for model checking."
The compilers
directory contains work related to programming languages and compiler construction:
+
, -
, *
, /
). It’s designed for educational purposes, demonstrating lexical analysis, parsing, and x86 assembly code generation. The grammar and examples can be found in compilers/OLang/README.md
.;
) are replaced with 🦄
. It supports variable declarations, function definitions, and while loops, and compiles into Java code. See compilers/Unicorn/README.md
for more details and examples.compilers/Compiler-Design/II/README.md
."The assembly
directory contains various experiments and implementations related to low-level programming, with a particular focus on assembly for macOS M3 (aarch64). It includes examples and build/debug instructions (see assembly/README.md
).
The profiling
directory includes tools and experiments for analyzing performance characteristics of programs.
The performance
directory contains benchmarks and comparisons of different programming languages for various tasks. Key highlights include:
wrk
) comparing HTTP server implementations in Go, Rust, and C.Detailed results and methodologies can be found in performance/README.md
.
The testing
directory is focused on software testing methodologies:
testing/model_based_testing
) is intended for model-based testing projects. (Note: The current README.md
in this directory duplicates the content of Mutation Testing.)testing/mutation_testing/README.md
.testing/performance_testing/uto/TestStrategy.md
).testing/property_based_testing/README.md
.The other
directory contains miscellaneous projects and experiments, including small games implemented in C like Snake (see other/snake/README.md
) and Ping-Pong.
[1] Introduction to Static Analysis - Link