> > > На мой взглад доступ с фреймам вызова функции через специальный объект
> > > в джаваскрипте - решение неудачное, так как оно не позволяет
> > > производить TCO. В функциональном языке какие-то варианты TCO очень
> > > важны, так как руками рекурсию в цикл превратить не получится.
> >
> > А я не понял: почему обсуждаемые конструкции мешают Tail Call Optimization?
> > По идее, если вызов действительно хвостовой (поверх него ничего нет),
> > то что мешает это заметить и преобразовать в цикл?
>
> Потому что от того, была выполнена эта оптимизация или нет, зависит
> семантика неконстантных методов объекта-функции. В исходном
> джаваскрипте TCO не было. Сейчас она допускается и для этого, как
> минимум, метод arguments у объектов-функций объявлен deprecated.

Так как и ответ я не совсем понял, и сам не в курсе с таким развитием языка
JavaScript, полюбопытствовал, заглянув в стандарт JavaScript — версии
2015 и 2017 года.  Последняя здесь:
http://ecma-international.org/publications/standards/Ecma-262.htm.
Это тоже не помогло прояснить ситуацию, так как слово deprecated там
вообще не встречается, а читать всё подряд не стал.

Но должен уточнить: вопрос о возможном удалении чего-то из JavaScript
и не имеет никакого отношения к сути того, о чем я писал.

То, что я обсуждал, это возможность безымянной функции цитировать себя.
Это по существу синтаксическое средство и ненужно его связывать с
«фреймами вызова» — функции незачем ждать быть вызванной, чтобы узнать
кто она; она это должна знать с рождения.

А что в JavaScript, на котором давал примеры, имеются свои особенности,
к вопросу совершенно несущественно.

П.П.  Только что видел, что и Андрей Климов писал о том же.

Ответить