Another idiom I wish were gone from phobos/druntime

Chris via Digitalmars-d digitalmars-d at puremagic.com
Fri Feb 6 06:04:39 PST 2015


On Thursday, 5 February 2015 at 00:24:15 UTC, Andrei Alexandrescu 
wrote:
> I'm seeing another idiom that seems to become fashionable. 
> Consider this excerpt from 
> https://github.com/D-Programming-Language/phobos/blob/master/std/algorithm/iteration.d#L407:
>
>             auto opSlice(size_t low, size_t high)
>             in
>             {
>                 assert(low <= high);
>             }
>             body
>             {
>                 import std.range : take;
>                 return this[low .. $].take(high - low);
>             }
>
> which of course trivially boils down to:
>
>             auto opSlice(size_t low, size_t high)
>             {
>                 assert(low <= high);
>                 import std.range : take;
>                 return this[low .. $].take(high - low);
>             }
>
> What advantage could possibly be in transforming a 5-liner into 
> a 9-liner? Are we really aiming at writing the maximum possible 
> lines of code here and using as many language features as 
> possible everywhere?
>
> I think we should dust off that Phobos contributors' guide. 
> Sadly, there is little we can do against the more subtle issues.
>
>
> Andrei

[caveat: I've read some of the posts, yet I don't know, if this 
has been proposed before in any form]

What about moving the contracts somewhere else, like the 
unittests?

auto opSlice(size_t low, size_t high)
{
     import std.range : take;
     return this[low .. $].take(high - low);
}

contract {
   opSlice(size_t low, size_t high) {
      assert(low <= high);
   };
   sayHello(string str) {
     assert(str.length);
   }
   // ...
}

Maybe contract functions could be labelled.

@contract auto opSlice(...) ...

Destroy.


More information about the Digitalmars-d mailing list