On Tue, 09 Nov 2010 17:14:33 -0500, Don <nos...@nospam.com> wrote:

bearophile wrote:
Jonathan M Davis:

it would be possible to make it so that any objects allocated with new during CTFE would be in the dynamic heap during runtime.
This is possible, but it doesn't seem what you usually desire when you allocate an object at compile time.
 Bye,
bearophile

If it's mutable, it'll go on the heap. If it's immutable, it could optionally go into read-only memory (it will be exactly like the .init of a class instance). Classes which are used only during execution of CTFE functions will not be instantiated at runtime.

Pardon my ignorance, but how can something evaluated at compile time go on the heap? The heap doesn't exist yet!

e.g.:

class C
{
  int[] buffer;
  this() pure { buffer = new int[125];}
}

C c = new C;

How does c go on the heap at compile time? Won't you have to re-run the constructor at runtime to get the right result? Not only that, but even if you did run the ctor at compile time, how do you make a copy of c for every thread without re-running the ctor?

-Steve

Reply via email to