On Thu, Mar 4, 2010 at 6:58 PM, Russell Keith-Magee
<freakboy3...@gmail.com> wrote:
> On Fri, Mar 5, 2010 at 12:26 AM, Alex Gaynor <alex.gay...@gmail.com> wrote:
>> On Thu, Mar 4, 2010 at 3:41 AM, Russell Keith-Magee
>> <freakboy3...@gmail.com> wrote:
>>> On Thu, Mar 4, 2010 at 7:29 AM, Alex Gaynor <alex.gay...@gmail.com> wrote:
>
>>>> Templates will be compiled by turning each template into a series of 
>>>> functions,
>>>> one per block (note that the base template from which other templates 
>>>> extend is
>>>> a single function, not one per block).
>>> ...
>>>> After an intermediate representation is created a compiler is invoked which
>>>> translates the IR into Python code. This handles the details of Django 
>>>> template
>>>> scoping, spilling variables in the event of conflicts, and calling 
>>>> template tag
>>>> functions.
>>>
>>> You don't ever say this explicitly, but I presume that the plan is to
>>> do this as an in-memory construction -- that is, the intermediate
>>> representation is handled in-memory, not as a python file on disk.
>>> You're proposing to writing a (2 pass?) compiler, not a code
>>> generator, right?
>>>
>>
>> My plan was an in-memory construction, but there's no reason once we
>> have the infrastructure in place that we couldn't generate templates
>> to disk.  As for a compiler vs. a code generator, a compiler *is* a
>> code generator, so I'm not sure I see the distinction being made.
>
> Ok - sure - a compiler is a code generator. What I'm driving at is
> that you're not proposing that we move to a Cheetah-style model. The
> output of the compiler isn't something the end user should ever need
> to see, and won't ever see under normal circumstances. The compiled
> output isn't something the user will (under normal conditions) have
> the opportunity of modifying and editing, and they won't need to have
> makefiles or some similar construct to make sure their compiled
> templates are up to date. Django template use isn't going to devolve
> into "import mytemplate".
>

That's correct, although as I said there's no reason someone couldn't
utilize the compilation APIs to write them out to disk and do "import
mytemplate".

>>>> To provide an optimal solution we must know which variables a given 
>>>> template
>>>> tag needs, and which variables it can mutate. This can be accomplished by
>>>> attaching a new class attribute to ``Nodes`` and passing only those values 
>>>> to
>>>> the class, (instead of the full context dictionary). Subsequently, we would
>>>> only need to mirror a few given values into the locals, and since these are
>>>> known names, we avoid degrading the local lookups into dictionaries. 
>>>> Old-style
>>>> ``Nodes`` will continue to work, but in a less efficient manner.
>>>
>>> The term "less efficient" needs clarification here -- less efficient
>>> than a compiled node that has been specifically optimized for
>>> compilation, or less efficient than existing template rendering? It's
>>> completely understandable if a node doesn't render as fast as it's
>>> optimized and compiled counterparts, but I would consider it a failure
>>> if a compiled template resulted in a slowdown when compared to
>>> existing non-compiled rendering speed.
>>>
>>
>> less efficient than existing rendering, for that specific node.  This
>> is because the Context dictionary would have to be rematerialized for
>> each and every old-style node in the template.
>
> That's what I expected; I just wanted to make sure we were on the same page.
>
> Yours,
> Russ Magee %-)
>
> --
> You received this message because you are subscribed to the Google Groups 
> "Django developers" group.
> To post to this group, send email to django-develop...@googlegroups.com.
> To unsubscribe from this group, send email to 
> django-developers+unsubscr...@googlegroups.com.
> For more options, visit this group at 
> http://groups.google.com/group/django-developers?hl=en.
>
>

Alex

-- 
"I disapprove of what you say, but I will defend to the death your
right to say it." -- Voltaire
"The people's good is the highest law." -- Cicero
"Code can always be simpler than you think, but never as simple as you
want" -- Me

-- 
You received this message because you are subscribed to the Google Groups 
"Django developers" group.
To post to this group, send email to django-develop...@googlegroups.com.
To unsubscribe from this group, send email to 
django-developers+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-developers?hl=en.

Reply via email to