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.

Reply via email to