Am 20.05.2011 19:51, schrieb Michel Fortin:
On 2011-05-20 13:36:58 -0400, Benjamin Thaut <c...@benjamin-thaut.de> said:

What if I need a value type that may be copied, but may not be moved?

I don't think that's possible. Why would you want that?

Lets say you want to implement a GC that is not a Mark & Sweep, and thus you can not do the pointer guessing game the current D GC does. So you have to create a reference value type, that registers itself with the GC when it is constructed and deregisteres itself on destruction. This reference type is only to be used inside functions for references that are constructed on the stack.

class foo { ... }

void bar(){
  foo f = new foo();
}

would become

void bar(){
  Ref!foo f = Ref!foo(new foo());
}

where Ref is:

struct Ref(T){
  T m_Ref;
  alias m_Ref this;

  this(){
    GC.addRoot(&m_Ref);
  }

  ~this(){
    GC.removeRoot(&m_Ref);
  }
}

If there is no garantuee that a struct stays on the same memory location within 1 Stack frame, you pretty much can not implement a other GC unless you hack into the compiler.

--
Kind Regards
Benjamin Thaut

Reply via email to