On Sunday, 26 March 2023 at 18:07:03 UTC, ryuukk_ wrote:

``shared`` is even more ugly since everything must be shared afterwards

The limitations of `shared` can be bypassed with a "function" that removes type qualifiers. `return *cast(Unqual!T*) &foo`(example, doesn't work as is for arrays.)

This way `shared` symbols can be used with functions that *cannot* be made compatible with both shared and non-shared.(by cannot the exact reasons seem obscure, it may be that a called function *would* support `shared` parameters but calls a function with the parameter that does not, ime this is painfully apparent with `struct`s' member functions)

Naturally there's the risk of concurrency issues because this isn't the language documentation-recommended way of doing things, but D's library has these problems covered.

Reply via email to