eliminate junk from std.string?

Jonathan M Davis jmdavisProg at gmx.com
Tue Jan 11 15:59:37 PST 2011


On Tuesday, January 11, 2011 15:29:54 Ary Borenszweig wrote:
> So what's a good use for aliases?

Oh, there's not necessarily anything wrong with aliases. The problem is if an 
API has a lot of them. The typical place to use typedef in C++ is when you have 
long, nasty template types which you don't want to actually have to type out, 
and while auto and D's improved templates reduce the need for that sort of 
typedef, I'm sure that folks will still want to use them for that sort of thing.

Personally, I've used them for three things:

1. When there's a templated function that you want to be able to call with a set 
of specific names. A prime example would be get on core.time.Duration. It 
properly genericizes dealing that functionality, but it would be annoying to 
have to type duration.get!"days"(), duration.get!"hours", etc. all over the 
place, so it aliases them to the properties days, hours, etc.

2. Deprecating a function name. For instance, let's say that we rename splitl to 
splitL or SplitLeft in std.string. Having a deprecated alias to splitl would 
avoid immediately breaking code.

3. In the new std.datetime, DateTimeException is an alias of 
core.time.TimeException, so that you can use the same exception type throughout 
the time stuff (std.datetime also publicly imports core.time) without worrying 
whether it was core.time or std.datetime which threw the exception and yet still 
have an exception type with the same name as the module as is typical in a 
number of Phobos modules. So, you get one exception type for all of the time 
code but still follow the typical naming convention.

However, none of these are things that I'd do very often. alias is a tool that 
can be very handy at times, and I think that it's very good that we have, it but 
using it all over the place is likely ill-advised - especially if all you're 
really doing with it is making it possible to call the same function with 
different names.

I'd say that, on the whole, aliases should be used when they simplify code or 
when renaming functions or types, and you want a good deprecation path, but 
other than that, in general, it's probably not a good idea to use them much.

- Jonathan M Davis


More information about the Digitalmars-d mailing list