Safe Cursors and Ranges
Andrei Alexandrescu
SeeWebsiteForEmail at erdani.org
Thu Aug 26 10:51:02 PDT 2010
On 8/26/10 9:18 PDT, dsimcha wrote:
> I'm starting to think that the whole concept of ranges is starting to get too
> complicated. We're already seeing it with this moveFront() stuff that's a special
> case to deal with structs that have expensive postblits. We need a healthy dose
> of "worse is better" to throw at ranges. IMHO generic code should solve 90% of
> the problem in a way that's robust, not terribly hard to implement and easy to use
> and understand. Trying to solve 100% of the problem with generic code means that
> your solution will be absurdly complicated in both interface and implementation,
> and therefore will be a buggy POS that nobody can figure out how to use.
[...]
> It's better to have ranges that can solve 90% of the problem for the most
> competent 80% of programmers than ranges that can solve 100% of the problem, but
> only for the 1% who are hardcore gurus.
I'm weary of this philosophy. I've seen a phenomenon happen time and
again with myself and others: you hit a 10% case exactly when you (a)
know what you want to do, (b) you know that the library could and should
help you, and (c) you are working on a difficult enough problem to be
wary of implementing it by hand.
Two examples from recent history: A poster used std.algorithm for the
_first_ (sic!) time, and found a fundamental limitation: std.algorithm
doesn't work with immutable arrays. Second, Peter Alexander wanted to
implement nextPermutation (a nontrivial algorithm in which you need all
the help you can get) as his _first_ (sic again!) artifact of a new
library, and hit the bidirectional range composition limitation.
I don't think we want to aim std.algorithm and others for a 90% thing.
That's what Visual Basic did. We should aim for making it a 100% thing
without losing the other costs from sight (something that I believe we
have a good track record on).
In light of that, it's worth looking at optional functionality of the
kind I described (allBefore etc.) would add power without aggravating
everyone.
Also, regarding moveFront and friends, I think it's a good time to start
the following discussion: do we want to support types with arbitrarily
expensive copying, or could we simply require reference counting and
copy-on-write for such types? Let's start a new thread about this!
Andrei
More information about the Digitalmars-d
mailing list