LINUX.ORG.RU

История изменений

Исправление 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 для Си и Си++? А нафига козе боян?