On Monday, 23 September 2019 at 20:57:49 UTC, Ivan Butygin wrote:
[snip]

With @dynamicCompileEmit normal calls to function will go to static version but these functions can still be targets for bind.

The confusing thing is that if I add a normal call to foo and then change @dynamicCompileEmit to @dynamicCompile, then it still works without problem

https://run.dlang.io/is/XZVs0k


Objects returned from bind are reference counted. You can get delegate from them to use is context where delegate is expected but you need to retain object somewhere. Delegate version will add additional call indirection I think but otherwise they are identical.

The delegate version adds extra indirection relative to the bind version, correct? Does the bind version also have an extra indirection relative to the normal function call?

I suppose what I'm trying to find out is if

auto f = bind(&foo, 30, 10, placeholder);

should have the same run-time performance as

int f(int c)
{
    return 40 + c;
}


Also, something got broken with bools, I need to check :)
https://run.dlang.io/is/x3orGK

Thanks, now that I got it working, I confirmed that if you take an alias of the result of bind with the same name as the original function, then it will be called before the normal function.

https://run.dlang.io/is/Tv88PS

Reply via email to