all OS functions should be "nothrow @trusted @nogc"

Timon Gehr via Digitalmars-d digitalmars-d at puremagic.com
Tue Jul 25 17:45:01 PDT 2017


On 26.07.2017 02:35, Steven Schveighoffer wrote:
> On 7/25/17 5:23 PM, Moritz Maxeiner wrote:
>> On Tuesday, 25 July 2017 at 20:16:41 UTC, Steven Schveighoffer wrote:
>>> The behavior is defined. It will crash with a segfault.
>>
>> In C land that behaviour is a platform (hardware/OS/libc) specific 
>> implementation detail (it's what you generally expect to happen, but 
>> AFAIK it isn't defined in official ISO/IEC C).
> 
> In cases where C does not crash when dereferencing null, then D would 
> not crash when dereferencing null. D depends on the hardware doing this 
> (Walter has said so many times), so if C doesn't do it, then D won't. So 
> those systems would have to be treated specially, and you'd have to work 
> out your own home-grown mechanism for memory safety.

What Moritz is saying is that the following implementation of fclose is 
correct according to the C standard:

int fclose(FILE *stream){
     if(stream == NULL){
         go_wild_and_corrupt_all_the_memory();
     }else{
         actually_close_the_file(stream);
     }
}


More information about the Digitalmars-d mailing list