为什么大多数匿名函数不能被JIT编译并且永远不会被优化?


10

我刚刚阅读了有关函数式编程的https://techfindings.one/archives/2652,并且遇到了这个问题:

匿名函数通常不能JIT编译,也永远不会被优化

有人可以向我解释为什么会这样吗?



我认为不赞成在这里投票,而且该链接也无法应用于我的问题。我在问有关JIT和匿名函数的技术问题-我不是在征求意见/口味或讨论。我要别人向我解释为什么不能通过JIT编译匿名函数。即使是您的链接也说:“我希望其他人向我解释______,那么您可能还可以。” @gnat
thadeuszlay

4
在您问“为什么?”之前 您首先应该问:“这是否正确?”。我就这一要求致电BS。在这4种主要的浏览器中有4种不同的JS引擎,并且一口气声称没有一个参考或数据来支持匿名引擎,它们都不会对匿名函数进行优化,这是非常大胆的。
塞巴斯蒂安·雷德尔

1
我非常确定至少V8引擎肯定能够JIT编译匿名函数。来源:我已经阅读了源代码的相关部分。并没有技术上的原因解释为什么这不可能。因此,问题的前提是错误的。这就提出了一个问题,为什么作者认为这种说法有意义。但是我们不知道,这不是讨论该问题的地方,正如gnat的链接所解释的。
阿蒙(Amon)

我明白您的意思,并同意@SebastianRedl。我不明白这个说法,但我没有深入研究,而是做了一条简单的路线,并在这里询问。
thadeuszlay

Answers:


15

关于命名或匿名嵌套函数存在一个普遍的误解,人们认为,由于该函数是在另一个函数内部声明的,因此编译器必须在每次调用外部函数时重新编译它。这不是真的 该函数的代码是恒定的,即使其调用上下文不是恒定的,也可以像其他任何函数一样内联或优化。在主要在解释型/ JIT语言实现中使用嵌套函数的程序员中,这种困惑似乎特别有效,就像这个问题一样

该文章还有其他一些类似的误解,表明他对问题的理解不如他认为的那样。我不认为它是学习函数式编程的可靠来源。


感谢您的澄清。我本人不是计算机科学(CS)专家。我什至没有学位或学习过CS。因此,我很难自己研究一切。您能否说明链接文章的作者还有哪些其他不完全正确的地方?
thadeuszlay
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.