perl6 driver

2002-07-28 Thread Leopold Toetsch

Hi all,

thanks to Sean, finally a perl6 driver arrived in CVS.

To further improve/clean up/enhance it, I would need the help of various 
people, working on different parts of the parrot project.

Though I could try to write some patches, to address below mentioned 
items, I think, people involved with the very topic will get it better 
and faster ;-)

0) Overview

perl6 currently does:
- tokenizing  parsing perl6 source (P6C/Parser ...)
- generate imcc byte code (P6C/IMCC ...) (.imc)
- call languages/imcc/imcc for generating assembler code (.pasm)
- call assamble.pl to produce byte code (.pbc)
- run parrot byte-code
or optionally
- compile byte code to executable (pbc2c, cc, ld)
- and run executable

planned is to call the optimizer too, though I don't know, if it is usable.

Perl6 passes appropriate command line options over to the programs and 
captures STDERR to collect the output.

Currently it uses a lot of intermediate files for the various stages:
file.imc  ... intermediate compiler code
file.pasm ... parrot assembler
file.pbc  ... parrot byte code
file.c... opt. translated to c
file.o, file  opt.
file.warn ... warnings
file.tree ... opt. parser tree

These files are currently not deleted, though such option will come 
soon. Finally all file handling should optionally go through pipes.


1) configuration

lib/Parrot/Config.pm doesn't currently provide all the information for 
perl6 running without hard coded settings.

It would need additionally:
- a path (or list of paths), where to find above programs
- a list of all objects, needed to compile a binary, currently
   only $PConfig{pmc_classes_o} is there.

2) interface to programs

As perl6 calls all involved programs, they should obey to some common 
interface.

- take input on STDIN or a file
- write output to STDOUT or file
- can handle a common subset of command line options:
   -V --version (print version info to STDOUT and exit)
   -h --help(print help info to STDOUT and exit)
- print usage info to STDERR if invoked wrongly.

   Proposal:
   -v --verbose (increase verbose level by one)
this clashes with perl5, keep it or leave it?
It currently informs about the stages run.
   -w --warnings (enable warnings, or make it default enabled?)
   -Dx --debug=x (enable debugging at various stages)

- other switches should (if possible) be compatible with
   »man perlrun« aka »perldoc perlrun«.
   Long options are always ok.


3) errors, warnings, diags and info messages

- should of course go to STDERR
- should have a string in it, stating clearly in which subpart of
   the program the message originated.
- should have a string in it, stating the severity of the message
   i.e. /error|warn|info|diag|debug/i

Perl6 will provide means to filter and print messages by level
(i.e. -w level) and by grepping them.

Perl programs could use a mechanism shown in Sean's P6C/Util.pm
(which will eventually make it into a standalone module)

Standalone programs should write similar diagnostic messages.

All programs should of course:
- return with exitcode 0 for success, or !0 for errors.


4) Platforms

I can test perl6 only on i386/linux, so patches from users of different 
platforms are welcome.


5) individual issues/questions

- assemble.pl
   How stable is the interface, may I »require« and call it's
   methods directly?

   Speaking from perl6 driver POV:
   Does/will anyone need the feature to assemble multiple
   .pasm files into one .pbc?

- optimizer.pl
   If assemble.pl's methods my be called directly the optimzer could
   be integrated.


Finally:

Patches, suggestions, ... welcome.

Thanks for reading til here,
leo




of Mops, jit and perl6

2002-07-28 Thread Leopold Toetsch

Hi all,

1) perl6 driver program arrived in CVS/languages/perl6

CAVEATS: it generates a lot of intermediate files:
 ($filename.{warn,imc,pbc,pasm[,c,o,tree,])
 an may therefore clobber e.g. mops.c if you run
  languages/perl6 perl6 -C ../../examples/mops/mops.p6

  So please test it in a copy of your CVS tree.

NB: source is a mess, but I wanted a quick start to get it running.
Thanks to Sean, for prd-perl and many hints.

and finally: perl6 will currently run only in languages/perl6

2) Some Mops numbers, all on i386/linux Athlon 800, slightly shortend:
(»make mops« in parrot root)

[lt@thu8:~/src/parrot-007/examples/assembly]
$ ../../parrot mops.pbc
M op/s:18.270783

$ ../../parrot -j mops.pbc
M op/s:363.468516

$ ./mops
M op/s:196.355836

[lt@thu8:~/src/parrot-007/examples/mops]
$ ./mops
M op/s:366.106527

[lt@thu8:~/src/parrot-007/languages/perl6]
$ perl6 ../../examples/mops/mops.p6
Iterations:100
M op/s:0.303587

$ perl6 ../../examples/mops/mops.p6 -Rj # run jit
M op/s:1.148392

[lt@thu8:~/src/parrot-007/examples/mops]
$ perl mops.pl
Iterations:1000
M op/s:2.22

(Iteration count for mops.pl was reduced, patch sent)

Summary:
Program 
Mops
perl5.005_03 
2.2
perl6 
0.3
perl6 jit   1.1
parrot interpreted   18
parrot compiled 200
parrot jit  363
plain c 366

Remarks:
- jit is a lot faster then compiled
- plain mops.c is only slightly faster the jit, i.e. 1%
- perl6-jit, albeit still totally unoptimized, doesn't compare too bad
   to perl5
- mops is a silly test ;-)

3) jit detection was broken, patch is on the way to bugs-parrot.

Have fun,
leo