digitalmars.D - Explaining why something isn't safe
- Steven Schveighoffer (46/46) Aug 16 2021 This just came up in a discussion, and I've thought about this in the
- Adam D Ruppe (6/8) Aug 16 2021 Forum threads are ephemeral. Add to bugzilla plz. Then it will
- bauss (5/13) Aug 16 2021 Damn 4 years... I think it would be a really nice addition.
- H. S. Teoh (8/23) Aug 16 2021 I've been mostly ignoring @safe, and this is one of the reasons: it's
- Steven Schveighoffer (3/13) Aug 16 2021 Thanks, added my 2 cents there.
- Steven Schveighoffer (6/10) Aug 16 2021 MoonlightSentinel has a [draft
This just came up in a discussion, and I've thought about this in the past, so it might have already come up. But often times, you have some code that you think will be ` safe`, but it gets inferred to be ` system`. However, you can't tell where the safety violation is, so you have this process where you make a clone of all the code, marking everything as ` safe`, at all layers (even if they are in other projects) until you find the culprit. As was pointed out in the discussion, the compiler knows where it decided to infer ` system`, would it be possible to force it to tell you that? An example: ```d void foo() {} auto bar(int x) { foo(); return x * 2; } void main() safe { auto a = bar(5); } ``` The result is: ``` Error: ` safe` function `D main` cannot call ` system` function `bar` ``` Whereas it would be nice to see the error: ``` Error: `bar` was inferred ` system` because it calls ` system` function `foo` ``` Which should go all the way down to where the actual safety problem is. This is a simple example that's easy to diagnose, but often times you have a stack of template functions, and all you get is that the top layer function is ` system`, instead of finding where it did the unexpected inference at the bottom of the stack (or you forgot to mark a ` safe` non-inferred function). This happens with stuff like `format` or `writeln` which is composed of dozens of layers of templates, and it's hard to find out which one is the one doing the unexpected inference. I have run across sometimes the inference giving up as well, which is a separate problem, but also useful to diagnose. It would be nice to have a pragma (or maybe this can be a compiler diagnostic switch?) which shows the stack of inference that caused the safety error. Or maybe it should just always be shown? After all, it is an error, so no reason not to be fully descriptive. -Steve
Aug 16 2021
On Monday, 16 August 2021 at 12:51:26 UTC, Steven Schveighoffer wrote:This just came up in a discussion, and I've thought about this in the past, so it might have already come up.Forum threads are ephemeral. Add to bugzilla plz. Then it will never be forgotten.... https://issues.dlang.org/show_bug.cgi?id=17374 .... or acted upon. 4 years and counting.
Aug 16 2021
On Monday, 16 August 2021 at 13:05:48 UTC, Adam D Ruppe wrote:On Monday, 16 August 2021 at 12:51:26 UTC, Steven Schveighoffer wrote:Damn 4 years... I think it would be a really nice addition. Especially for people who aren't used to safe and I can imagine a lot of people just skip using it because the hassle isn't worth it.This just came up in a discussion, and I've thought about this in the past, so it might have already come up.Forum threads are ephemeral. Add to bugzilla plz. Then it will never be forgotten.... https://issues.dlang.org/show_bug.cgi?id=17374 .... or acted upon. 4 years and counting.
Aug 16 2021
On Mon, Aug 16, 2021 at 01:29:05PM +0000, bauss via Digitalmars-d wrote:On Monday, 16 August 2021 at 13:05:48 UTC, Adam D Ruppe wrote:I've been mostly ignoring safe, and this is one of the reasons: it's just too annoying to use sometimes. With long UFCS chains the current error messages just aren't helpful in finding the problem. If this was fixed I'd be more inclined to use safe. T -- Not all rumours are as misleading as this one.On Monday, 16 August 2021 at 12:51:26 UTC, Steven Schveighoffer wrote:Damn 4 years... I think it would be a really nice addition. Especially for people who aren't used to safe and I can imagine a lot of people just skip using it because the hassle isn't worth it.This just came up in a discussion, and I've thought about this in the past, so it might have already come up.Forum threads are ephemeral. Add to bugzilla plz. Then it will never be forgotten.... https://issues.dlang.org/show_bug.cgi?id=17374 .... or acted upon. 4 years and counting.
Aug 16 2021
On 8/16/21 9:05 AM, Adam D Ruppe wrote:On Monday, 16 August 2021 at 12:51:26 UTC, Steven Schveighoffer wrote:Thanks, added my 2 cents there. -SteveThis just came up in a discussion, and I've thought about this in the past, so it might have already come up.Forum threads are ephemeral. Add to bugzilla plz. Then it will never be forgotten.... https://issues.dlang.org/show_bug.cgi?id=17374 .... or acted upon. 4 years and counting.
Aug 16 2021
On 8/16/21 8:51 AM, Steven Schveighoffer wrote:It would be nice to have a pragma (or maybe this can be a compiler diagnostic switch?) which shows the stack of inference that caused the safety error. Or maybe it should just always be shown? After all, it is an error, so no reason not to be fully descriptive.MoonlightSentinel has a [draft PR](https://github.com/dlang/dmd/pull/12383) that seems to cover this! Any chance we can get this finalized/merged? This would be an *awesome* addition to the compiler. -Steve
Aug 16 2021