Warum können die meisten anonymen Funktionen nicht JIT-kompiliert werden und werden niemals optimiert?

10

Ich habe gerade https://techfindings.one/archives/2652 über funktionale Programmierung gelesen und bin darauf gestoßen:

Anonyme Funktionen können oft nicht JIT-kompiliert werden und werden niemals optimiert

Kann mir jemand erklären, warum das so ist?

Thadeuszlay
quelle
Ich denke, die Ablehnung ist hier nicht gerechtfertigt und auch der Link kann nicht auf meine Frage angewendet werden. Ich stelle eine technische Frage zu JIT und anonymen Funktionen - ich frage nicht nach Meinungen / Geschmack oder Diskussion. Ich bitte andere, mir zu erklären, warum anonyme Funktionen nicht JIT-kompiliert werden können. Sogar Ihr Link sagt "Ich möchte, dass andere mir ______ erklären", dann sind Sie wahrscheinlich in Ordnung "@gnat
thadeuszlay
4
Bevor Sie fragen "Warum?" Sie sollten zuerst fragen: "Ist das überhaupt wahr?". Ich rufe BS wegen dieser Behauptung an. Es gibt 4 verschiedene JS-Engines in den 4 Hauptbrowsern, und die pauschale Behauptung, dass keine von ihnen anonyme Funktionen ohne Referenz oder Daten zur Sicherung optimieren wird, ist sehr fett.
Sebastian Redl
1
Ich bin mir ziemlich sicher, dass zumindest die V8-Engine anonyme Funktionen JIT-kompilieren kann. Quelle: Ich habe verwandte Teile des Quellcodes gelesen. Und es gibt keinen technischen Grund, warum dies unmöglich sein sollte. Die Prämisse der Frage ist also falsch. Damit stellt sich die Frage , warum der Autor meint , dass Aussage Sinn macht. Aber wir können das nicht wissen und dies ist nicht der Ort, um darüber zu diskutieren, wie durch Mücken-Link erklärt.
Amon
Ich verstehe Ihren Standpunkt und stimme Ihnen zu @SebastianRedl. Ich habe diese Aussage nicht verstanden, aber anstatt tiefer zu graben, habe ich den einfachen Weg eingeschlagen und hier gefragt.
Thadeuszlay

Antworten:

15

Es gibt ein weit verbreitetes Missverständnis über verschachtelte Funktionen, benannt oder anonym, bei denen Leute denken , dass der Compiler sie jedes Mal neu kompilieren muss, wenn die äußere Funktion aufgerufen wird , da die Funktion in einer anderen Funktion deklariert ist. Das ist nicht wahr. Der Code der Funktion ist konstant, auch wenn der aufrufende Kontext nicht vorhanden ist, und er kann wie jede andere Funktion inline oder optimiert werden. Diese Verwirrung scheint besonders stark bei Programmierern zu sein, die hauptsächlich verschachtelte Funktionen in interpretierten / JIT-Sprachimplementierungen verwenden, wie in dieser Frage .

Dieser Artikel enthält einige ähnliche Missverständnisse, die zeigen, dass er die Probleme nicht so gut versteht, wie er glaubt. Ich würde es nicht als vertrauenswürdige Quelle für das Erlernen der funktionalen Programmierung betrachten.

Karl Bielefeldt
quelle
Danke fürs klarstellen. Ich bin selbst kein Experte für Informatik (CS). Ich habe nicht einmal einen Abschluss oder CS studiert. Daher fällt es mir schwer, alles selbst zu erforschen. Könnten Sie bitte klarstellen, welche anderen Punkte der Autor des verlinkten Artikels nicht vollständig korrekt erhalten hat?
Thadeuszlay