sort API design
Johannes Riecken
johannes.riecken at gmail.com
Wed Nov 20 09:33:25 UTC 2019
I had looked at how to do case-insensitive string sorting with
Phobos and without looking at the documentation much, I went with
the following code and then wrongly concluded that `<` does
case-insensitive comparisons on strings by default:
```
import std.algorithm;
import std.stdio;
import std.string;
void main() {
auto arr0 = ["foo", "bar", "Baz"];
auto case_sensitive = sort!((a, b) => a < b
)(arr0);
auto case_insensitive = sort!((a, b) => a.toLower() <
b.toLower())(arr0);
writeln(case_sensitive);
writeln(case_insensitive);
}
```
Output:
```
["bar", "Baz", "foo"]
["bar", "Baz", "foo"]
```
Later I learned that I was trapped by `sort` being in-place but
still returning a value. If this API were to be designed from
scratch, I wonder if it would be possible to rule out this
incorrect usage at compile-time while still retaining the other
nice features of the `sort` function like being in-place and
giving strong types which can be used to choose faster algorithms
to further transform the result, etc.? Or are there any ideas in
programming language research that would help with such a case?
More information about the Digitalmars-d
mailing list