Graeme Geldenhuys wrote:
Martin Friebe wrote:
And if I understand the changes where mad, because this "feature" was
broken before:

To quote myself, even though I know one shouldn't. ;-)

 "I know they were introduced for the better."

I was not arguing the point that those changes should not have been
made. I was simply stating that other projects code was broken due to
behaviour changes made in FPC. This was my counter argument to Vincent's
reply that it would break existing code.
I know you said that, but I tried to highlight something that imho is missing in this statement.

The change with "properties as var param" only broke existing code, if this existing code was already broken. The compiler just compiled the broken code before. Nor the compiler rejects the broken code.

To explain:
- A property has always been defined as beeing equal in treatment to the result of a function. This is the purpose of a property. If you do not want to be able to replace the property getter/setter by a function/procedure => you can just publish the variable.
- a function result was never allowed as "var param" (just not possible)
=> In other words being allowed to do the impossible (defeating the purpose of a property), means being allowed to compile broken code => which must be fixed, even if it breaks projects that relied on it. But those projects should anyway never have compiled.


procedure a;
const
i: integer = 1;

is a documented, working feature, there is nothing broken about it.

----
Anyway here another view on the topic:

1) I think the feature in itself is useful and should exist
2) the current syntax of the feature is not very self-explaining. Reading code with this feature is misleading

If at all something should be done about, imho it was introducing an alternative, more readable syntax, but keeping the old (because it is a documented feature / maybe add a compiler hint for the old syntax)

People who care about the read ability of their code could the write a more intuitive form.

Maybe

procedure a;
var
 x: integer = 1; static;

or if there is, or is planned, whatever syntax there is or will be for class members of this kind


Best Regards
Martin



_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to