Whither Tango?
Michel Fortin
michel.fortin at michelf.com
Sat Feb 20 05:59:44 PST 2010
On 2010-02-19 09:11:11 -0500, Andrei Alexandrescu
<SeeWebsiteForEmail at erdani.org> said:
> If you could provide a list of silly named symbols that could be a
> dealbreaker for a prospective D user, please let me know. Thanks.
I don't think there are really any 'silly' names (except perhaps iota),
it's just that many don't do exactly what you think they do on first
reading. For instance, the other day I was working with input ranges
and needed a way to take N elements from the range and put them aside
to work on them later. So I defined my own function "take" for that.
To me, "take" means you take one or more element and they aren't in the
range anymore afterwards.
If you look at std.range, you'll find the same function 'take', but it
does its job lazily. That's great, except when you don't expect it. The
name is not really silly, just not precise enough. I think there should
be a clue (in the name) telling you it does its job lazily, because in
general functions do what they say *when* you call them, not at a later
point in time.
In my case I often have to save some parts of the input for later, and
any use of lazy ranges in those cases would be a bug. I think 'take'
should do what it says: take N elements, and immediately, not later.
I know you can write "array(take(5, range))" do do what I want, but the
point is that take(5, range) alone doesn't do what you'd expect it to
do at first glance, which is to take 5 elements from the range. Beside,
"array(take(...))" can be wasteful sometime: for arrays (and some other
ranges) you can just slice them in two parts and return the first
slice, no heap allocation needed. But that optimization is harder to
achieve and expect with the "array(take(...))" combination.
I think this criticism applies to other parts of std.range too.
I expect you'll be unwilling to change the name because however you
rename it it'll be a little longer and give a less special function
(the eager one) the simpler name, and that'd be boring. But most people
will expect to see the less special function when seeing the simple
name at first, so having it as the default makes the learning curve
easier and less error-prone.
--
Michel Fortin
michel.fortin at michelf.com
http://michelf.com/
More information about the Digitalmars-d
mailing list