digitalmars.D - My Bit on Templates
- Charlie Patterson (45/45) Feb 18 2005 I realize that the C++ template engine is very, very powerful, basically...
I realize that the C++ template engine is very, very powerful, basically a
functional language as some have pointed out here. I got about half way
through andrescu's (spelling?) book when I realized... I don't need this
mental masturbation. I mean really, people are just going to be put off by
having to work two weeks to understand what is behind a few ultimately
ordinary features. (Most programmers are on deadlines.)
As C++ stands, if you use templates you pretty much need to give any app
coder your library code, which seems non-modular to me. And in some cases,
you have to tell the compiler to instantiate certain templates to get things
to work. As I understand it, this is the repurcussion of the flexibility of
templates.
But on the other hand, here is my thought on a dramatically simpler template
engine. Suppose it was only powerful enough to do "containers" basically:
stack(int)
auto_ptr(float)
In other words, the main purpose is for type safe conglomerates. Probably
90% of the use of templates would still be covered and the other 10%
probably doesn't get used by most people anyway. The good news would be
that these could be compiled into a new (AFAIK) type of binary. It's been a
while, but quickly a PIC object library has functions and references which
can't be resolved until load time. Then the loader puts the binary code
into the same process space as the main app. Once the beginnings of
functions and literals are known, the references are resolved.
Well "template libraries" could also compile but the sizes of things would
remain unresolved. As an example, imagine a link lists of T's for some T.
When this code is linked and used as an int and also a float, the size of
the actual values are now known for T. You can load two copies of the
linked list into the apps address space with different resolutions for the
size param.
I think this would be pretty cool. Template libraries would come in ".tobj"
format and quickly load in. Compilers wouldn't have to give those asinine
error comments for templates within templates within..
Another point, you could check at compile time that code is reasonable by
limiting the scope of T. In C++
template <class T> void Dock( T* t )
{
if ( T->IsUndocked() ) // how do we know t will be a boat?
...
};
int i;
Dock( i );
Compile didn't catch this when creating Dock(), only when calling it. This
code was silly. If it were only going to work on boats, you didn't need a
template. You only needed a superclass function:
void Dock( Boat* B );
Feb 18 2005








"Charlie Patterson" <charliep1 excite.com>