important proposal: scope keyword for class members

John Simon zildjohn01 at gmail.com
Mon Mar 9 12:10:30 PDT 2009


Yigal Chripun Wrote:

> On 09/03/2009 00:12, John Simon wrote:
> > Sean Kelly Wrote:
> >
> >> John Simon wrote:
> >>> Sean Kelly Wrote:
> >>>> Oh, I should mention that I'm not sure how the compiler would
> >>>> handle this scenario:
> >>>>
> >>>> class A { byte[16]; } class B { byte[32]; } class C { this(
> >>>> bool b ) { if( b ) o = new A; else    o = new B; } scope Object
> >>>> o; }
> >>>>
> >>>> If I had to guess I'd say that the compiler would either
> >>>> reserve the max size necessary to store both A or B, or that in
> >>>> non-trivial cases it just wouldn't bother with reserving space
> >>>> for o at all.
> >>> Wrong. The Object is constructed when it comes into scope, and
> >>> destructed when it leaves scope. Classes can't have an
> >>> 'opAssign', instead the reference is reassigned. Since the
> >>> reference is invariant/immutable here, this throws a compile time
> >>> error.
> >> I'm talking about a proposed new feature, not an existing one.
> >> Please take this example in context.
> >
> > Sorry man, I thought you were disputing with me. My apologies. Let me
> > rephrase.
> >
> > I believe that 'scope' declared objects shouldn't allow an assignment
> > of a derived type. Reasoning being that there wouldn't be enough
> > stack space allocated for it.
> >
> > So in your example above, Object could only recieve a 'new Object',
> > and nothing further down in the hierarchy.
> 
> how can the compiler enforce such a rule?
> 
> class A { byte[16]; }
> class B : A { byte[32]; }
> 
> class C {
>     this(A a) { obj = a; }
>     scope A obj;
> }

My proposal was to make scope object construction and destruction automatic and implicit, meaning any assignment would be illegal, besides an inline construction by the definition of the same type as the scope variable.

However even if that restriction wasn't there, the runtime could restrict it the same way it does dynamic casting. I see no point to doing it this second way though.



More information about the Digitalmars-d mailing list