> On Apr 16, 2019, at 6:10 PM, Sven Barth via fpc-devel 
> <[email protected]> wrote:
> 
> Mutating is also not the solution. Consider this:
> 
> === code begin ===
> 
> operator + (aLeft, aRight: TSomeClass): TSomeClass;
> begin
>   aLeft.DoSomething(aRight);
>   Result := aLeft;
> end;
> 
> var
>   a, b, c: TSomeClass;
> begin
>   a := TSomeClass.Create;
>   b := TSomeClass.Create;
>   c := a + b;
>   a.Free;
>   b.Free;
>   c.Free; (* boom! *)
> end.
> 
> === code end ===
> 
> A user does not necessarily know what an operator overload does.
> 
> For records and TP style objects this is not a problem, because they are 
> copied, but for classes only their pointer is copied (and this either leads 
> to the above problem or memory leaks if temps are involved).
> 
> Regards,
> Sven

I see why that could be a problem but aren’t users reasonable for not doing 
dangerous things in a language like Pascal with low-level memory access? They 
can already do this anyways via operator functions so it’s already too late. :) 
If you want a language that prioritizes safety then Pascal is already a bad 
choice so I think most people know how to be safe.

What this means is that’s it harder for more advanced programmers to do things 
like add + and := operator to collection classes like arrays and that’s pretty 
unfortunate. At this point it’s already been smuggled in via operator functions 
so I think the team should reconsider allowing them for classes.

Regards,
        Ryan Joseph

_______________________________________________
fpc-devel maillist  -  [email protected]
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel

Reply via email to