What ever happened to move semantics?

Mike Shah mshah.475 at gmail.com
Tue Feb 27 03:54:54 UTC 2024


On Tuesday, 27 February 2024 at 02:28:32 UTC, Manu wrote:
> I've started writing some code for the first time in years; and 
> the time away and distance really gave me some fresh 
> perspective.
>
> I started writing D because that's what I prefer, and I was 
> shaken with the
> realisation that the situation is just so much worse than I was 
> ever
> willing to admit to myself.
> This is a small greenfields app, and I want to develop it 
> quickly... so I
> told myself that I'd try and use phobos.
> ...but it needs to run on microcontrollers, so I need to 
> compile tiny code
> and avoid GC and stuff. Better-C seems like a good plan, except 
> that phobos
> is just not compatible.
> So, I figured I'd just use phobos and worry about fixing up 
> allocation
> semantics later when I want to release on hardware, so I can 
> dev the
> business logic on PC quickly.
> Seems like a plan, except phobos is just BAD. API's are 
> inconsistent and
> mostly horrible. Nothing is intuitive, and also I realise I'm 
> writing
> myself into a huge overhaul when I want to forge a 
> microcontroller build
> later.
>
> The biggest slap in the face though, which is honestly 
> unexcusable 20 years on, is that D still has no real meaningful 
> container library! How can a modern language not have a library 
> of containers that let me organise my data?!
>
> I realised that the best and most usable containers are 
> actually the stdcpp containers I was implementing years ago! 
> But the thing that held up that work was that we STILL don't 
> have any way to implement move semantics! There was a SAOC 
> project to implement rvalue references which would open D up to 
> implementing container libraries; but sadly the author just 
> disappeared one day never to be seen again. Nobody else ever 
> moved on that issue.
>
> Walter: It's been too long, there are still no containers, 
> which is embarrassing and stdcpp is still blocked on this. I 
> strongly urge you to drop whatever you are doing and finally 
> implement an rvalue reference so we can *finally *implement 
> move semantics, and with that, we can have a container library 
> worthy of the language (I'll even start by finishing stdcpp 
> which is blocked on that issue).

I long suspected the lack of different containers is because the 
built-in fixed-size array, dynamic array, and associative array 
are sufficient for getting most applications up and running 
quickly for those who are fine with linking in Phobos and 
D-Runtime.
Perhaps in the same way that many folks using Python stick to 
lists and dictionaries for any small program. For folks with C++ 
backgrounds, more containers for performance trade-offs would 
indeed be nice to have to select from (e.g. unordered_map, map, 
etc.).

std.container (as you probably know, but others may not so I'll 
link it here - https://dlang.org/phobos/std_container.html) does 
have a few data structures like std.array as a start (API similar 
to std::vector). I agree the container list could be expanded and 
would benefit greatly from move semantics (i.e. using rvalue 
reference) -- this is probably the one thing I miss from D in C++.

I don't know the history regarding rvalue reference with D, but I 
did find [1][2] useful. Read through the dip and watching the 
talk as we speak.

Curious your thoughts on containers:
1. Should we effectively mirror the cpp containers?
2. Add more specific ones (e.g. std.container.concurrent.array? 
std.container.lockfree, std.container.intrusive)?
3. Add more (e.g. std.graph, std.directedgraph, etc.)?

^ Question above are to help kickstart some of the discussion as 
I hear about rumblings of Phobos 3.

Regarding the API:
I believe there are rumblings of allocators here. Wonder if we 
again take the C++ approach?

e.g. `auto arr = Array!(int, allocatorType)(1,2,3);
// second parameter we specify allocator type/policy/strategy.

I also *think* some proposal is in progress here -- others can 
comment to confirm.


[1] Found your previous dip here. 
https://github.com/dlang/DIPs/blob/725541d69149bc85a9492f7df07360f8e2948bd7/DIPs/DIP1016.md
[2] Andrei's talk 2019 talk: 
https://www.youtube.com/watch?v=aRvu2JGGn6E


More information about the Digitalmars-d mailing list