On DIP 23
Robert
jfanatiker at gmx.at
Wed Feb 6 15:01:54 PST 2013
Oops. I kinda missed the complete discussion about this. I am sure
someone else already wrote something similar, so just ignore the post.
Best regards,
Robert
On Wed, 2013-02-06 at 23:10 +0100, Robert wrote:
> Well first what I like about it: The approach function symbols are
> handled, it is a pretty clear concept:
>
> void f() {
> }
>
> f;
>
> f is a function, you can take the address of it and call it and that's
> it. So if you just write it down, it makes sense that it gets called.
> Not so for delegates, function objects, ... Sounds sane to me, I like
> it.
>
> About properties:
>
> In short, I died a little reading it.
>
> I know we have UFCS, but @properties are meant to emulate a field, so
> the semantics should be as close to a field as possible. Ideally,
> identical.
>
> Especially the part about module level properties made me crazy:
> @property double fun(int x, double y) { assert(x == 42 && y == 43);
> return y; }
> 42.fun = 43;
>
> reads to me: The integer 42 has a property called fun, which gets
> assigned 43???
>
> If we special case properties, we might as well disallow UFCS for them,
> which makes sense, because you can not define a field external to an
> object either.
>
> So the proposal for module level properties, would be right exactly the
> other way round (emulating global variables):
> private int myCoolSetting_;
> @property int myCoolSetting() {
> return myCoolSetting_;
> }
> @property void myCoolSetting(int setting) {
> enforce(setting>0 && setting<10, "Invalid setting!");
> myCoolSetting_=setting;
> }
>
> myCoolSetting=8; // Ok.
>
> That is what properties are all about.
>
> The part, about taking the address of a property, is fine as long as we
> allow fields to be declared with @property as I already suggested, with
> the following semantics:
>
> @property int a;
>
> would be lowered to:
>
> private int __a;
>
> @property void a(int a_) {
> __a=a_;
> }
>
> @property int a() {
> return __a;
> }
>
> in order to ensure that @property declared fields and properties
> declared as functions do really have the same semantics.
>
> If you don't think about properties as fields, than I understand Walters
> suggestion about removing @property completely and we could as well do
> it.
>
> UFCS with properties, makes little to no sense. Because well the name
> already suggests: "Uniform Function Calling Syntax", properties are not
> about calling functions. Allowing UFCS would offer the possibility of
> adding some kind of dynamic properties/fields to an object, but the code
> samples with integers and especially the problem with module level
> properties suggests that this causes more problems than it is worth.
>
> properties -> no UFCS and we have a sane world!
>
> Best regards,
>
> Robert
>
> P.S.: Things like
> int a = 4.2.truncated;
>
> do make sense, but UFCS and optional parentheses would do the trick too,
> so no need to abuse properties there.
>
>
>
More information about the Digitalmars-d
mailing list