feepingcreature at gmail.com
Wed Nov 27 08:45:55 UTC 2019
On Tuesday, 26 November 2019 at 18:59:26 UTC, Paul Backus wrote:
> On Tuesday, 26 November 2019 at 18:45:35 UTC, Adam D. Ruppe
>> On Tuesday, 26 November 2019 at 18:35:42 UTC, Stefan Koch
>>> In _general_ it's not possible to categorize a template as
>>> being temporary or not.
>>> For language semantic reasons it is a requirement for every
>>> re-instantiated template to forward to exactly the same
>>> symbol as was generated during the first instantiation.
>> What if it kept *just* the symbol, but discarded its innards
>> when under memory pressure, then could regenerate them if
>> evaluated again?
> This will cause compilation to become non-deterministic, since
> the result of template evaluation can depend on the order in
> which declarations are semantically analyzed:
Snapshot the lexical environment at the point of instantiation?
Could make namespaces linked list of arrays so you can
copy-on-write them for relatively cheap. Compilation is pure
enough that this should be sufficient.
Imo templates are mostly split into two halves: large templates
that are usually evaluated once with the same parameters, and
small templates that are evaluated repeatedly with the same
parameters. So a logic of "discard template contents beyond a
certain cutoff size" should already do it.
And of course, mixin templates don't need to save anything
because they're always reevaluated anyways.
More information about the Digitalmars-d