<div dir="ltr"><div class="gmail_extra"><br><div class="gmail_quote">2016-07-28 17:03 GMT+02:00 Stefan Glienke <span dir="ltr"><<a href="mailto:sglienke@dsharp.org" target="_blank">sglienke@dsharp.org</a>></span>:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div id="gmail-:1x8" class="gmail-a3s gmail-aXjCH gmail-m1563207f6bfc5aa5">I agree with Michael here. While in Spring4D our nullables have the implicit<br>
operator in both directions in retrospective I think it's not a good idea and<br>
the nullable<x> -> x conversion should be explicit (with the possibility to<br>
raise an explicit exception - not an AV) and for sure not be faked by the deref<br>
operator because a nullable is not a reference type in my book even if it can be<br>
null (err nil?) That btw leads to another question - is the "null" state equal<br>
to nil - or is it something different. So a nullable is kind of both things, it<br>
can be nil/null but if not it contains the value but does not point to it thus<br>
cannot/should not be deferenced. C# for example requires a hard cast or the call<br>
to .Value to get the underlying value from a nullable with the possibility to<br>
throw a InvalidOperationException if it has no value.<br></div></blockquote><div><br></div><div>Remember that we working not in .NET environment, Pascal has assembler, pointers and other cool stuff, and I think that we need different approach adjusted to highly optimized needs. Explicit conversion still exist. Default field is blazing fast solution and it covers many needs (not nilable types only). I don't want 1:1 copy from C# -,-</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div id="gmail-:1x8" class="gmail-a3s gmail-aXjCH gmail-m1563207f6bfc5aa5">
<br>
FWIW if you make it a new language construct I actually would prefer "nullable<br>
of <type>" which is consistent with "array of <type>" or "set of <type>".</div></blockquote></div><div class="gmail_extra"><br></div>aside from the syntax I see nilable types as new type kind called: proxy. Same family as smart pointers and ARC objects, that means new unified TTypeData entry:</div><div class="gmail_extra"><br></div><div class="gmail_extra"><div class="gmail_extra">            tkProxy:</div><div class="gmail_extra">              (ProxyType: TProxyType;</div><div class="gmail_extra">               ProxyOwnerType: TypeInfoPtr; // maybe ProxyContainerType is better name? It points to type information of record</div><div class="gmail_extra">               DefaultFieldOffset: PtrUInt;</div><div class="gmail_extra">               DefaultFieldType: TypeInfoPtr); </div><div class="gmail_extra"><br></div><div class="gmail_extra">where</div><div class="gmail_extra"><br></div><div class="gmail_extra">TProxyType = (</div><div class="gmail_extra">  ptCustom, // proxy object defined by user, declared as var x: TMySmartPtr<Pointer>;</div><div class="gmail_extra">  ptNilable, // declared as var x: nilable/nullable Integer</div><div class="gmail_extra">  ptStrong, // declared as var x: strong TObject;</div><div class="gmail_extra">  ptWeak, // declared as var x: weak TObject;</div><div class="gmail_extra">  ptUnretained); // declared as var x: unretained TObject;</div><div><br></div>-- <br><div class="gmail_signature"><div dir="ltr"><div>Best regards,<br>Maciej Izak</div></div></div>
</div></div>