Human unreadable documentation - the ugly seam between simple D and complex D

rumbu via Digitalmars-d digitalmars-d at puremagic.com
Fri Mar 27 07:02:03 PDT 2015


On Friday, 27 March 2015 at 13:07:30 UTC, Panke wrote:
> On Thursday, 26 March 2015 at 21:36:56 UTC, rumbu wrote:
>> On Thursday, 26 March 2015 at 19:45:19 UTC, Alex Parrill wrote:
>>> On Thursday, 26 March 2015 at 19:32:53 UTC, Idan Arye wrote:
>>>> ...snip...
>>>
>>> So tl;dr; make the template constraints in ddoc less 
>>> prominent?
>>>
>>> The "new library reference preview" under Resources seems to 
>>> already have this (example: 
>>> http://dlang.org/library/std/algorithm/searching/starts_with.html)
>>
>> This will not solve the readability problem:
>>
>> - what is a range?
>> - what is a needle?
>> - what is a predicate?
>>
>> Phobos is reinventing the OOP encapsulation without providing 
>> the minimal tools. IMHO, something similar to "interface" is 
>> mandatory to define constraints for "range" and the 
>> relationship between "needle" and "range".
>
> Never heard that complain about python's protocols which have no
> language support whatsoever.

I've never used Python, so take this as a live experiment:

I googled for "startswith python":

str.startswith(prefix[, start[, end]])
Return True if string starts with the prefix, otherwise return 
False. prefix can also be a tuple of prefixes to look for. With 
optional start, test string beginning at that position. With 
optional end, stop comparing string at that position.

In 3 seconds, I understood the basic usage, without ANY knowledge 
about Python. Even if I don't know Python, the brackets told me 
that "start" and "end" are optional. str, prefix, start, end - 
comprehensible simple words. The only thing remaining is the 
"tuple" thing. But I can use this function without knowing what a 
"tuple" is.

Looked also in the source code to find out that startsWith is 
locale sensitive, something ignored in phobos.

https://hg.python.org/cpython/file/4ebe1ede981e/Objects/stringobject.c#l2903

Now compare with this:

uint startsWith(alias pred = "a == b", Range, Needles...)(Range 
doesThisStart, Needles withOneOfThese) if (isInputRange!Range && 
Needles.length > 1 && is(typeof(.startsWith!pred(doesThisStart, 
withOneOfThese[0])) : bool) && 
is(typeof(.startsWith!pred(doesThisStart, withOneOfThese[1..$])) 
: uint));
bool startsWith(alias pred = "a == b", R1, R2)(R1 doesThisStart, 
R2 withThis) if (isInputRange!R1 && isInputRange!R2 && 
is(typeof(binaryFun!pred(doesThisStart.front, withThis.front)) : 
bool));
bool startsWith(alias pred = "a == b", R, E)(R doesThisStart, E 
withThis) if (isInputRange!R && 
is(typeof(binaryFun!pred(doesThisStart.front, withThis)) : bool));
*Checks whether the given input range starts with (one of) the 
given needle(s).*

I'm not a native English speaker, but a range can start with a 
needle? Where is the haystack? :)

Anyway, in the Python built-in lib I didn't find any 
levenshtheinDistance, boyermooreFinder or 
schschchcscshshscscshshscscssscsshcswarzSort.


More information about the Digitalmars-d mailing list