On 12 December 2013 13:45, Maxime Chevalier-Boisvert < [email protected]> wrote:
> It only allocates a closure if (1) it thinks the delegate may escape the >> scope and (2) uplevel references are used in the delegate. >> > > The delegate will escape the enclosing scope. I'm wondering if there will > still be some kind of scope object allocated to represent escaping values > in the englobing stack frame, even when there are no escaping values. > > I don't mind paying the small cost of an extraneous null context pointer, > but having a whole unnecessary context object allocated seems wasteful. If you have no use for the context pointer, then it sounds like what you want is a function pointer, not a delegate. A delegate is just a function-ptr+context-ptr pair, it is a trivial struct that is passed by value, the same as a dynamic array. The context pointer may be to a stack frame (in case of a closure), or a class object (in the case of a class method pointer). If you intend a null context pointer (ie, function doesn't reference any state), than what you really have is a function pointer, not a delegate. You should use a function pointer instead. Can you show your usage? I strongly suggest trying out a couple examples, and disassembling the >> result to confirm. >> > > I'll look into that. >
