[Python-ideas] Statements vs Expressions... why?

Cliff Wells cliff at develix.com
Thu Sep 11 20:08:35 CEST 2008


On Thu, 2008-09-11 at 11:01 -0400, Mike Meyer wrote:
> On Wed, 10 Sep 2008 14:54:44 -0700
> Cliff Wells <cliff at develix.com> wrote:
> > There were several design decisions to be made when designing Breve, the
> > first and foremost being "will Breve templates be full-blown Python
> > programs or will they be limited to expressions?".  I chose the latter
> > for a few reasons:
> 
> That seems to be a very poor decision. If you want Breve templates to
> play well with Python code (i.e. - be able to have Breve classes
> inherit from Python classes and vice versa - but I guess without
> statements, you don't have classes, so all of that is moot. Of course,
> not having classes seems like a bad idea as well.

Just to be clear because it appears to me you aren't quite following:
Breve templates *are* Python code, or more exactly, they are a single
Python expression.  There is no preprocessor or interpreter that turns
Breve into Python.  It's just a bunch of class-magic.

The decision to be a single large expression is largely because this is
a *template* engine and an expression maps most directly to XML because
XML is structured similarly:

html [
    head [
        title [ 'A Brevé Template' ]
    ],

    body [
        h1 [ 'Briefly, Brevé' ], br,
        div ( style = 'text-align: center;' ) [
            span [ '''
                As you can see, Brevé maps very
                directly to the final HTML output.
            ''' ]
        ]
    ]
]

This is opposed to allowing the full of Python which would require a lot
of syntax that is extraneous to the markup being generated (and most
importantly would have caused a visual disjoint between the Breve source
template and the final output).

> Further, why do you feel that Breve templates - even if limited to
> expressions - need to be limited to what Python expressions can do?

Again, because Breve *is* Python.  It's an internal DSL.  Please see 

http://martinfowler.com/bliki/DomainSpecificLanguage.html

for a definition of what that means.  Another example of an internal DSL
that's more widely used would be SQLAlchemy.

Regards,
Cliff




More information about the Python-ideas mailing list