Isogon is an experimental programming language supporting dependent types, stack-allocated data, and memory safety without garbage collection. To achieve this, Isogon borrows ideas from two-level type theory and quantitative type theory to enable static polymorphism over memory representations (as an application of its dependently-typed metaprogramming facilities) and enforced move semantics.
This repository contains a compiler for Isogon, which is segmented into two pipelines:
-
The frontend type-checks and elaborates Isogon's surface syntax, automatically verifying that programs adhere to its ownership discipline.
-
The backend provides code generation for Isogon, powered by the Cranelift intermediate representation.
A test suite is provided in /tests/, alongside a broad selection of example programs which showcase the features implemented in Isogon.
Isogon is distributed under the terms of the MIT license.
See LICENSES/MIT.txt for details.
To get started with Isogon, run the help
command with:
cargo run -- -h
The following command compiles an example program to an object file:
cargo run -- -f examples/fib_input.is -o out/fib_input.o