in reply to Code Generation in Perl

I like that idea, but I've never liked having to write XML by hand. What's the benefit over an API more like:

my $project = APPML::Project->new( name => "sample", title => "Sample Application" ); my $table = $project->add_table( name => "contact", caption => "contact", descriptor => "name" ); my $vc40notnull = AppML::FieldType->new( type => "varchar", size => "40", notnull => "1", ); $table->add_fields( [ name => "name", caption => "name", type => $vc40notnull, ], [ # more fields here... ] ); $project->create();

That's the sort of interface I'd create. Maybe it's appropriate to make that write out the XML for you, but I'd personally skip the step of writing out XML, reading it in, and translating it into internal data structures.

Replies are listed 'Best First'.
Re^2: Code Generation in Perl
by nferraz (Monk) on Jun 17, 2004 at 17:16 UTC
    The short answer is: I didn't want to be tied to Perl; AppML can generate code in any programming language. (Although Perl is the first one.)

    Here's AppML output:

    nferraz@debian:~/appml$ ./appml.pl xml/sample.xml meta/db/create.tmpl -> sample/db/create.sql meta/db/view.tmpl -> sample/db/view.sql meta/db/stats.tmpl -> sample/db/stats.sql meta/db/drop.tmpl -> sample/db/drop.sql meta/pl/base.tmpl -> sample/lib/sample.pm meta/pl/base_cdbi.tmpl -> sample/lib/sample/cdbi.pm meta/pl/cdbi.tmpl -> sample/lib/sample/cdbi/contact.pm meta/templates/header.tmpl -> sample/templates/inc/header.tt2 meta/templates/menu.tmpl -> sample/templates/inc/menu.tt2 meta/templates/stats.tmpl -> sample/templates/inc/stats.tt2 meta/templates/footer.tmpl -> sample/templates/inc/footer.tt2 meta/templates/frm.tmpl -> sample/templates/contact/frm_contact.tt2 meta/templates/detail.tmpl -> sample/templates/contact/detail_contact. +tt2 meta/templates/list.tmpl -> sample/templates/contact/list_contact.tt2 meta/templates/tbl.tmpl -> sample/templates/contact/tbl_contact.tt2 meta/doc/install.tmpl -> sample/doc/INSTALL meta/doc/plan.tmpl -> sample/doc/sample.html meta/doc/dot.tmpl -> sample/doc/sample.dot meta/data/strings.tmpl -> sample/data/sample.txt
    As you can see, the source metafiles are divided in directories:
    • meta/db
    • meta/pl
    • meta/templates
    • meta/doc
    • meta/data
    These metafiles are nothing more than text templates, used to generate code; if I wanted to generate Java code, I would probably create a new directory to store Java metafiles.