Почему большинство анонимных функций не могут быть скомпилированы JIT и никогда не будут оптимизированы?

10

Я только что прочитал https://techfindings.one/archives/2652 о функциональном программировании и натолкнулся на это:

анонимные функции часто не могут быть скомпилированы JIT и никогда не будут оптимизированы

Может кто-нибудь объяснить мне, почему это так?

thadeuszlay
источник
Я думаю, что отрицательный ответ здесь не оправдан, а также ссылка не может быть применена к моему вопросу. Я задаю технический вопрос о JIT и анонимных функциях - я не спрашиваю мнения / вкуса или обсуждения. Я прошу других объяснить мне, почему анонимные функции не могут быть скомпилированы JIT. Даже ваша ссылка говорит: «Я хотел бы, чтобы другие объяснили мне ______», тогда вы, вероятно, в порядке »@gnat
thadeuszlay
4
Прежде чем спросить "Почему?" Вы должны сначала спросить: «Это вообще правда?». Я звоню в BS по этому поводу. В 4 основных браузерах есть 4 разных движка JS, и общее утверждение о том, что ни один из них не оптимизирует анонимные функции без каких-либо ссылок или данных для их поддержки, является очень смелым.
Себастьян Редл
1
Я совершенно уверен, что, по крайней мере, движок V8 определенно способен JIT-компилировать анонимные функции. Источник: я прочитал соответствующие части исходного кода. И нет никаких технических причин, почему это должно быть невозможно. Так что предпосылка вопроса неверна. Это поднимает вопрос, почему автор считает, что это утверждение имеет смысл. Но мы не можем этого знать, и это не место, чтобы обсуждать это, как объясняется ссылкой Гнат.
Амон
Я понимаю вашу точку зрения и согласен с вами @SebastianRedl. Я не понял этого утверждения, но вместо того, чтобы копать глубже, я сделал легкий путь и спросил здесь.
thadeuszlay

Ответы:

15

Существует распространенное заблуждение относительно вложенных функций, именованных или анонимных, когда люди думают, что поскольку функция объявлена внутри другой функции, компилятор должен перекомпилировать ее каждый раз, когда вызывается внешняя функция. Это не правда Функция в коде является постоянным, даже если его вызывающим контекст не является, и это может быть встраиваемым или оптимизировано так же , как и любой другой функция. Эта путаница кажется особенно сильной среди программистов, которые в основном используют вложенные функции в реализациях интерпретируемого языка / JIT, как в этом вопросе .

В этой статье есть несколько других подобных заблуждений, которые показывают, что он не понимает проблемы так, как он думает, что понимает. Я не считаю это заслуживающим доверия источником информации о функциональном программировании.

Карл Билефельдт
источник
Спасибо за разъяснение. Я сам не специалист по компьютерным наукам (CS). У меня даже нет степени или изученного CS. Поэтому мне трудно все исследовать самостоятельно. Не могли бы вы уточнить, какие еще пункты автор данной ссылки не получил полностью правильно?
thadeuszlay