/nqp-jvm-prep

Preparatory work for NQP and Rakudo on JVM. Temporary repo; will be incorporated into NQP eventually.

Primary LanguageJava

NQP/Rakudo on JVM Preparations

What is this repository?

This repository is for exploring/building various pieces that will be needed for porting NQP and Rakudo to the JVM. Note that this is all very much a work in progress. If you're just interested in running NQP and Rakudo on the JVM - we're not at the point of having anything interesting for you yet. For now, what's in here is only of interest to those who want to follow of participate in the porting effort.

What's in here?

Here's a quick overview.

- src
  This contains the Java source for various bits of runtime support and
  the implementation of the 6model core. There's no build stuff yet; the
  best way to hack on it is to just add the directory to an Eclipse
  workspace.
- lib/JAST
  JAST is JVM Abstract Syntax Tree. It's a set of nodes that know how to
  turn themselves into a textual dump, which is then processed into JVM
  bytecode. In the future, we should be able to go straight from these
  nodes to bytecode, but that'll be much easier once NQP is cross-compiled.
  Implemented in NQP.
- lib/QAST
  QAST is the set of AST nodes that NQP and Rakudo build when compiling
  source. In lib/QAST is the code that turns these nodes into a tree of
  JAST nodes. This is where the main compilation work takes place (JAST
  itself really does not do much; it's very close to the JVM instruction
  set). Implemented in NQP.
- t
  Contains tests for turning JAST and QAST trees into .class files and
  making sure they produce the expected output. The QAST tests are the
  really interesting ones.
- Makefile
  Can build the lib/JAST and lib/QAST stuff sufficiently to get tests
  to run. Note you need to sort out building what's in src also; the
  Makefile doesn't worry about that currently.
- docs
  A ROADMAP, and some scribblings on how gather/take things will be
  dealt with (currently not particularly implemented). Maybe more
  will show up with time.

Sounds interesting; can I help with anything?

Help is welcome. See the file docs/LHF.md for a bunch of "Low Hanging Fruit" tasks (that is, things that should be comparatively easy to pick off without having to spend days learning stuff - at least if you already know a bit about some of Java, the JVM, NQP and QAST).