[Please CC: me on any responses.]

I follow the perl6-internals list through checking the archive, and
noticed Jerome's posting.  I wrote the parrot-gen.py script that he
pointed to.  Here are my comments on this issue.  

(Note that I do not speak for the python-dev gang as a whole, but
AFAIK I'm the only current or former python-dev'er who's looked at
Parrot in any detail.)

First, the mailing list name is a complete non-issue; I don't care.
Having it be @perl.org doesn't matter, either.

First reason I don't work on it very much: 

1. Frankly, it's not much fun.  I can spend my free time writing
Python code, an environment I like, or I can work in the unfamiliar
and uncomfortable Parrot build environment and source code, grepping
through it looking for examples to help me figure out what's going on.
Guess which option wins most often?

I initially wrote parrot-gen.py because I wanted to play a bit with
Parrot and see what it took to generate Parrot bytecode from Python.
Parsing Python code is trivial with the Compiler/ package in 2.2, so
it was just a matter of code generation.  Every so often, I'll update
my copy of the Parrot CVS tree and try to update the script to match
it.  I also have incomplete PythonString.pmc and PythonFloat.pmc files
lying around someplace, and got halfway through updating the code to
use imcc instead of assemble.pl, but the task isn't enough fun to make
me bother finishing those off.

Some larger reasons:

2. No clear benefit to using Parrot.

What new possibilities does Parrot provide for Python?  Stacklessness?
Better GC?  A new I/O layer?  Language interop?  None of these is more
than mildly interesting to me, and none is a killer application.

Personally, I'm skeptical of the claims of cross-language interop
because I don't think a library written in Perl will provide an Python
interface that looks at all idiomatic, and vice versa.  You could
write a Python wrapper to make a Perl library look more natural, but
now 1) we're all writing wrapper code that will introduce more bugs,
2) as a user chasing a problem, I now have to debug the interface
between the library and the wrapper code, 3) as a user, now I'll have
to read Perl/Ruby/Scheme/whatever code in the underlying library.  The
way things are now, at least I only need to know 2 languages, Python
and C.

A big benefit for Python might be if someone writes a Parrot to
{machine code,.NET} compiler, but there are existing alternatives such
as Pyrex and no one has written such a Parrot compiler yet, so that's
not too convincing.

If every other language was using Parrot, there would be some pressure
to join them, but given the lukewarm response by other language
communities, that's not a factor at the moment.  

3.  Lack of any real languages on Parrot 

I'm slightly worried that Parrot is already succumbing to the lure of
premature optimization -- counting the number of opcodes executed per
second, trying to save a C pointer dereference here or there -- before
the Parrot VM has been shown to be useful as a language target.  No
one is running real programs in Perl or Python or Scheme or anything
on the VM (right?), so any optimizations at this point are just
guesses, and may not actually be relevant to real programs.  This
makes me wonder if the Parrot implementation will just retrace the
same path as the Perl5 implementation.

I'd rather see a full implementation of a single real language that
people actually use (Scheme, Python, whatever) on top of an
unoptimized Parrot VM, instead of the existing situation of a bunch of
half-implemented or toy languages on top of an optimized VM.  That
would be a more convincing proof that Parrot can actually handle a
real language, and gives other languages something to test
interoperability with.

--amk                                                             (www.amk.ca)
Then the shadows began to gather; first little furtive ones under the table,
and then bolder ones in the dark panelled corners.
    -- H.P. Lovecraft, "The Strange High House in the Mist"

Reply via email to