If you put a function pointer in a variable, it must first look up the variable value in the object storage, then type check the svalue it finds there and look up the function in the object of that svalue (it of course cannot assume that it is the same object).
A wrapper function just needs to look up another identifier in the same object and then tail recurse (no need to do anything with the stack). Iirc it even gets optimized to an alias to the same function in the identifier table in sufficiently recent pikes (Grubba would know).
So although I haven't checked it, I'm fairly sure it's faster. Would be interesting to get some measurements though, if you're up to it. And besides, lugging around variables in every object containing the same function pointers isn't exactly pretty.
I can agree about readability, although I don't think it's worth the price. The proper way to do it would have been a constant:
constant `-> = `[];
But that currently doesn't work since the compiler doesn't consider `[] to be a constant expression. As long as it is in the same class it would be constant though, so it's probably not that difficult to fix.