Auto syntax revisited

Fredrik Olsson peylow at gmail.com
Tue Feb 21 10:12:15 PST 2006


Ivan Senji skrev:
> I think I agree (although not 100% certain yet)
> Think it would be cool if local men't destruct at end of scope no mater 
> is the actual instance created in this function or not.
> 
> Stack objects could still be created something like:
> auto foo = Foo(); or maybe
> auto baz = stack Foo(); or something else
> 
> I somehow feel these features might complicate the language a lot.

I better write a summary :), with this my first proposal we really just 
have four cases:

// Object allways on heap, created from class, gc destroys whenever,
// Object can be passed out of scope
Foo foo = new Foo();

// Object allways on heap, created from another function,
// gc destroys whenever, object can be passed out of scope
Foo foo = Bar();

// Object could be on stack, created from class, scope exit destroys
// imidiately, can not be passed out of scope
Foo foo = local new Foo();

// Object allways on heap, created from another function, scope exit
// destroys imidiately, can not be passed out of scope.
Foo foo = local Bar();

And then auto could be used instead of Foo to declare the type, but that 
is beyond this discussion, and implied by auto _only_ meaning implicit 
type and nothing else.

Since objects that are potentially on the stack can not pass out of 
scope, and if sent as argument to other function they are just pointers 
anyway, there should be no requirements for changing any ABI.

Only addition is that local object on heap must be destroyed in the 
process of unwinding an exception. So any scope that uses local objects 
on heap must have an implicit try {} finally {} for releasing objects.

// Fredrik Olsson



More information about the Digitalmars-d mailing list