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

Draft sketch of bytecode generation

Thread Next
Dan Sugalski
October 27, 2002 08:54
Draft sketch of bytecode generation
Message ID:
Okay, here's a partial PDD on internal bytecode generation. This is 
*very* sketchy--at the moment it's just an enumeration of the 
functionality we'll need,as I see it.

Take a look at this, and see where things might be missing or 
unclear. Once we've hashed out the desired functionality, I'll rough 
out the internal functions and opcodes for this. (Since we'll need to 
do this both from C code and from bytecode)

====================Cut here with a very sharp knife========
=head1 TITLE

Dynamic Bytecode Generation

=head1 VERSION

=head2 CURRENT

     Maintainer: Dan Sugalski
     Class: Internals
     PDD Number: TBD
     Version: 1.0
     Status: Tentative
     Last Modified: 26, 2002
     PDD Format: 1
     Language: English

=head2 HISTORY

=over 4

=item version 1

None. First version


=head1 CHANGES

=over 4

=item Version 1.0

None. First version



This PDD describes the facilities Parrot has to dynamically create


The bytecode segments can hold more than just bytecode. They can also
hold the source that corresponds to the generated bytecode, the AST
for the source that corresponds to the generated bytecode, the line
number information for the generated bytecode (for error reporting),
and potentially some pieces of raw binary data, both for program
needs and potential future expansion.

When generating bytecode, the following actions are needed:

=over 4

=item Create new bytecode segment

This function is needed to create a new segment of bytecode. The
segment isn't, at this point, ready to use.

=item Add source code to segment

This adds a line or more of source code to the bytecode segment.

=item Add AST to segment

This adds the AST for some of the source code to the bytecode segment.

=item Add line number information

This adds line number info to the bytecode segment, allowing the
interpreter to find out what line of source a particular piece of
bytecode corresponds to.

=item Add bytecode to segment

Add in actual bytecode to the segment.

=item Add constants (string, PMC, and float)

Add one or more constants to the bytecode constant pool

=item Add symbols to segment

Add in symbolic information to the bytecode segment, including
exported variables, classes, and functions

=item Add binary data chunk to segment

Add in some raw binary data to the bytecode segment

=item Put segment into use

Actually use the bytecode segment. Loads it into the interpreter and
makes it ready for use.

This needs to be an explicit step both so the interpreter can get
itself ready for the code (if it needs to) and so the bytecode
segment can be put in immoveable memory. (Since the interpreter may
well have a copying garbage collector in place)

=item Dump segment

Dump out the segment to a filehandle.







--------------------------------------"it's like this"-------------------
Dan Sugalski                          even samurai                         have teddy bears and even
                                       teddy bears get drunk

Thread Next Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at | Group listing | About