Здравствуйте, cppguard, Вы писали:
C>Off-top mode on. Начиная с С++17 добавляют всякую ненужную дичь. Давече прочитал про грядущие нововведения С++23 — прям "ооочень нужные штуки", как мы жили без них?
Складывается ощущение, что в коммитете просто каждый пытается оптимизировать свои алгоритмы: Гугл — свой Хром, Яндекс — свои микросервисы, ну и остальные до кучи. Потому как мне непонятно, зачем вводить коды возврата, а пару стандартов позже ещё что-то выдумывать (речь про std::expected)?
Ровно по той же логике, что и tail call optimization. Сделать можно, кому-то нужно, где-то не в С++ уже есть — значит имеет смысл.
Лично мне std::expected и некоторые другие добавления в С++23 полезнее обязательного tail call optimization.
C>и если TCO не удаётся по каким-то причинам, то это становится ошибкой компиляции. Ведь тогда бы можно было писать на С++ как на Лиспе! Код бы стал лаконичнее и безопаснее. А что вы думаете?
Можно писать пропозл, чо.
Легальность и в некоторых случая обязательность return value optimization и не-привествование std::move на return value уже даёт некоторую почву -- много где оно уже работает, пусть и без требования.
Есть некоторая сложность с тем, что стандарт не говорит про то, что вообще обязательно есть stack, даже несмотря на stack unwinding при исключениях и std::stacktrace из C++23, но дело поправимое.
Есть проблема с тем, что если аттрибуты не поддерживаются вообще, они должны игнорироваться реализацией. Ну тут спасает feature test macro.
Ещё сейчас компиляторы не всегда могут сгенерировть настолько оптимальный код для оптимизированных хвостовых вызовов, как для изначально циклов. Ну то QoI во-первых, во-вторых тоже дело поправимое.
Видимо на самом деле не так уж оно и нужно, если такого пропозла не было.