mlml
mlml copied to clipboard
self-hosted compiler for a subset of OCaml
mlml
mlml is a self-hosted toy compiler for a tiny subset of OCaml.
a detailed description can be found in my blog post (in Japanese): 自作OCamlコンパイラでセルフホストした - molecular coordinates
roadmap
- [x] basic arithmetic
- [x] variables
- [x] if-then-else
- [x] functions
- [x] recursion
- [x] mutual recursion
- [x] closure
- [x] currying
- [x] tuples
- [x] variants
- [x] records
- [x] pattern matching
- [x] structual comparison
- [x] primitive types
- [x] string
- [x] list
- [x] bytes
- [x] array
- [x] formatted output with
Printf
- [x] modules
- [x] definition
- [x] aliases
- [x]
open
- [x] dune-like bundler
- [x] self-hosting!
- [ ] exceptions
- [ ] type checker & type inference
self hosting
mlml is self-hosted. i.e. mlml can compile itself.
./dev/exec.sh ./dev/self_host.sh
To obtain build artifacts, pass a path to local directory as below. You will see compiled binaries under ./self_host
.
mkdir self_host
./dev/exec.sh ./dev/self_host.sh ./self_host
limitations
-
external
definitions are only available for functions - all modules and paths are statically-resolved
- all custom oeprators are left-associative
-
function
keyword does not make an expression
development
If you have docker installed in your system, simply run
./dev/start.sh
to start the development.
You can run tests manually by running the following command:
./dev/exec.sh dune runtest
thanks
The code and algorithm in parser and lexer is strongly inspired by ushitora-anqou/aqaml