an ML/Haskell/Rust-inspired interpreted functional programming language
This is a C reimplementation of an original Rust project.
Warning
This is a work in progress, not really usable yet.
See html.ham for a syntax example. A more complete example or specification might come later at some point.
├─ lib core library source code, could be compiled into a shared library in the future
├─ src source code for the CLI frontend, for now it's just a placeholder for testing
├─ test files with the `test_` prefix define test cases
│ ├─ lib testing macros & utilities
│ ├─ runner test entry point and auto-generated index
│ └─ snapshots saved snapshots for snapshot testing
├─ build_test.c a small build tool for indexing tests
├─ bench files with the `bench_` prefix define benchmarks
└─ vendor vendored third-party libraries
- C compiler, the project is configured for
clangtooling - GNU Make
Make and run the release build:
make # or `make release`
bin/hammerMake and run the debug build:
make debug
bin/hammer-debugMake and run tests:
make test
# or run a specific test
make test TEST=<test-name>
# sanitizers are disabled in tests by default to avoid cluttering output
make test TEST_ASAN=1Review changed snapshots (interactive):
make test HAMMER_SNAPSHOT_REVIEW=1Run benchmarks
make bench
# or run a specific benchmark
make bench BENCH=<bench-name>The project is configured to work with clangd and clang-format. Run make format to auto-format the entire project.
Other code style guidelines which cannot be enforced via tooling are described here.