Is @safe still a work-in-progress?

Steven Schveighoffer schveiguy at gmail.com
Fri Aug 17 17:50:44 UTC 2018


On 8/17/18 1:26 PM, jmh530 wrote:
> On Friday, 17 August 2018 at 14:26:07 UTC, H. S. Teoh wrote:
>> [...]
>>
>> And that is exactly why the whole implementation of @safe is currently 
>> rather laughable. By blacklisting rather than whitelisting, we 
>> basically open the door wide open to loopholes -- anything that we 
>> haven't thought of yet could potentially be a @safe-breaking 
>> combination, and we wouldn't know until somebody discovers and reports 
>> it.
>>
>> Sadly, it seems there is little interest in reimplementing @safe to 
>> use whitelisting instead of blacklisting.
>>
>>
>> T
> 
> Fundamentally, I see it as a good idea. Walter has talked about how 
> important memory safety is for D. People thinking their @safe code is 
> safe is a big problem when that turns out to not be the case. Imagine 
> the black eye D would have if a company was hacked because of something 
> like this?

This will always be a possibility thanks to @trusted.

> IMO, the problem is that you can't just replace @safe as it is now. You 
> could introduce something like @whitelist or @safewhitelist and begin 
> implementing it, but it would probably be some time before it could 
> replace @safe. Like when @whitelist is only breaking unsafe code.

I have to say, I don't see how this all helps.

In theory, black-listing and white-listing will get you to the same 
position. Mechanisms to get or use pointers aren't really being added to 
the language any more, so the set of "things" to "list" either black or 
white is finite.

In this thread, we are talking about something that should have been 
black-listed LONG ago, but was not because it was "too useful" (i.e. 
would break too much code). If @safe code was white-listed, nobody would 
use it until it was finished, so it would be theoretical anyway.

Nobody wants a feature that is @safe, but not useful.

However, a bigger problem is that we have a bug that is "fixed" (slicing 
static arrays) but only if you use a feature that doesn't work correctly 
(dip1000). Why? I think the bug should be reopened until dip1000 is the 
default, or it simply gets fixed (i.e. without requiring dip1000).

-Steve


More information about the Digitalmars-d mailing list