Thank you for the explanations. With that in mind, why is stack-allocating heap-object-containing immutables hard? Doesn't it boil down to inspecting the immutable type at compile-time to find the offset of the heap-allocated objects' pointers, and pushing those onto the GC frame?
On Sunday, July 24, 2016 at 8:39:18 AM UTC-4, Yichao Yu wrote: > > On Sun, Jul 24, 2016 at 8:26 AM, Uwe Fechner <uwe.fec...@gmail.com > <javascript:>> wrote: > > Thanks for your answer. Some more questions: > > - is a gc frame just a pointer? > > Parent point (it forms a linked list) > Length > GC Roots > > > - if not, which information does it hold? In which file is the gc frame > > type/ > > structure defined? > > `jl_gcframe_t` in `julia.h` > > > - is there exactly one gc frame for each local variable? > > There's one GC frame for each ..... "scope" or whatever way you want > to group roots. > We emit one GC frame per function for JIT code. > Each root has it's own slot in the frame. > There might be duplicated roots in a frame and that's what the GC > frame optimizations are talking about. > See also the various `JL_GC_PUSH` macros in `julia.h` for how they are > created/used. > > > - why is it called "frame"? The term implies, that it is around > something. > > Is this the case? > > Since it's an array of multiple pointers. The use of "frame" is > probably similar to that in stack frame. > > P.S. Although you probably know already but just to be clear, one > don't need to worry about creating/accessing/maintaining GC frames > except for really low level stuff (GC and codegen). You are welcome to > learn more about julia internals of course. > > > > > On Sunday, July 24, 2016 at 1:56:05 PM UTC+2, Yichao Yu wrote: > >> > >> On Sun, Jul 24, 2016 at 6:03 AM, Uwe Fechner <uwe.fec...@gmail.com> > wrote: > >> > Hello, > >> > in the issues on github I see a lot that refer to gc frames. > >> > > >> > What is a gc frame? I know how garbage collection works in general, > >> > but I don't understand the meaning of gc frames in the context of > Julia. > >> > > >> > Could someone explain: > >> > - What they are used for? > >> > >> Keep reference to local variables. > >> > >> > - When they need to be created? > >> > >> When there's local variables that are heap allocated. > >> > >> > - If they have a lifetime, that needs to be managed. > >> > >> They are stack allocated. > >> > >> > > >> > Thank you very much! > >> > > >> > Uwe >