Por que a maioria das funções anônimas não pode ser compilada pelo JIT e nunca será otimizada?

10

Acabei de ler https://techfindings.one/archives/2652 sobre programação funcional e deparei-me com isso:

funções anônimas geralmente não podem ser compiladas com JIT e nunca serão otimizadas

Alguém pode me explicar por que esse é o caso?

thadeuszlay
fonte
1
consulte Discutir este $ {blog}
gnat
Acho que o voto negativo não se justifica aqui e também o link não pode ser aplicado à minha pergunta. Estou fazendo uma pergunta técnica sobre JIT e funções anônimas - não estou pedindo opiniões / gostos ou discussões. Estou pedindo a outras pessoas que me expliquem por que funções anônimas não podem ser compiladas com JIT. Até o seu link diz "Gostaria que outros me explicassem ______", então você provavelmente está bem "@gnat
thadeuszlay
4
Antes de você perguntar "Por quê?" você deve primeiro perguntar: "Isso é verdade?". Eu chamo a BS nessa alegação. Existem quatro mecanismos JS diferentes nos quatro principais navegadores, e a alegação geral de que nenhum deles otimizará funções anônimas, sem nenhuma referência ou dados para fazer backup, é muito ousada.
Sebastian Redl 12/01
1
Estou certo de que pelo menos o mecanismo V8 é capaz de compilar funções anônimas com JIT. Fonte: li partes relacionadas do código-fonte. E não há nenhuma razão técnica para que isso seja impossível. Portanto, a premissa da pergunta está errada. Isso levanta a questão de por que o autor acha que essa afirmação faz sentido. Mas não podemos saber disso e este não é o lugar para discuti-lo, conforme explicado pelo link do gnat.
amon
Entendo o seu ponto de vista e concordo com você @SebastianRedl. Não entendi essa afirmação, mas em vez de ir mais fundo, fiz o caminho mais fácil e perguntei aqui.
Thadeuszlay 12/01

Respostas:

15

Existe um equívoco comum sobre funções aninhadas, nomeadas ou anônimas, em que as pessoas pensam que, porque a função é declarada dentro de outra função, que o compilador deve recompilá-la toda vez que a função externa é invocada. Isso não é verdade. O código da função é constante, mesmo que seu contexto de chamada não seja, e pode ser incorporado ou otimizado como qualquer outra função. Essa confusão parece especialmente potente entre os programadores que usam principalmente funções aninhadas em implementações de linguagem interpretada / JIT, como nesta pergunta .

Esse artigo tem alguns outros equívocos semelhantes que mostram que ele não entende os problemas tão bem quanto ele pensa que entende. Eu não consideraria uma fonte confiável para aprender sobre programação funcional.

Karl Bielefeldt
fonte
Obrigado por esclarecer. Eu não sou especialista em Ciência da Computação (CS). Eu nem tenho um diploma ou estudei CS. Portanto, é difícil para mim pesquisar tudo sozinho. Você poderia esclarecer que outros pontos o autor do artigo vinculado não foi totalmente correto?
Thaduszlay