What are you planning, D related, for 2017 ?
Nordlöw via Digitalmars-d
digitalmars-d at puremagic.com
Mon Jan 2 09:10:03 PST 2017
On Monday, 2 January 2017 at 15:16:31 UTC, Basile B. wrote:
> Write your plan here, and let's take a rendez-vous next year,
> to check those plans !!
Enable non-copyable (r-value) ranges to be passed to range-based
algorithms that require a single reference to the source range.
My motivation for this is to enable non-copyable values,
typically containers, to be passed by move into a specific range
I currently call `UniqueRange`. `UniqueRange`, being in turn
non-copyable, should then be passed Phobos' higher-order
algorithms, typically `map`, `filter`, `reduce` etc.
`UniqueRange` is similar to Rusts' `IntoIterator`. In order for
this happen both the compiler and Phobos needs be adjusted in a
non-breaking way.
Here's a sample implementation of this idea that compiles and
tests out correctly with a branch of Phobos (link provided below).
https://github.com/nordlow/phobos-next/blob/master/src/unique_range.d
being a wrapper for
https://github.com/nordlow/phobos-next/blob/master/src/array_ex.d
The first thing is to improve the compiler so that it always
moves the last reference (in scope X) of a variable passed by
value into scope X (typically as a function parameter or foreach
aggregate). More specifically this lowers to calling
`doCopyOrMove()` on the DMD node of that last reference. The
challenge is to find *which* node(s) this applies to.
This will enable D to compete with Rust's iterator flexibility by
enabling range-based D algorithms to be safely and efficiently
combined with containers (both copyable and non-copyable).
To kickstart this I need help by the DMD developers on figuring
out how to fix DMD so that move semantics kicks in all places
where it should (as described above). After DMD has been fixed, I
will happily implement the rest.
Andrei has already approved this improvement as seen here
https://github.com/dlang/phobos/pull/4971
More information about the Digitalmars-d
mailing list