Random thought: Alternative stuct

Nick Sabalausky (Abscissa) SeeWebsiteToContactMe at semitwist.com
Tue Sep 4 03:38:41 UTC 2018


We have classes and structs:

Classes:
- Default Storage: GC Heap
- Indirection Overhead: Yes
- Semantics: Reference
- Passed By: Copying the Data's Address

Structs:
- Default Storage: Stack
- Indirection Overhead: No
- Semantics: Value
- Passed By: Copying the Data (except where the compiler can determine 
it can safely and more efficiently pass by reference...at least, IIUC)

But we seem to have a lot of need for stuff in-between: emplace for 
classes, @disable this and move/moveEmplace for structs.

Just tossing this out there: What if there was a third version, an 
alternate to struct that:
- Prohibited implicit copying (perhaps unless the compiler knew the 
original was never used again?)
- Was always passed by moving (except where the compiler can determine 
it can safely and more efficiently pass by reference)?
- And, after passing it to a function, it would automatically be moved 
back to the caller (unless compiler can determine it doesn't have to 
bother).

Ie:
Move-Structs:
- Default Storage: Stack
- Indirection Overhead: No
- Semantics: Reference-like
- Passed By: Moving the Data (except where compiler...blah blah blah)

IIUC, this would give it the *effect* of reference semantics, but 
without the indirection (and vtable) overhead, and would allow it to 
perform RAII cleanup in its dtor when it goes out of scope without ever 
needing reference counting.

Is this nothing more than reinventing the future "struct with copy 
constructor and @disable-ed default constructor...and...maybe some other 
necessary part of the idiom I'm overlooking"?

Is it really just (badly) re-inventing some other XYZ except for 
differences UVW?

Or would this be a horrible thing to exist?

Any tweaks that would change it from a horrible idea to a fantastic one?

Or is it all just total nonsense?


More information about the Digitalmars-d mailing list