なぜほとんどの匿名関数はJITコンパイルできず、最適化されないのですか?


10

私は関数型プログラミングについてhttps://techfindings.one/archives/2652を読んだだけで、これに遭遇しました:

多くの場合、匿名関数はJITコンパイルできず、最適化されません。

これが事実である理由を誰かが私に説明できますか?



ここでは反対投票は正当化されていないと思いますし、リンクを質問に適用することもできません。私はJITと匿名関数についての技術的な質問をしている-私は意見/味や議論を求めているのではない。匿名関数をJITコンパイルできない理由を説明してほしい。あなたのリンクでさえ、「他の人に______を私に説明してほしい」と言っていれば、おそらくあなたは大丈夫です」@gnat
thadeuszlay

4
「なぜ?」と尋ねる前に 「これは本当ですか?」私はその主張についてBSに電話します。4つの主要なブラウザーには4つの異なるJSエンジンがあり、参照やデータをバックアップすることなく匿名関数を最適化することはできないと大胆に主張しています。
Sebastian Redl 2018年

1
少なくともV8エンジンが匿名関数を確実にJITコンパイルできることは確かです。ソース:ソースコードの関連部分を読みました。そして、これが不可能であるべきである技術的な理由はありません。したがって、質問の前提は間違っています。これは、著者その発言が理にかなっていると考える理由を疑問視します。しかし、私たちはそれを知ることができず、gnatのリンクで説明されているように、ここでそれを議論する場所ではありません。
amon、

私はあなたのポイントを見て、あなたに同意します@SebastianRedl。私はこの声明を理解していませんでしたが、深く掘り下げるのではなく、簡単な方法でここに尋ねました。
thadeuszlay 2018年

回答:


15

関数が別の関数内で宣言されているため、外部関数が呼び出されるたびにコンパイラーがそれを再コンパイルする必要があると人々が考える、名前付きまたは匿名の入れ子関数に関する一般的な誤解があります。これは真実ではありません。関数のコードは、その呼び出しコンテキストがそうでなくても一定であり、他の関数と同じようにインライン化または最適化できます。この混乱は、この質問のように、インタプリタ/ JIT言語の実装で主にネストされた関数を使用するプログラマの間で特に強力なようです。

その記事には他にもいくつかの同様の誤解がありますが、彼は問題を理解しておらず、理解していると考えています。関数型プログラミングについて学ぶための信頼できる情報源だとは思いません。


明確にしていただきありがとうございます。私自身はコンピュータサイエンス(CS)の専門家ではありません。私は学位も持っていないし、CSを勉強していません。したがって、自分ですべてを調査するのは難しいです。リンク先の記事の著者が完全に正しく理解できなかった他のポイントを明確にしていただけませんか?
thadeuszlay
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.