MMTk is a framework for the design and implementation of memory managers. This repository hosts the Rust port of MMTk.
We maintain an up to date list of the prerequisite for building MMTk and its bindings in the mmtk-dev-env repository.
MMTk can build with a stable Rust toolchain. The minimal supported Rust version is 1.57.0, and MMTk is tested with 1.59.0.
$ cargo build
MMTk also provides a list of optional features that users can choose from.
A full list of available features can be seen by examining
By passing the
--features flag to the Rust compiler,
we conditionally compile feature-related code.
For example, you can optionally enable sanity checks by adding
sanity to the set of features
you want to use.
You can pass the
--release flag to the
cargo build command to use the
optimizing compiler of Rust for better performance.
The artefact produced produced by the build process can be found under
target/release for the release build).
ci-build.sh shows the builds tested by the CI.
MMTk does not run standalone. You would need to integrate MMTk with a language implementation. You can either try out one of the VM bindings we have been working on, or implement your own binding in your VM for MMTk. You can also implement your own GC algorithm in MMTk, and run it with supported VMs. You can find up-to-date API documentation for mmtk-core here:
- If you are trying to port MMTk to your language, check our public documentation: https://www.mmtk.io/mmtk-core/public-doc
- If you are trying to develop in MMTk (e.g. a new GC algorithm), check our full documentation: https://www.mmtk.io/mmtk-core/full-doc
Try out our current bindings
We maintain three VM bindings for MMTk. These bindings are accessible in the following repositories:
For more information on these bindings, please visit their repositories.
Implement your binding
MMTk provides a bi-directional interface with the language VM.
- MMTk exposes a set of APIs. The language VM can call into MMTk by using those APIs.
- MMTk provides a trait
VMBindingthat each language VM must implement. MMTk use
VMBindingto call into the VM.
To integrate MMTk with your language implementation, you need to provide an implementation of
you can optionally call MMTk's API for your needs.
For more information, you can refer to our porting guide for VM implementors.
Implement your GC
MMTk is a suite of various GC algorithms (known as plans in MMTk). MMTk provides reusable components that make it easy to construct your own GC based on those components. For more information, you can refer to our tutorial for GC implementors.
We use both unit tests and VM binding tests to test MMTk in the CI.
MMTk uses Rust's testing framework for unit tests. For example, you can use the following to run unit tests.
$ cargo test
A full list of all the unit tests we run in our CI can be found here.
VM binding tests
MMTk is also tested with the VM bindings we are maintaining by running standard test/benchmark suites for the VMs. For details, please refer to each VM binding repository.
Contributing to MMTk
Thank you for your interest in contributing to MMTk. We appreciate all the contributors. Generally you can contribute to MMTk by either reporting MMTk bugs you encountered or submitting your patches to MMTk. For details, you can refer to our contribution guidelines.