[fpc-devel] "Default" discussion for SmartPointers etc
Michael Van Canneyt
michael at freepascal.org
Thu Jul 28 16:37:37 CEST 2016
On Thu, 28 Jul 2016, Maciej Izak wrote:
> 2016-07-28 14:59 GMT+02:00 Michael Van Canneyt <michael at freepascal.org>:
>> Because with the exception of the ^ operator, I see no need for any special
>> constructions to achieve a "nullable type", except maybe some implicit
>> constructor/destructor ?
> procedure with var parameter is special case, we need somehow to perform
> backward compatibility and strong typing is the must. In the fact
> TNullable<Integer> is proxy type to field of ^Integer type. ^ operator
> exist to make life easier in comparison to C# implementation.
> "default field" is not necessary for nullable types but is extremely useful
> addition, more options and optimization for end user.
Can you please explain this, because as far as I can see from your
explanation, all that it does is make 2 assignment operators and maybe a
typecast operator unnecessary ?
(in which case it falls under the category syntactic sugar, like "for ..
in", which is fine for me)
Are there additional benefits I have missed ?
> We can exclude
> completely possibility of usage ^ operator for nullable types (^ for
> nullable type is just my invention). In that case calling functions like
> test1 will be impossible. Just pure copy of Nullable types from C# -,- . So
> you are right - ascetic version of nullable type need only management
> operators (aka implicit constructor/destructor). Presented nullable type is
> not "pure" copy of C# implementation, presented above implementation has
> Pascal spirit and optimizations impossible to achieve in other languages.
Well, I think this addition is not necessary, maybe even dangerous.
I can live with the 'ascetic' version :-)
Since the following:
Procedure SomeTest(Var X : Integer);
A : TNullable<Integer>;
Will lead to a crash on a null value, I don't think this is a very good idea to add.
We should protect users from crashes, not expose them to it :-)
So, currently balance for me, if I understood everything correctly:
[+] Implicit constructor/destructor.
Good for simulating 'managed' types.
[+] Default field (even if it is only syntactic sugar)
[-] ^ dereference magic: a no-no :)
More information about the fpc-devel