Possible @property compromise
Rob T
alanb at ucora.com
Tue Jan 29 16:58:16 PST 2013
On Wednesday, 30 January 2013 at 00:25:41 UTC, Jonathan M Davis
wrote:
>
> I believe that two main things are needed:
>
> 1. Make it possible to mark a variable such that you can't do
> anything with it
> that you couldn't do with a property function (e.g. taking its
> address needs
> to be illegal).
>
> 2. Add property rewrites to make it so that stuff like ++ and
> += work.
>
> You'll never get a property function to operate 100% like a
> variable, but you
> _can_ make it so that it's very close.. C# gets away with
> making variables and
> property functions swappable because it do stuff like let you
> take the address
> of a variable or a function. We basically need to do the same
> by restricting
> variables which are properties and improving the rewrites that
> the compile
> does for property functions.
>
> - Jonathan M Davis
I agree partial emulation can work, and I see you've pointed out
that the usage of a property will have to be restricted so that
it can work, but this means you have to mark your naked variables
as @property ahead of time, otherwise you'll discover that you
cannot replace a naked variable with a property without doing
plenty of re-work.
Given that we won't be able to drop in a property without rework
unless preplanned ahead of time, I'm not so sure we'll be gaining
anything new here with specially marked properties, and even if
we could drop them in, I'm still not sure it's a big gain.
I can see some value I suppose if you can mark a naked variable
as @property because you know it will likely be wrapped into a
function call later but don't want to implement the wrappers
immediately, but I don't know if that's something a lot of people
really need or care that much about.
I find the discussion we're having in another thread on the
possibility of using a struct-like implementation for gaining
property-like behaviors much more compelling a change for D
because it extends D with interesting ways to implement variables
and functions that can be used in more generalized situations AND
it solves the property implementation issues too (in similar
"restricted" ways as you've suggested can be done).
See last few posts ...
http://forum.dlang.org/thread/kdukid$stg$1@digitalmars.com
If we can not only implement @property as hoped for, but also get
more expressive language features introduced along with it, then
it may be something worth doing.
--rt
More information about the Digitalmars-d
mailing list