Почему нет принудительного TCO?
От: cppguard  
Дата: 11.02.22 00:28
Оценка:
Off-top mode on. Начиная с С++17 добавляют всякую ненужную дичь. Давече прочитал про грядущие нововведения С++23 — прям "ооочень нужные штуки", как мы жили без них? Складывается ощущение, что в коммитете просто каждый пытается оптимизировать свои алгоритмы: Гугл — свой Хром, Яндекс — свои микросервисы, ну и остальные до кучи. Потому как мне непонятно, зачем вводить коды возврата, а пару стандартов позже ещё что-то выдумывать (речь про std::expected)?

Но это всё брюзжание. Интересно следующие — почему не вводят конструкцию, которая бы позволила гарантировать tail call optimization? То есть пишешь, что-то вроде
unsigned factorial(unsigned n) {
  if (n)
    [[force-tco]] return n * factorial(n - 1);
  else
    return 1;
}

и если TCO не удаётся по каким-то причинам, то это становится ошибкой компиляции. Ведь тогда бы можно было писать на С++ как на Лиспе! Код бы стал лаконичнее и безопаснее. А что вы думаете?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.