Possible @property compromise

Zach the Mystic reachBUTMINUSTHISzach at gOOGLYmail.com
Fri Feb 1 07:25:55 PST 2013


On Friday, 1 February 2013 at 06:52:32 UTC, Zach the Mystic wrote:
>> FYI, nested structs in functions (the ones you want to use as 
>> a model) have an extra hidden reference pointer back to the 
>> stack frame data.  That is how they can access the local 
>> variables of the function.
>
> Yeah, see, the problem is, if empty structs, which require no 
> "this" pointer to themselves, are allowed access to their 
> parent scope, it suggests that all structs should do the same. 
> Now we have one good syntax for these things : "foo struct { 
> ... }", which could be fun to use in other places too (where 
> you want a single instance of a struct). But if these empty 
> structs are fundamentally different from regular structs, it 
> will force a situation where the Highlander syntax must be used 
> only on these "special" structs, to make sure the compiler 
> knows the difference. It's a problem, to be sure.

What I mean is, that the annoying aspect of making struct-nested 
structs act like their function-nested struct counterparts is 
that the part which is most difficult to implement will actually 
be the part people use the least. The main need is for data-less 
struct-nested structs to have access to their parent's scope, but 
implementing struct-nested structs which actually hold data will 
be more annoying, but it will be necessary for language 
consistency. But I though of a rather crude temporary fix. Simply 
disallow non-static struct-nested structs which actually hold 
data of their own. With this error built-in, all programmers can 
now tag all of their struct-nested structs with "static" until 
their program compiles once more. Now the language is clean and 
ready for the rather easy addition of data-less nested structs, 
and the slightly trickier data-ful struct-nested structs to be 
implemented when the developers get the chance.

All structs now will behave the same way, freeing up the 
Highlander syntax for use on *any* struct, data-less or data-ful.


More information about the Digitalmars-d mailing list