>>>>> "Dustin" == Dustin Laurence <[EMAIL PROTECTED]> writes:

Dustin> The question is, which front ends are regarded as being good
Dustin> exemplars of style in GCC 4 and which are burdened with legacy
Dustin> code that shouldn't be duplicated in a new project?  I gather
Dustin> that at one time the obvious choice, treelang, wasn't all that
Dustin> pretty and the fortran front end was suggested as better, but
Dustin> that was somewhat dated news.

This is kind of vague... what kinds of things do you want to know?

I advocate the overall approach taken by gcjx:

1. Write the front end as a separate library, with its own
   representation of the program.  In particular, don't use the GCC
   tree structure to model the program.

   This makes it easier to reuse the front end in other situations.
   gcjx has several back ends: java class files, header files (for CNI
   and JNI), GCC trees, LLVM was in the works.  You could also add
   analysis "back ends", etc.

2. Put the front end into its own top-level directory in the source
   tree.  This removes the temptation to let GCC-isms sneak in.

3. Write a thin layer of glue to convert the front end's internal
   representation to GENERIC.  Avoid having your own tree codes and
   the like (e.g., use build_common_tree_nodes -- don't do like gcj
   and roll your own... if you need your own integral types, define
   them separately).

   In gcjx this glue layer is just one back end among many, and they
   are all simply implementations of a code generation interface.

In particular I think the representation choice is critical.  The
"old" gcj has had many silly bugs directly traceable to its use of
trees; using a statically typed representation (as in gcjx... the
entire model is C++ classes) eliminates whole classes of bugs.

Oh, yeah, one more thing: write it in C++.  GCC's internals are fairly
friendly to C++ these days, and IME it is markedly better than C.  At
least, if you try to work at a high level, use the STL, etc.

Tom

Reply via email to