On 2013-10-09 14:06:51 +0000, Johannes Pfau <nos...@example.com> said:

Am Wed, 9 Oct 2013 09:38:12 -0400
schrieb Michel Fortin <michel.for...@michelf.ca>:

I think the only way to make that work sanely is to create
another root object for ref-counted classes.

The problem here is we need a way to know that type X is refcounted,
right? Couldn't we just use an attribute with the class or interface
declaration:

@refcounted interface X{};
@refcounted class Y {};
class X1 : X;
class Y1 : Y;

Now we know for sure that all these classes and SubClasses are
refcounted.

The problem is that you can't cast Y to its base class Object (because you'd be casting an ARC pointer to a GC one and the reference count would not be maintained). Even calling Object's functions should be prohibited (because the "this" pointer is a GC pointer inside of Object's functions, and it could be leaked). So, de facto, by introducing all the necessary safety limitations, you've practically made Y a root class. The only things you can safely access from the base non-ref-counted class are its variables and its static functions.

And the same apply to interface: you can't mix them.

On top of that all that, if your goal is to go GC-free, you have to reinvent the whole standard library (so it uses ref-counted classes) and you still have to avoid the common pitfalls of implicit allocations (array concat for instance). So it's not terribly useful for someone whose goal is to avoid the GC.

--
Michel Fortin
michel.for...@michelf.ca
http://michelf.ca

Reply via email to