Skip to content
This repository

Not Quite Perl

[jvm] fix decoding of bufs for bufs that do not match encoding bit width

When we want to decode a buf8 to utf16, we have to take two elems, assemble
what Java thinks is a codepoint and append that to our StringBuilder. For
buf32->utf16 we do the opposite and for buf16->utf16 we get away with
appending the elems to the StringBuilder.
Note: Since StringBuilder does not distinguish between utf16 and utf32, we
treat them equally until we know better.
latest commit 41b67f4546
Tobias Leich FROGGS authored April 17, 2014
Octocat-spinner-32 3rdparty fix GH #162: add latest cygwin64 support to dyncall March 13, 2014
Octocat-spinner-32 docs add bool and match uniprop opcodes March 04, 2014
Octocat-spinner-32 dynext Final tweaks to mean we get through the build with the added dynpmcs … November 20, 2010
Octocat-spinner-32 examples rubyish; 2.x like named parameters December 26, 2013
Octocat-spinner-32 gen create and .gitignore gen/{parrot,jvm,moar} October 16, 2013
Octocat-spinner-32 src [jvm] fix decoding of bufs for bufs that do not match encoding bit width April 17, 2014
Octocat-spinner-32 t Make NQP nativecall tests robust on Win32. March 12, 2014
Octocat-spinner-32 tools bump moar dep to 2014.04 April 17, 2014
Octocat-spinner-32 .gitignore add serialization tests for moar January 07, 2014
Octocat-spinner-32 CREDITS Fix CREDITS to reflect that usernames are for GitHub. June 09, 2012
Octocat-spinner-32 [Configure] support --backends=all March 02, 2014
Octocat-spinner-32 LICENSE Remove trailing spaces from a lot of files, to make Parrot happier. November 12, 2009
Octocat-spinner-32 README.pod unmemify readme slightly March 16, 2014
Octocat-spinner-32 VERSION bump VERSION to 2014.04 April 17, 2014

NQP - Not Quite Perl (6)

NQP is Copyright (C) 2009-2014 by The Perl Foundation. See LICENSE for licensing details.

This is "Not Quite Perl" -- a lightweight Perl 6-like environment for virtual machines. The key feature of NQP is that it's designed to be a very small environment (as compared with, say, perl6 or Rakudo) and is focused on being a high-level way to create compilers and libraries for virtual machines (such as the Parrot Virtual Machine [1], the JVM, and MoarVM [2]). Unlike a full-fledged implementation of Perl 6, NQP strives to have as small a runtime footprint as it can, while still providing a Perl 6 object model and regular expression engine for the virtual machine.


Building from source

To build NQP from source, you'll just need a make utility and Perl 5.8 or newer. To automatically obtain and build Parrot you may also need a git client.

To obtain NQP directly from its repository:

    $ git clone git://

If you don't have git installed, you can get a tarball or zip of NQP from github by visiting and clicking "Download". Then unpack the tarball or zip.

NQP can run on three different backends: Parrot, MoarVM and the Java Virtual Machine (JVM). Decide on which backends you want it to run, and configure and build it as follows:

Once you have a copy of NQP, build it as follows:

    $ cd nqp
    $ perl --backends=moar,parrot,jvm
    $ make

If you don't have parrot installed, you can have generate one for you by passing the --gen-parrot option to it as well. If you don't have MoarVM installed, you can have generate one for you by passing the --gen-moar option to it as well.

The make step will create a "nqp" or "nqp.exe" executable in the current directory. Programs can then be run from the build directory using a command like:

    $ ./nqp hello.nqp

By default, NQP searches for the parrot executable and installs to the directory ./install. You can change that with the --prefix option to

Once built, NQP's make install target will install NQP and its libraries into the Parrot installation that was used to create it. Until this step is performed, the "nqp" executable created by make above can only be reliably run from the root of NQP's build directory. After make install is performed the executable can be run from any directory (as long as the Parrot installation that was used to create it remains intact).

If the NQP compiler is invoked without an explicit script to run, it enters a small interactive mode that allows statements to be executed from the command line. Each line entered is treated as a separate compilation unit, however (which means that subroutines are preserved after they are defined, but variables are not).

Differences from nqp-rx

NQP is the successor implementation of "nqp-rx" [2]. Unlike nqp-rx, which aimed to have almost no runtime component whatsoever, this new version of NQP accepts that a minimal Perl 6 object metamodel, multidispatcher, and regular expression engine are needed on top of the underlying virtual machine. Also, nqp-rx only ran on Parrot, whereas NQP also runs on the JVM and is designed to be portable to more.

Something went wrong with that request. Please try again.