Jonathan M Davis jmdavisProg at gmx.com
Tue Nov 9 17:30:53 PST 2010

On Tuesday, November 09, 2010 16:24:30 div0 wrote:
> On 10/11/2010 00:16, Jonathan M Davis wrote:
> > On Tuesday, November 09, 2010 13:49:12 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.
> > 
> > Why not? CTFE stuff should either disappear in the binary, because it's
> > not needed anymore, or it should be the same as if it were created at
> > runtime. CTFE is a great opportunity to create more complicated stuff at
> > cheaper cost (since the calculations are done at compile time instead of
> > runtime), and more importantly, have compile-time constants which are
> > more complex. It's also a great way to generate code. But I don't see
> > why you'd want statically-created objects to be treated differently once
> > the program is running.
> > 
> > - Jonathan M Davis
> No, that's completely wrong.
> CTFE should result in constant initialisation values, eg stuff in the
> .exes read only data segment.
> CTFE is the same as:
> immutable string _someString = "hello world!";
> Expect that it's:
> immutable string _someString = reallyComplicatedCTFEfunction();

There are plenty of cases where CTFE is used to create constants, but there are 
also plenty of places where it can create non-constants - such as setting the 
initial value for a member variable. Personally, I don't want to have to worry 
about where in memory an object lives. Constants can - to some extent - be 
treated as special, but CTFE is _not_ only for generating constants.

- Jonathan M Davis

More information about the Digitalmars-d-learn mailing list