www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Why the limited use of templates?

reply Reiner Pope <reiner.pope REMOVE.THIS.gmail.com> writes:
I wonder why many of the functions in Phobos aren't templated. For 
instance, the std.math functions could benefit from the user being able 
to specify the type used, to avoid unnecessarily precise calculations. 
Also, there's the same issue with std.string.

And in a more general view, templates are nice because of the duck 
typing (or structural typing) that they allow. I was thinking about 
creating a string substitute class in D, but doing so would require 
redefining the std.string functions, whereas templated versions of those 
functions would be satisfied if I just duplicated all the required methods.

I'm not asking so that I can point out this code and say 'haha, that's 
not being done properly,' but I'm actually wondering what the reasons 
are. I think perhaps they are:
1. They were written at a time when D had an ugly template syntax.
2. Using templates requires the source code to compile instead of just 
linking to the library files.

Any thoughts?

Are there reasons why phobos shouldn't be changed to support templated 
versions of these functions?

Cheers,

Reiner
Aug 25 2006
parent Oskar Linde <oskar.lindeREM OVEgmail.com> writes:
Reiner Pope wrote:
 I wonder why many of the functions in Phobos aren't templated. For 
 instance, the std.math functions could benefit from the user being able 
 to specify the type used, to avoid unnecessarily precise calculations. 
 Also, there's the same issue with std.string.
 
 And in a more general view, templates are nice because of the duck 
 typing (or structural typing) that they allow. I was thinking about 
 creating a string substitute class in D, but doing so would require 
 redefining the std.string functions, whereas templated versions of those 
 functions would be satisfied if I just duplicated all the required methods.

I have written template function replacements for many of the functions in std.string, and I know Sean has done something along this way too. For a rather old (and ugly) implementation, look at: http://www.csc.kth.se/~ol/array.d Doc (even worse): http://www.csc.kth.se/~ol/array.html I should wrap up my current working version any time now. The thing that is holding me back is mainly the DDoc bug with template functions.
 I'm not asking so that I can point out this code and say 'haha, that's 
 not being done properly,' but I'm actually wondering what the reasons 
 are. I think perhaps they are:
 1. They were written at a time when D had an ugly template syntax.

Most of them were written even before D had any kind of templates.
 2. Using templates requires the source code to compile instead of just 
 linking to the library files.

This is one of the disadvantages of using template functions. Others are currently non-working DDoc generation, and harder to understand error messages. I don't think any of them is the reason though.
 Any thoughts?
 
 Are there reasons why phobos shouldn't be changed to support templated 
 versions of these functions?

Walter is the man behind the Phobos design. It would be interesting to hear what his plans and philosophies are regarding this. /Oskar
Aug 25 2006