ops_pct and the plan for world domination

Christoph Otto christoph at mksig.org
Thu May 13 16:47:40 UTC 2010


The ops_pct branch is ready to merge into trunk.  If you're not familiar with 
the goal of this branch, it's part of chromatic's overall plan for Lorito*. 
We need a proper ops compiler (not a regex-based code mangler) before we can 
use different languages to implement those ops.  The ops_pct moves us toward 
that goal by reproducing the functionality of our current ops2c perl code in 
nqp**.

When building with opsc, the nqp-based ops compiler, all of Parrot's tests 
pass.  Rakudo also shows no regressions and partcl, which is the only other 
HLL I could find that uses dynops, is no more broken than before.

ops2c.nqp is a driver for opsc and is installed as a fakecutable with 
opsc.pbc, the supporting library, installed in the libraries dir.  ops2c.pl 
has been changed to be a wrapper for the ops2c fakecutable to preserve 
backwards compatibility and obviate a deprecation cycle.

The branch requires a fairly minor fork of nqp that includes nqp-settings.pbc. 
  This is a small (<450 loc) optional set of runtime functions and methods to 
make nqp a little nicer to work with***.  pmichaud has verified that the 
eventual setting will be very similar to the one in bacek's fork and that 
it'll be included in upstream nqp in the very near future (possibly later today).


tl;dr or what this means for day-to-day parrot hacking:

Because there's the potential for circular dependencies, any changes to core 
ops will require running the bootstrap-ops make target to regenerate the ops C 
code.  This code is now checked into svn so rebuilding the ops is not expected 
to be a frequent occurrence.  It currently takes about 60s to rebuild the ops 
and there are several potential areas for optimization (apart from simply 
making parrot and nqp faster) which can be explored if this becomes a pain point.

Props go out to bacek++ for starting this branch and doing the majority of the 
design and hacking.  darbelo++ did a great job making the build infrastructure 
more cross-platform and consistent with the existing infrastructure.  mikehh++ 
was kind enough clean up after bacek and my flagrant codingstd violations. 
chromatic++ came up with the original plan.

Barring objections I plan on merging this branch into trunk before the weekend.

Thanks,

Christoph


* See http://trac.parrot.org/parrot/wiki/L1Recap

** When I say nqp, I mean nqp-rx.  The old nqp is on its way out and I like to 
type less when I can get a way with it.

*** http://tinyurl.com/nqp-settings


More information about the parrot-dev mailing list