Название вопроса может быть немного странным, но дело в том, что, насколько я знаю, ничего не говорит о оптимизации хвостового вызова вообще. Однако, просматривая проекты с открытым исходным кодом, я уже сталкивался с несколькими функциями, которые активно пытаются остановить компилятор от оптимизации хвостового вызова, например, реализация CFRunLoopRef, который полон таких хаков. Например:
static void __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__() __attribute__((noinline));
static void __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__(CFRunLoopObserverCallBack func, CFRunLoopObserverRef observer, CFRunLoopActivity activity, void *info) {
if (func) {
func(observer, activity, info);
}
getpid(); // thwart tail-call optimization
}
Я хотел бы знать, почему это так важно, и есть ли какие-то случаи, когда я, как нормальный разработчик, должен держать это в виду тоже? Например. существуют ли общие проблемы с оптимизацией хвостового вызова?