Disallow null references in safe code?
Meta
jared771 at gmail.com
Tue Feb 4 08:00:19 PST 2014
On Tuesday, 4 February 2014 at 14:54:35 UTC, Adam D. Ruppe wrote:
> On Tuesday, 4 February 2014 at 14:34:49 UTC, Idan Arye wrote:
>> Probably because `Nullable!` suggests that's it's a library
>> solution - and it isn't.
>
> It should be. The way I'd do it is
>
> Object o; // not null
> @nullable Object o; // like we have today
>
> BUT, user code would never use that. Instead, we'd have:
>
> struct Nullable(T) if(__traits(compiles, (@nullable T) {}) {
> @nullable T;
> }
>
> // and a corresponding one so stuff like Nullable!int works
>
>
> This gives us:
>
> * Implementation help - no binary cost for Nullable!Object
> since it just uses null directly instead of a bool isNull field
> (the optimizer also knows this)
>
> * Consistency with all other types. Nullable!int works,
> Nullable!Object can be passed to a template, inspected, etc.
> without new traits for isNullable and everything.
>
> * Library functionality so we can also make other types that do
> the same kind of thing
>
>
> Then, if we did the Type? syntax, it would just be rewritten
> into Nullable!Type. Nullable's definition would probably be in
> the auto-imported object.d so it always works.
I'm interested in how this might fit in with your recent
discovery in this thread:
http://forum.dlang.org/thread/majnjuhxdefjuqjlpbmv@forum.dlang.org?page=1
More information about the Digitalmars-d
mailing list