D dropped in favour of C# for PSP emulator

Peter Alexander peter.alexander.au at gmail.com
Thu May 17 02:00:43 PDT 2012


On Tuesday, 15 May 2012 at 17:23:28 UTC, Kirill wrote:
> How about users who don't know what binary search is. binary 
> search is an intuitive concept for people who have good 
> programming experience but assumeSorted(r).contains(x) is more 
> intuitive to higher level users.

If you don't know about binary search, you won't write 
assumeSorted(r).contains(x) you'll just write r.contains(x) 
because you have no idea that binary search exists. Why would you 
bother typing extra characters for a benefit that you are unaware 
of?

If you do know that binary search exists then the obvious 
algorithm name is binarySearch. If I use .contains to coax a 
binarySearch then I'm relying on a little bit of faith. In what 
situations does it give a binary search?

[1, 2, 3].contains(2); // does the compiler infer that 1, 2, 3 is 
sorted?
iota(10).contains(5); // is iota implicitly a sorted range?
assumeSorted([1, 2, 3]).map!(x => x + 1).contains(3); // does 
Phobos know that the map is order preserving?
assumeSorted([1, 2, 3]).filter!("a & 1").contains(2); // does 
Phobos know that filters always preserve order?

I'd have to read the documentation to find out which of these 
uses binary search. In fact, I'd probably have to read the Phobos 
source.

If I just used binarySearch then I would be 100% guaranteed that 
it will use a binary search. I don't have to second guess the 
compiler -- I just *know*.


More information about the Digitalmars-d mailing list