Inkstone is not a markup language.
Inkstone is an experimental general-purpose scripting language to make scripting less frustrating to work with. It was created as the author finds markup languages for game scripts being overwhelmed with unnecessary symbols, tags, or being too domain specific.
Inkstone is the course project for the Programming Language Principle class in BUAA.
Inkstone is inspired by RenPy. Various aspects of Inkstone are inspired by Ruby, Rust, Elixir and Haskell.
To build Inkstone, you'll need to install Rust 1.57 stable or later.
After installation, you only need to run:
cargo build
-- And you're good to go!
Status | feature |
---|---|
Usable | Lexing |
Usable | Parsing |
Usable | Bytecode definition |
Usable | - Bytecode |
WIP | - Other data structures |
WIP | Bytecode generation |
Usable | - Symbol table |
Usable | - Constant table |
WIP | - Closure handling |
No | - Module system |
WIP | - Code generation |
WIP | Bytecode virtual machine |
WIP | - Execution unit |
WIP | - Garbage collector |
No | Type checking |
No | JIT compiler |
WIP | Documentation |
inkstone-syn
contains code and structures to parse and represent Inkstone source code.inkstone-bytecode
contains the definition of an instruction set for the Inkstone virtual machine.inkstone-codegen
contains code for generating bytecode from an AST.inkstone-vm
contains implementation of a virtual machine that can run bytecode.- The root crate,
inkstone
, wraps the aforementioned crates and provides an executable.
inkstone-typings
for type-checking Inkstone code.inkstone-jit
for JIT-ting efficient machine code from bytecode and probably type information, probably usingcranelift
.
The source code of Inkstone's reference implementation is licensed under Mozilla Public License 2.0.