Optimizing recursive templates
bcarneal at gmail.com
Thu Sep 24 22:54:59 UTC 2020
On Thursday, 24 September 2020 at 20:53:25 UTC, H. S. Teoh wrote:
> On Thu, Sep 24, 2020 at 07:49:44PM +0000, Stefan Koch via
> Digitalmars-d wrote
>> Hi Guys,
>> I am starting this thread to talk about the feasibility of
>> rewriting recursive templates as iterative internal forms.
> While this is an interesting subject in its own right, I think
> we're kinda missing the point of template optimization here.
> So I think a more practical approach to this problem is study
> common recursive templates (e.g., comb through Phobos and pick
> up the most commonly-used recursive templates) and identify the
> most common patterns among them that can be replaced with more
> efficient versions. It won't be possible to cover *all* cases
> of recursive templates, but if we can hit the most common
> cases, we can still get a lot of mileage out of it.
I think the practical approach is to bring type functions online.
This would let us replace our, often disappointed, hopes that
the next set of hacks will finally "fix" templates with actual
trials of an extant system (type functions).
Want to use recursive type functions? Have at it! Want to
iterate? Congratulations! You've single-handidly crushed the
performance of the super-duper template recursion hueristic
optimizer that'll happen any day now!
Kidding aside, while I believe we'll see performance and compiler
convergence benefits from type functions, the bigger benefit
should be a reduction in complexity for a big chunk of our future
Templates are very powerful, a huge improvement over their C++
predecessors. They are are also wildly unconstrained. Their
successful use depends on programmer discipline, on best
practices, on convention. Absent strong, manually applied
constraints, non-trivial templates can lead to problems that are
very difficult to localize, let alone fix.
So, performance? Love it. Simplicity? Love it more, especially
when it yields better performance.
More information about the Digitalmars-d