Join GitHub today
GitHub is home to over 50 million developers working together to host and review code, manage projects, and build software together.Sign up
GitHub is where the world builds software
Millions of developers and companies build, ship, and maintain their software on GitHub — the largest and most advanced development platform in the world.
Lust ==== Lust is a very early project about writing a JIT / Interpreted Lisp. You can find documentation about Lust at https://zmedley.com/lust At the moment, Lust has a functional but incomplete interpreter and some very early sketches of JIT compilation using Mozilla's Cranelift as a backend. The interpreter is functional in that it supports the following: - Tail recursion - Proper macros - Lists and numbers - Importing of other files - Character / string support It is not yet functional in the following ways: - Only extremely basic I/O support - No garbage collection The JIT compiler supports almost nothing and is extremely experimental at the moment. For some time it could JIT simple numeric function's that took two arguments, but that has since been removed now that lists are in the interpreter. If you're interested you can take a look in src/jit.rs, but there isn't much more than a couple experiments living in there. The timeline for this project looks something like this: - Move all the features in the non-functional list to the functional list to make the interpreter complete. - Improve user experience for people using the language in Emacs. Other editors are down the line becuase I don't use them. - Once the language is plesant enough to use that programs written in it are large enough to be slow incrementally add JIT support. Building Lust ============= To built Lust you'll need a working Rust installation. First clone this repository and then build / run it using cargo. This workflow will probably look something like this: ``` git clone https://github.com/ZekeMedley/lust.git cd lust cargo build cargo run ``` If you'd like to start a repl with the standard library loaded in, change `cargo run` above to `cargo run std.lisp`. Learning Lust ============= Lust is very unstable at this point so I've intentionally avoided writing any external documentation for the lanaguage. If you are determined though I have been keeping documentation up to data in `src/builtins.rs` and in `std.lisp` where builtins and the standard library are defined.