The Parrot is dead. Long live the Parrot?

Reini Urban rurban at x-ray.at
Sun Feb 10 17:16:01 UTC 2013


As you might have heard I started to work on my own vm, http://perl11.org/p2/
which is basically the potion vm, to replace parrot and to target perl5.
Only steal from the best.

I see no way to fix the awful parrot calling convention, which was made worse
and worse. And it's a good way to get out of the community mess, which broke
more things than fixed.

I believe p2 is already much better than parrot.
Performance, tight and expressive data structures, object model, type support,
jit, serialization, ...
Just native threads and the GC need to take the one from parrot,
because parrot's is the best I see around.
(PS: Sorry diakopter, I have no idea why you bitch about parrot's
threads and GC all the time. Even publicly. Your arguments that
subtasks will lead to leaking proxies is worthless.
We don't do subtasks, we thread away from the master thread.)

And really, does anyone really believe that the jvm is a realistic perl6 vm?
It's good like jruby, for server or long-running apps. But you cannot
improve startup time.
And you mess with Oracle.

p2 runs circles around p5, parrot and the jvm, and has much better support for
dynamic types.

Currently I'm thinking about the parser. leg is nice, but has the
limitation that
I cannot easily add macros, because the leg packrat-based parser is just a
static parser constructor. But I need a parsing library, where I can
add non-terminals
at compile-time (i.e. macro support). lua's Lpeg seems to be the best
in this regard.
Those grammers can also express the simplier perl-style regular expressions,
so I don't have to link and maintain to the awful spencer mess.
perl6 grammars are bit behind, and not practical to be bootstrapped from.

Since the potion vm is very tightly coupled to lua, it should be quite easy to
come up with lpeg for p2.
  http://www.inf.puc-rio.br/~roberto/lpeg/
  http://www.inf.puc-rio.br/~roberto/docs/ry08-4.pdf
For now macros and regex are left behind.

If I don't get macros to work (dynamic parsing), I'm also thinking of
the pir equivalent for the simplified vm language, used to implement
some bootstrapping functionality. Such as
the parser, object model translations and type-system adjustments.
potion seems to be the natural fit, but something like nqp (not quite
p2) might be a
good idea also.
-- 
Reini


More information about the parrot-dev mailing list