digitalmars.D - Are null refs intentionally allowed?
- Dukc (19/19) Jul 16 2022 This compiles and runs just fine, printing what you'd except:
- Tejas (7/26) Jul 16 2022 It doens't compile when I run it on run.dlang.io, erroring out
- Dukc (2/8) Jul 16 2022 Oh sorry, it needs `-preview=dip1000`
- Paul Backus (3/19) Jul 16 2022 In general, dereferencing `null` has defined behavior and is
This compiles and runs just fine, printing what you'd except:
```D
safe void main()
{
import std.stdio;
int* p;
isNull(*p).writeln;
p = new int(5);
isNull(*p).writeln;
}
safe bool isNull(ref int x){return &x is null;}
```
The question is, is this intentional? I'm writing "DIP1000:
Memory Safety in a Modern System Programming Language Pt. 2" and
currently I've written that this is allowed, even when it's not
in C++.
But there are still two possibilities: either this is okay by
design, or works by accident but really disallowed. Which is the
case?
Jul 16 2022
On Saturday, 16 July 2022 at 12:33:57 UTC, Dukc wrote:
This compiles and runs just fine, printing what you'd except:
```D
safe void main()
{
import std.stdio;
int* p;
isNull(*p).writeln;
p = new int(5);
isNull(*p).writeln;
}
safe bool isNull(ref int x){return &x is null;}
```
The question is, is this intentional? I'm writing "DIP1000:
Memory Safety in a Modern System Programming Language Pt. 2"
and currently I've written that this is allowed, even when it's
not in C++.
But there are still two possibilities: either this is okay by
design, or works by accident but really disallowed. Which is
the case?
It doens't compile when I run it on run.dlang.io, erroring out
with:
```
onlineapp.d(11): Error: cannot take address of parameter `x` in
` safe` function `isNull`
```
Jul 16 2022
On Saturday, 16 July 2022 at 12:40:06 UTC, Tejas wrote:It doens't compile when I run it on run.dlang.io, erroring out with: ``` onlineapp.d(11): Error: cannot take address of parameter `x` in ` safe` function `isNull` ```Oh sorry, it needs `-preview=dip1000`
Jul 16 2022
On Saturday, 16 July 2022 at 12:33:57 UTC, Dukc wrote:
This compiles and runs just fine, printing what you'd except:
```D
safe void main()
{
import std.stdio;
int* p;
isNull(*p).writeln;
p = new int(5);
isNull(*p).writeln;
}
safe bool isNull(ref int x){return &x is null;}
```
The question is, is this intentional? I'm writing "DIP1000:
Memory Safety in a Modern System Programming Language Pt. 2"
and currently I've written that this is allowed, even when it's
not in C++.
In general, dereferencing `null` has defined behavior and is
allowed in ` safe` code. So I think this example is fine.
Jul 16 2022









Dukc <ajieskola gmail.com> 