Thread overview
CTFE can't replace @properties
October 08
Reason being that it doesn't support binary operators nor unary operators, by using the two functions. It a bad idea to allow ctfe to implement them implicitly as that could lead to unintentional design by the programmer.


It would be better to implement properties properly and to deprecate the @properties attribute.

-Alex
October 08
On Thu, Oct 08, 2020 at 03:21:57PM +0000, 12345swordy via Digitalmars-d wrote:
> Reason being that it doesn't support binary operators nor unary operators, by using the two functions. It a bad idea to allow ctfe to implement them implicitly as that could lead to unintentional design by the programmer.
> 
> It would be better to implement properties properly and to deprecate the @properties attribute.
[...]

I'm having a hard time understanding what you're trying to say. Could you post some code that illustrates the problem?


T

-- 
He who does not appreciate the beauty of language is not worthy to bemoan its flaws.
October 08
On Thursday, 8 October 2020 at 16:11:02 UTC, H. S. Teoh wrote:
> On Thu, Oct 08, 2020 at 03:21:57PM +0000, 12345swordy via Digitalmars-d wrote:
>> Reason being that it doesn't support binary operators nor unary operators, by using the two functions. It a bad idea to allow ctfe to implement them implicitly as that could lead to unintentional design by the programmer.
>> 
>> It would be better to implement properties properly and to deprecate the @properties attribute.
> [...]
>
> I'm having a hard time understanding what you're trying to say. Could you post some code that illustrates the problem?
>
>
> T

int _x;
public
int x () { return _x; }
int x (int x) { this._x = x; }

x += 2; // you can't do this.
x++ //nor this.
October 08
On Thu, Oct 08, 2020 at 04:47:07PM +0000, 12345swordy via Digitalmars-d wrote:
> On Thursday, 8 October 2020 at 16:11:02 UTC, H. S. Teoh wrote:
> > On Thu, Oct 08, 2020 at 03:21:57PM +0000, 12345swordy via Digitalmars-d wrote:
> > > Reason being that it doesn't support binary operators nor unary operators, by using the two functions. It a bad idea to allow ctfe to implement them implicitly as that could lead to unintentional design by the programmer.
> > > 
> > > It would be better to implement properties properly and to deprecate the @properties attribute.
> > [...]
> > 
> > I'm having a hard time understanding what you're trying to say. Could you post some code that illustrates the problem?
[...]
> int _x;
> public
> int x () { return _x; }
> int x (int x) { this._x = x; }
> 
> x += 2; // you can't do this.
> x++ //nor this.

Operator overloading is only supported by the opXxx member functions. This is by design.  But I don't understand what this has to do with CTFE?


T

-- 
We've all heard that a million monkeys banging on a million typewriters will eventually reproduce the entire works of Shakespeare.  Now, thanks to the Internet, we know this is not true. -- Robert Wilensk
October 08
On Thursday, 8 October 2020 at 19:45:15 UTC, H. S. Teoh wrote:
> On Thu, Oct 08, 2020 at 04:47:07PM +0000, 12345swordy via Digitalmars-d wrote:
>> On Thursday, 8 October 2020 at 16:11:02 UTC, H. S. Teoh wrote:
>> > On Thu, Oct 08, 2020 at 03:21:57PM +0000, 12345swordy via Digitalmars-d wrote:
>> > > [...]
>> > [...]
>> > 
>> > I'm having a hard time understanding what you're trying to say. Could you post some code that illustrates the problem?
> [...]
>> int _x;
>> public
>> int x () { return _x; }
>> int x (int x) { this._x = x; }
>> 
>> x += 2; // you can't do this.
>> x++ //nor this.
>
> Operator overloading is only supported by the opXxx member functions. This is by design.  But I don't understand what this has to do with CTFE?
>
>
> T

It turns out that it has nothing to do with the CTFE. It simply a limitation that @propertiy is supposed to address.
October 08
On Thu, Oct 08, 2020 at 07:47:49PM +0000, 12345swordy via Digitalmars-d wrote:
> On Thursday, 8 October 2020 at 19:45:15 UTC, H. S. Teoh wrote:
> > On Thu, Oct 08, 2020 at 04:47:07PM +0000, 12345swordy via Digitalmars-d wrote:
[...]
> > > int _x;
> > > public
> > > int x () { return _x; }
> > > int x (int x) { this._x = x; }
> > > 
> > > x += 2; // you can't do this.
> > > x++ //nor this.
> > 
> > Operator overloading is only supported by the opXxx member functions.  This is by design.  But I don't understand what this has to do with CTFE?
[...]
> It turns out that it has nothing to do with the CTFE. It simply a limitation that @propertiy is supposed to address.

Ah, now I understand.

Yeah, @property is poorly-implemented, and generally a mess beyond the most rudimentary of use cases. I usually don't bother with it except where I absolutely have to.

Though if you really care about it, filing an enhancement request might be a way of documenting this particular use case, in case we ever revisit this feature again.


T

-- 
Guns don't kill people. Bullets do.
October 09
https://issues.dlang.org/show_bug.cgi?id=8006

https://issues.dlang.org/show_bug.cgi?id=15231