> > > На мой взглад доступ с фреймам вызова функции через специальный объект > > > в джаваскрипте - решение неудачное, так как оно не позволяет > > > производить TCO. В функциональном языке какие-то варианты TCO очень > > > важны, так как руками рекурсию в цикл превратить не получится. > > > > А я не понял: почему обсуждаемые конструкции мешают Tail Call Optimization? > > По идее, если вызов действительно хвостовой (поверх него ничего нет), > > то что мешает это заметить и преобразовать в цикл? > > Потому что от того, была выполнена эта оптимизация или нет, зависит > семантика неконстантных методов объекта-функции. В исходном > джаваскрипте TCO не было. Сейчас она допускается и для этого, как > минимум, метод arguments у объектов-функций объявлен deprecated.
Так как и ответ я не совсем понял, и сам не в курсе с таким развитием языка JavaScript, полюбопытствовал, заглянув в стандарт JavaScript — версии 2015 и 2017 года. Последняя здесь: http://ecma-international.org/publications/standards/Ecma-262.htm. Это тоже не помогло прояснить ситуацию, так как слово deprecated там вообще не встречается, а читать всё подряд не стал. Но должен уточнить: вопрос о возможном удалении чего-то из JavaScript и не имеет никакого отношения к сути того, о чем я писал. То, что я обсуждал, это возможность безымянной функции цитировать себя. Это по существу синтаксическое средство и ненужно его связывать с «фреймами вызова» — функции незачем ждать быть вызванной, чтобы узнать кто она; она это должна знать с рождения. А что в JavaScript, на котором давал примеры, имеются свои особенности, к вопросу совершенно несущественно. П.П. Только что видел, что и Андрей Климов писал о том же.