----- Original Message -----
From: "Piers Cawley" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Cc: <[EMAIL PROTECTED]>; <[EMAIL PROTECTED]>
Sent: Monday, August 11, 2003 5:42 AM
Subject: This Week's Summary
Perl 6 Summary for the week ending 20030810
Another week, another summary. How predictable is that?
(...)
Generic code generator?
Not content with his efforts in porting Python to Parrot, Michal Wallace
floated the idea of a generic code generator for parrot that everyone
could use. Stephen Thorne liked the concept, but worried that it
wouldn't necessarily play well with languages that allowed "eval
$aString". He proposed that, whatever the code generator got written in
should be a language that would be self-hosting.
Joseph Ryan argued that, instead of coming up with a new meta-language
for the GCG (Generic Code Generator), we should use something like XML
or YAML as a way of dumping the AST (Abstract Syntax Tree) with
standardized node names. Dan (who has a 'deep personal loathing for
XML') was all for just building a standard datastructure and passing
that into the code generator. (ASTnode.pmc anyone?). He also suggested
that having some way of doing AST transforms would be handy, as many
languages would want to get hold of the AST and munge it in some way
before it went any further (Lisp macros are the canonical example of
this sort of thing).
Following the discussion, Michal and Klaas-Jan Stol apparently spiked
out a prototype that used s-expressions.
Your summarizer wonders if there's any overlap between this and treecc.
Maybe I've just misunderstood what treecc was all about.
Yeah, in some way you're right.
TreeCC is a program for managing tree data structures. The user can write
the specification for the nodes (their layout: what fields do they contain)
and
the operations (if any) should be written. The program is very handy in that
it
handles memory stuff (allocation, deallocation, node constructors) and it
checks if a defined operation
is implemented for all node types (if not, an error is emitted).
(for example, a "print_node" operation should
be implemented for each node type; nodes can extend another node for easy
inheriting)
It should be possible to use TreeCC for designing an standard AST that can
then be
created by any compiler targeting Parrot. When one has this AST, (with a
generate_code operation)
one could just call the generate_code operation, and the compiler writer
doesn't have to write
a single line of IMC. However, TreeCC is written in C, so that might be a
problem, because C isn't hosted by Parrot (yet :)