Skip to content
A VM with adaptive optimization and JIT compilation, built for Rakudo
C Objective-C Raku C++ Perl Python Other
Branch: master
Clone or download

Latest commit

Patrick Böker
Latest commit 46d2a1a May 31, 2020


Type Name Latest commit message Commit time
Failed to load latest commit information.
3rdparty Backport a change in libtommath to fix build on x86 Windows May 20, 2020
build Include system headers after headers local to MoarVM in the Makefile Feb 17, 2020
docs Improve changelog; jnthn++ May 4, 2020
lib Simplify write_s since encode can append to a buf Apr 6, 2020
ports/macports fix typo Feb 2, 2016
src Fix reading closed dir handles on Windows May 30, 2020
tools Add an AzureCI test setup May 31, 2020
.appveyor.yml Update appveyor perl requirement on Windows to get support for list f… Mar 9, 2020
.dir-locals.el Add basic .dir-locals.el file Nov 6, 2015
.editorconfig Add expression template to .editorconfig (use 2 spaces) Jun 25, 2018
.gitignore Add a tool to dump sizes of REPR structures Jul 11, 2018
.gitmodules Move libatomic_ops module to a different directory Apr 11, 2018
.travis.yml Remove unshallow as it causes error on full repo Aug 21, 2018
Artistic2.txt LICENSE/Artistic2.txt; as always, feel free to change/destroy. Jun 5, 2012
CREDITS Add my personal info Mar 12, 2019 Add support for Thread Sanitizer in Feb 29, 2020
LICENSE Add freebsd to 3rdparty list in the LICENSE file Apr 8, 2017
README.markdown Add an AzureCI build badge May 31, 2020
VERSION Bump VERSION for release May 4, 2020
azure-pipelines.yml Add an AzureCI test setup May 31, 2020
check.todo Update check.todo Sep 23, 2013



MoarVM (short for Metamodel On A Runtime Virtual Machine) is a runtime built for the 6model object system. It is primarily aimed at running NQP and Rakudo, but should be able to serve as a backend for any compilers built using the NQP compiler toolchain.

Get It

Either download it from the MoarVM site or clone it from GitHub:

git clone

If you use the automatically generated release tarballs or zip files please note that they don't contain the third party libraries needed to successfully build MoarVM.

Build It

Build Status Build Status Build Status

Building the VM itself takes just:


(Or nmake/gmake on Windows). Currently it is known to build on Windows with MSVC and gcc, and with gcc and clang on Linux & MacOS X. We're expanding this with time.

Type perl --help to see the configure-time options, as well as some descriptions of the make-time options/targets.

Building an NQP with MoarVM

After installing MoarVM, you can clone the NQP repository or grab a source tarball and use the script in it like so:

perl --backend=moar --prefix=where_your_moarvm_install_lives

Alternatively, the same script in NQP is able to clone, build and install a copy of MoarVM on its own if you supply the --gen-moar flag.

Building a Rakudo with MoarVM

When pointing the script in rakudo's repository at a --prefix that has an nqp-m installed in it, it will automatically detect and configure the MoarVM backend. Alternatively, --backend=moar,jvm can be used to force it to build the MoarVM and JVM backends, for example. Just like in the NQP script, you have the option to supply a --gen-moar flag that will do all the work for you, including creating an nqp-m.


MoarVM is currently in development. It can run all of the NQP test suite, all of the Rakudo sanity tests, and passes more spectests than any other Rakudo backend (though some backends pass tests that it does not).

Unlike the JVM backend of NQP, the MoarVM repo is not currently planned to be integrated into the main NQP source repo but instead can be pulled in by --gen-moar configure script in the NQP repo.

Feature overview

Some key features provided by MoarVM include:

  • Meta-object programming, using the 6model design
  • Precise, generational, and parallel GC
  • Unicode 12.1 support (Unicode Character Database, encodings, normalization)
  • First-class code objects, lexical variables and closures
  • Exceptions
  • Continuations
  • Bounded serialization
  • Runtime loading of code
  • Big integers
  • A range of IO and process support, including asynchronous sockets, signals, timers, and processes
  • Native calling and native pointer manipulation
  • Threads, mutexes, condition variables, semaphores, and blocking queues
  • Bytecode specialization by type, and numerous optimizations (including resolution of method calls and multiple dispatch, dead code elimination, inlining, on stack replacement, scalar replacement, and partial escape analysis)
  • JIT compilation
  • Instrumentation-based profiling of call frames and allocations
  • Heap snapshotting
  • Remote Debugging with single stepping and variable/object introspection


Contributions by pull request are accepted. Commit bits are given to those who contribute quality work. If you are interested in contributing, drop by the #moarvm channel on, or email if you're averse to IRC.

See the LICENSE file in the root directory for information on the license of the source code in the MoarVM repository.


Linker can't find appropriate symbols on macOS

If MoarVM fails to build, and the error looks something like this:

ld: symbol(s) not found for architecture x86_64

you likely have an incompatible mix of build and bin utils.

While it is common to have toolchains installed from third party repositories in macOS, they aren't all compatible. In the event you run into this issue, please try these steps.

  1. Unlink your tools in homebrew: brew unlink binutils
  2. Destroy and re-clone MoarVM or rakudobrew
  3. Attempt the build again from scratch

If you want to use a GNU toolchain, and you get an error telling you to see this file, simply supply the --toolchain=gnu flag and this package will configure and build with a GNU toolchain.

Please note: If you use mixed Xcode and non-Xcode tools, you are likely to run into trouble. As such, this configuration is unsupported.

You can’t perform that action at this time.