durusmail: qp: qpy development ideas
qpy development ideas
2007-10-08
2007-10-09
Re: qpy development ideas
2007-10-10
2007-10-10
2007-10-14
2007-10-15
David K. Hess (2 parts)
2007-10-09
2007-10-09
2007-10-10
2007-10-10
2007-10-10
2007-10-10
2007-10-10
qpy development ideas
David Binger
2007-10-10
> Regular decorator functions is where my thinking was going also. My
> first concern with that is that it would incur a performance penalty
> with the functions being rewritten every time the module is loaded.
> I.e. not once when the source file is compiled to a .pyc. This could
> prove to be troublesome for large applications.

In any case, this approach won't work in python 3, where "useless"
literals
are removed from the code object, so we don't have them to use in
a template-revision.

A template revision includes two things:
1) the accumulation and return of the accumulated values, and
2) the automatic protection of all literals against more quoting.
I think we could use a conventional (but exotic) decorator for 2, but
not for 1.

In this case, we would have:

@quotedxml
def f():
     s = 'already quoted'
     s += f('already quoted')
     return s

or perhaps

@quotedxml
def f():
     s = []
     s.append(f('already quoted'))
     return join_xml(s)



>
> What if the decorator function was primarily a NOOP and just used to
> identify which functions/methods qpy will templatize? I.e. if a
> function/method is wrapped with a particular decorator from the qpy
> module, then it gets templatized during compilation. The decorator
> could also check to make sure that the function/method had indeed by
> templatized and throw an exception if not.

That's basically the same as what I proposed at the start of this
thread,
except that the "decorator" raises a SyntaxError if it is compiled by
the ordinary python compiler.

It is true that we could use a conventional decorator that just raises
an exception if it executes at all.   In this case, the file with
templates
would need to import those conventional decorators and make sure
that those names were never assigned any other values.  If the
decorators
did not execute as intended, you might not get a template compiled
as a non-template, and that would be very bad.

It seems better to be certain that you can't ever compile a file
with the wrong compiler.

> Would this allow files to end in .py?

It seems better to know up-front which compiler is required.








reply