パール2 で ポーション

p2 on potion

         .ooo
          'OOOo
      ~ p ooOOOo 2 ~
          .OOO
           oO      %% a fast perl5
             Oo
            'O
             `
            (o)
        ___/ /          
       /`    \ 
      /v^  `  ,
     (...v/v^/
      \../::/
       \/::/ 

p2 is a she. She will be a perl5 frontend and possible perl6/nqp backend, based on why the luck stiff’s potion compiler and vm technology and a new extensible parser. Optionally perl6 might be parsed natively. (use v6;)

See the potion README why potion is exciting.

  parrot example/fib.pir 28  0m1.746s
  perl   example/fib.pl  28  0m0.439s
  potion example/fib.pn  28  0m0.013s
  p2 -B  example/fib.p2  28  0m0.177s
  p2     example/fib.p2  28  <todo: 0.013s>

  parrot example/fib.pir 40  3m36.447s
  perl   example/fib.pl  40  2m19.752s
  potion example/fib.pn  40  0m3.512s
  p2 -B  example/fib.p2  40  0m54.560s
  p2     example/fib.p2  40  <todo: 0m3.512s>

So function calls are ~30x faster than perl5, real-world programs between 2-5x. gperl is about 3x faster than p2, because it uses the llvm backend and less dynamic types. There are no optimizer passes in the p2 compiler yet, esp. constant folding and type hinting are missing.

java/jvm is somewhere between perl and potion. java has slow startup, fast calls, faster math, but limited OO and dynamic type support.

p2's exciting points for perl folks are:

links

See p2-extensions for an overview on the planned perl5 language extensions, activated via the use p2; pragma.

See glossary for an overview on the potion/lua derived terminology.

See design-decisions why the code looks like asis, and what we want.

development

documentation


However, some warnings:

thankyous

why the lucky stiff left the ruby community. potion was his last public project. It’s a work of art and mastership. I could not think of anything better. I think it is better than go, if potion would have had dlcall, autothreads and channels, arbitrary precision numbers and exception handling.

Rob Pike for go, and the parrot community for parrot.

cPanel for letting me do what I consider important. Not just 10% of my time as with Google.

Larry Wall for perl5. We miss his leadership and technical excellence. Without him nothing got done, and *if* something was done it was wrong. Besides defined-or, which left Tom Christiansen behind.

why the lucky stiff thanks:

I am gravely indebted to Basile Starynkevitch, who fielded my questions about his garbage collector. I favor French hackers to an extreme (Xavier Leroy, Nicolas Cannasse, Guy Decoux, Mathieu Bochard to name only a portion of those I admire) and am very glad to represent their influence in Potion’s garbage collector.

Matz, for answering my questions about conservative GC and for encouraging me so much. Potion’s stack scanning code and some of the object model come from Ruby.

Steve Dekorte for the Io language, libgarbagecollector and libcoroutine — I referred frequently to all of them in sorting out what I wanted.

Of course, Mauricio Fernandez for his inspiring programming journal housed at eigenclass.org/R2/ and for works derived throughout the course of it — extprot most of all. Many of my thoughts about language internals (object repr, GC, etc.) are informed by him.

Ian Piumarta for peg/leg and id-objmodel. I use a re-entrant custom version of peg, but the original library is sheer minimalist parsing amazement.

Final appreciations to Jonathan Wright and William Morgan who pitched in, back in the wee hours of Potion’s history. Thanks.

license

See COPYING for legal information.
potion is an MIT license, which lets you do anything you want with this.
perl5 code is ARTISTIC and GPL dual licensed,
p2, parrot and perl6 code is ARTISTIC 2 licensed.