Currently some implementations rely on the struct Take from std.range to obtain certain functionality. I think this is a bit flawed, as it isn't generic enough. As such you end being locked to this "Take" structure. Which means you can't define your own implementation if needed.


https://github.com/dlang/phobos/blob/v2.071.2/std/container/dlist.d#L649


It is used here in DList in "linearRemove". There is a function "tail" which implements getting a range for the last few elements. But it is a bit inefficient as it first has to go through every single element from the front. At least in the case of a linked list. So maybe I want to implement my own "TailTake", that now means defining a new overload for "linearRemove" in DList. Then not only that there are already other functions in std.range that do define their on constructs, "takeOne()" for example does this. So that function can't be used with DList, and so forth.

Reply via email to