<div dir="ltr">I'm looking into this code: <a href="https://github.com/erlang/otp/blob/master/lib/stdlib/src/gen_server.erl#L631">https://github.com/erlang/otp/blob/master/lib/stdlib/src/gen_server.erl#L631</a><br><div><br></div><div>Seems like this try/catch clause is implemented with the idea that most of the time it will succeed, as the callback module will have implemented the corresponding callback function, so we will not have to go into the exception clause where it needs to call erlang:function_exported/2 one more time (presumably as an additional safeguard) which is more expensive than an optimistic try clause.</div><div><br></div><div>I am writing something very similar, where such a check (is a function exported) will be performed by thousands/millions of processes on every message, but in my case... it's quite probable that most of the time this WILL raise the exception. In my case the function will be purely optional - if defined, it will return a value. If not, a default value will be used. </div><div><br></div><div>So my question is, how bad is this? I will test, but I'm still interested if someone has any ideas (maybe do something completely different).</div><div><br></div><div>Other possibilities are:</div><div><br></div><div>- Actually make the callback compulsory. I don't want to do that, as the problem I'm solving with this project is "See, you don't have to implement this boilerplate every time any more"</div><div><br></div><div>-  Put the option in application env where the user can configure it on startup. </div><div><br></div><div><br></div></div>