Thread overview
question as to when a new command gets executed
Nov 11, 2020
WhatMeWorry
Nov 11, 2020
Jacob Carlborg
Nov 11, 2020
WhatMeWorry
Nov 11, 2020
Adam D. Ruppe
Nov 11, 2020
SealabJaster
Nov 12, 2020
Jesse Phillips
November 11, 2020
I've been studying an 8 year old D project in Github and this code fragment has left me befuddled. I'm confused as to when and how the new BreakState() statement gets executed. Wouldn't the class DebuggerSession need to be instantiated first and then the this() constructor be called?  Which begs the question, how would the statement, m_State = new BreakState() ever get executed?

class DebuggerSession
{
    private BreakState m_State = new BreakState();
    private UnrealCallback m_UnrealCallback;

    this( )
    {
    }
    // rest of class
}

November 11, 2020
On 2020-11-11 06:29, WhatMeWorry wrote:

> Which begs the question, how would the statement, m_State = new BreakState() ever get executed?
> 
> class DebuggerSession
> {
>      private BreakState m_State = new BreakState();
>      private UnrealCallback m_UnrealCallback;
> 
>      this( )
>      {
>      }
>      // rest of class
> }

It gets executed at compile time. All instances of `DebuggerSession` will share the same single instance of `BreakState`.

-- 
/Jacob Carlborg
November 11, 2020
On Wednesday, 11 November 2020 at 06:21:38 UTC, Jacob Carlborg wrote:
> On 2020-11-11 06:29, WhatMeWorry wrote:
>
>> Which begs the question, how would the statement, m_State = new BreakState() ever get executed?
>> 
>> class DebuggerSession
>> {
>>      private BreakState m_State = new BreakState();
>>      private UnrealCallback m_UnrealCallback;
>> 
>>      this( )
>>      {
>>      }
>>      // rest of class
>> }
>
> It gets executed at compile time. All instances of `DebuggerSession` will share the same single instance of `BreakState`.

Thanks.  Would you or anyone reading this know if this is unique to D or does C++ also behave like this?  Also, where is the memory, that new allocates? Is it in the heap (thought heap was available only at runtime) or some other place? (Certainly not the stack, right?)
November 11, 2020
On Wednesday, 11 November 2020 at 22:10:38 UTC, WhatMeWorry wrote:
> Also, where is the memory, that new allocates?

It is in the executable's static data block, just like if you declared a static array in the global space.

I think this is D specific but I'm not sure about that.
November 11, 2020
On Wednesday, 11 November 2020 at 22:10:38 UTC, WhatMeWorry wrote:
> Thanks.  Would you or anyone reading this know if this is unique to D or does C++ also behave like this?  Also, where is the memory, that new allocates? Is it in the heap (thought heap was available only at runtime) or some other place? (Certainly not the stack, right?)


I'm pretty sure this is the way it works in C# as well.
November 12, 2020
On Wednesday, 11 November 2020 at 22:29:00 UTC, SealabJaster wrote:
> On Wednesday, 11 November 2020 at 22:10:38 UTC, WhatMeWorry wrote:
>> Thanks.  Would you or anyone reading this know if this is unique to D or does C++ also behave like this?  Also, where is the memory, that new allocates? Is it in the heap (thought heap was available only at runtime) or some other place? (Certainly not the stack, right?)
>
>
> I'm pretty sure this is the way it works in C# as well.

C# isn't compile time, it is more a pre-constructor generated by the compiler.