Skip to content

qinsoon/zebu

Repository files navigation

Zebu VM (a fast implementation of Mu Micro VM)

build status

Mu Micro VM is a substrate language virtual machine. Mu executes its language-/platform-neutural immediate representation to provide common low-level abstractions for programming language implementation, such as machine code generation and execution, garbage collection and concurrency. With Mu, language developers only need to care about language-specific optimisation and execution while leaving the low-level part to Mu Micro VM.

Zebu VM is a fast implementation of Mu, developed in Australia National University.

Platform support

Zebu supports the follow platforms:

  • x86_64/linux (CI)
  • aarch64/linux
  • x86_64/macos (macOS 10.12+)

Mu specification coverage

Zebu does not implement full Mu specification yet. This label in the issue tracker keeps track of unimplemented features, or features that are not compliant to Mu spec.

Building

You will need:

  • rust version 1.28.0 or newer (2018-08-02)
  • clang 4.0+
  • cmake 3.8+ (we do not depend on cmake, but some Rust crates use it)
  • internet connection (as Rust will download dependencies)

We have tested these specific versions:

  • rust stable-2018-11-08 and nightly-2019-02-15
  • clang 6.0.0
  • cmake 3.10.2

To build Zebu with release build,

  cd path/to/zebu
  MU_ZEBU=. CC=clang cargo build --release

you will get shared and static libraries for Zebu under target/release/ that you can link against in your language implementation.

You can also build Zebu in debug.

  cd path/to/zebu
  MU_ZEBU=. CC=clang cargo build

Testing

Zebu repository includes two test suites:

  • cargo test
  • pytest

Running tests with cargo test

  cd path/to/zebu
  MU_ZEBU=. CC=clang RUST_TEST_THREADS=1 cargo test --release 2>/dev/null

Running tests with pytest

To facilitate tests, Zebu uses RPython (which targets Mu as backend) for some of tests in this suite.

Download PyPyMu

  cd path/to/zebu
  git clone https://gitlab.anu.edu.au/mu/mu-client-pypy.git tests/test_jit/mu-client-pypy
  cd tests/test_jit/mu-client-pypy
  git checkout mu-rewrite
  git apply pypy.patch

Download RPySOM

  cd path/to/zebu
  git clone https://gitlab.anu.edu.au/mu/x-RPySOM.git tests/test_jit/RPySOM
  cd tests/test_jit/RPySOM
  git submodule init
  git submodule update

Running pytest (you will need Python 2.7 with pytest module)

  cd path/to/zebu/tests/test_jit
  export DYLD_LIBRARY_PATH=.
  export MU_ZEBU=path/to/zebu
  export MU_LOG_LEVEL=none
  export PYTHONPATH=mu-client-pypy:RPySOM/src
  export RPYSOM=RPySOM
  export ZEBU_BUILD=release
  export CC=clang
  export SPAWN_PROC=1
  python2 -m pytest test*.py -v
  • We only tested python 2.7.15-rc1 successfully.

Using Zebu for your language implementation

Zebu provides the C binding for its API declared in mu-fastimpl.h. The APIs are defined in Mu specification. The header also includes Zebu-specific APIs, such as mu_fastimpl_new().

Zebu allows the user to set options when creating a new instance. The options can be found in vm_options.rs.

Contribution

Coding style

Zebu code base uses rustfmt-nightly default style (as defined in Rust Style Guide) with one exception - no trailing comma (see rustfmt.toml). The CI server marks commits as failed if the code is compliant to the style. The CI server is using:

  • rust nightly-2017-07-19
  • rustfmt-nightly 0.1.9-nightly

Bug reports

As Zebu is still in its early development, we expect bugs and missing features. We appreciate if you can report to Issues. Our priority for Zebu development is driven by the issue tracker along with two client implementations that are being actively developed in ANU, PyPy-Mu and GHC-Mu.

License

Zebu uses Apache 2.0. See the license.