On Thu, 28 Jul 2016, Maciej Izak wrote:
2016-07-28 14:59 GMT+02:00 Michael Van Canneyt <mich...@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);
begin
X:=1;
end;
Var
A : TNullable<Integer>;
begin
SomeTest(A^);
end.
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 :)
Michael.
_______________________________________________
fpc-devel maillist - fpc-devel@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel