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
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