Scientific computing and parallel computing C++23/C++26

Petar Petar
Thu Jan 13 22:11:51 UTC 2022


On Thursday, 13 January 2022 at 21:44:13 UTC, H. S. Teoh wrote:
> On Thu, Jan 13, 2022 at 09:13:11PM +0000, jmh530 via 
> Digitalmars-d wrote:
>> On Thursday, 13 January 2022 at 20:58:25 UTC, H. S. Teoh wrote:
> [...]
>> > [...]
> [...]
>> Could it be made @safe when used with const/immutable 
>> variables?
>
> Apparently not, as Petar already pointed out.
>
> But even besides access to non-shared local variables, there's 
> also the long-standing issue that a function that receives a 
> delegate cannot have stricter attributes than the delegate 
> itself, i.e.:
>
> 	// NG: @safe function fun cannot call @system delegate dg.
> 	void fun(scope void delegate() @system dg) @safe {
> 		dg();
> 	}
>
> 	// You have to do this instead (i.e., delegate must be
> 	// restricted to be @safe):
> 	void fun(scope void delegate() @safe dg) @safe {
> 		dg();
> 	}
>
> There's currently no way to express that the @safety of fun 
> depends solely on the @safety of dg, such that if you pass in a 
> @safe delegate, then fun should be regarded as @safe and 
> allowed to be called from @safe code.
>
> This is a problem because .parallel is implemented using 
> .opApply, which takes a delegate argument. It accepts an 
> unqualified delegate in order to be usable with both @system 
> and @safe delegates. But this unfortunately means it must be 
> @system, and therefore uncallable from @safe code.
>
> Various proposals to fix this has been brought up before, but 
> Walter either doesn't fully understand the issue, or else has 
> some reasons he's not happy with the proposed solutions.  In 
> fact he has proposed something that goes the *opposite* way to 
> what should be done in order to address this problem.  Since 
> both were shot down in the forum discussions, we're stuck at 
> the current stalemate. :-(
>
>
> T

There are two DIPs that aim to address the attribute propagation 
problem:

* [Argument dependent attributes (ADAs)][1] by @Geod24: 
https://github.com/Geod24/DIPs/blob/adas/DIPs/DIP4242.md

* [Attributes for Higher-Order Functions][2] by @Bolpat: 
https://github.com/Bolpat/DIPs/blob/AttributesHOF/DIPs/DIP-1NN4-QFS.md

[1]: https://github.com/dlang/DIPs/pull/198
[2]: https://github.com/dlang/DIPs/pull/199


More information about the Digitalmars-d mailing list