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

Reply via email to