История изменений
Исправление
dave,
(текущая версия)
:
- Tail calls require a calling convention that is a performance hit relative to the C convention.
Вероятно, причина в том, что создатели современных процессоров потратили очень много времени и сил на оптимизацию именно конвенции вызовов из Си. Конвенция вызовов с автоматической поддержкой хвостовой оптимизации (см. PAIP) совсем несложная, но похоже, что под нее тоже надо подстраивать процессоры.
На мой взгляд полная поддержка хвостовых вызовов как и полная и настоящая поддержка хвостовой рекурсии нужны в языках не только с полноценными лямбдами, но и с таким преобразованием кода, которое известно или как «нотация do» (haskell), или как «вычислительные выражения» (f#), или как «плагин продолжений» (scala, но она тут пролетает из-за того, что в ней нет TCO). Именно там такая оптимизация становится важной (при раскрытии конструкции while, а иначе съедается стек).
Зачем TCO для Си и Си++? А нафига козе баян?
Исходная версия
dave,
:
- Tail calls require a calling convention that is a performance hit relative to the C convention.
Вероятно, причина в том, что создатели современных процессоров потратили очень много времени и сил на оптимизацию именно конвенции вызовов из Си. Конвенция вызовов с автоматической поддержкой хвостовой оптимизации (см. PAIP) совсем несложная, но похоже, что под нее тоже надо подстраивать процессоры.
На мой взгляд полная поддержка хвостовых вызовов как и полная и настоящая поддержка хвостовой рекурсии нужны в языках не только с полноценными лямбдами, но и с таким преобразованием кода, которое известно или как «нотация do» (haskell), или как «вычислительные выражения» (f#), или как «плагин продолжений» (scala, но она тут пролетает из-за того, что в ней нет TCO). Именно там такая оптимизация становится важной (при раскрытии конструкции while, а иначе съедается стек).
Зачем TCO для Си и Си++? А нафига козе боян?