August 25, 2006
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
August 25, 2006
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