Nobody understands templates?
Nick Sabalausky
SeeWebsiteToContactMe at semitwist.com
Tue Mar 4 16:18:52 PST 2014
On 3/1/2014 1:00 PM, Steve Teale wrote:
> I have already dealt
> with the yada-yada cases by old-fashioned OOP.
>
As I see it, a big part of the benefit of templates is that they can
help you avoid a lot of the downsides of OOP:
- OO Boilerplate.
- Multiple dispatch is ridiculously messy, having to resort to
contortions like the visitor pattern.
- Upcasting looses compile-time type info.
- Decreased opportunity for compiler optimizations, because a single
function handles multiple data types at runtime. So the optimizer can't
generate optimal code for all the data types used.
- Extra indirections at runtime.
- Downcasting has a runtime cost.
- Poor cache behavior.
- Tendency for increased heap activity, which is not cheap at all.
- Lumping all data/functionality for a single "object" instance into the
same physical chunk of memory causes problems for parallelization. And
that's increasingly problematic on modern processors which work best
when operating as "streaming-data processors". (See "Entity/Component
Systems"[1] - There are good reasons videogame development has mostly
switched from OOP to entity/component systems.)
Basically, while OOP certainly has benefits, it also has notable flaws
that inherently slow down both the programmer and the computer. JVM goes
to an enormous amount of trouble to mitigate that natural tendency, but
it still has limits. And most languages (like D) can't expect to
approach JVM's work on de-slow-ifying OO.
The runtime performance issues of OO aren't *always* a problem, but they
can easily kill inner-loop/performance-sensitive sections of code. So
with OO, you have to give up the generic/polymorphic benefits for any
critical sections. Metaprogramming lets you still be generic even in the
critical sections. This is demonstrated in sections #1-4 of an article I
wrote a little while back[2]. It's a very contrived example, but even I
was still surprised just *how* badly the OO version performed.
There's also this template primer[3] which might help, but I'm guessing
it may be below your ability level.
[1] Entity/Component Systems:
http://t-machine.org/index.php/2007/09/03/entity-systems-are-the-future-of-mmog-development-part-1/
[2]
http://www.semitwist.com/articles/EfficientAndFlexible/MultiplePages/Page1/
[3] https://semitwist.com/articles/article/view/template-primer-in-d
More information about the Digitalmars-d-learn
mailing list