What's missing from Phobos for Orbit (package manager)

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Thu Feb 14 04:42:33 PST 2013


On 2/14/13 6:58 AM, Jacob Carlborg wrote:
> On 2013-02-14 10:46, Walter Bright wrote:
>
>> I don't understand why one would go around the horn to just check for
>> !empty.
>
> I've tried to explain, it shows what the intention is.
>
> Instead of "str.length == 0" I use "str.empty". Instead of "!str.empty"
> I like to use "str.any".
>
> It's not a big deal but I would need to change quite a lot of code if
> "str.any" isn't allowed.

I understand. Adding functions such as the negation of empty becomes a 
judgment call.

Phobos does have quite a few simple functions that could be easily 
achieved through expression composition (e.g. trim) or statement 
composition (e.g. enforce). So again it's all a matter of judgment.

Walter and I don't consider the negation of empty as useful enough to 
receive a name.

There's been a talk (discussed on reddit) on Ruby by a prominent member 
of that community. At a point the talk addressed the awesomeness of 
"unless" (the negation of "if") - the presence of that near-useless 
device was seen as a human touch in a world of cold logic. I found the 
argument rather weak, unless we consider creating clutter and wasting 
means part of the human touch.

Besides, as often happens with such constructs, there are pitfalls and 
subsequent dos and donts about "unless" that more than undo whatever 
utility and expressiveness it may have. The first two hits for 
https://www.google.com/search?q=ruby%20unless describe "unless, the 
abused ruby conditional" and "making sense of ruby's unless". Turns out 
"unless" should not be used with "else" or at the beginning of a statement.

Perl also has "unless", and after years of experience the Perl Best 
Practices guide 
http://refcards.com/docs/vromansj/perl-best-practices/refguide.pdf 
curtly says: "Don’t use unless or until at all." If Perl shuns a 
keyword, that's bound to say something.

D has "any" (previously an overload of "canFind") as an algorithm that 
finds whether at least one element of a range satisfies a condition, 
otherwise writable as "!r.find!(a => condition).empty". The 
convenience/mechanics/generality of the construct was enough 
justification to add the algorithm. To claim that D already has the 
negation of empty because one can write "r.any(a => true)" is, in my 
opinion, an ill-posed argument.


Andrei


More information about the Digitalmars-d mailing list