develooper Front page | perl.perl6.internals | Postings from July 2002

perl6 driver

Leopold Toetsch
July 28, 2002 04:34
perl6 driver
Message ID:
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 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/ 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 

- 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.

   -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/
(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

   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?

   If's methods my be called directly the optimzer could
   be integrated.


Patches, suggestions, ... welcome.

Thanks for reading til here,
leo Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at | Group listing | About