Pourquoi la plupart des fonctions anonymes ne peuvent pas être compilées JIT et ne seront jamais optimisées?

10

Je viens de lire https://techfindings.one/archives/2652 sur la programmation fonctionnelle et je suis tombé sur ceci:

les fonctions anonymes ne peuvent souvent pas être compilées JIT et ne seront jamais optimisées

Quelqu'un peut-il m'expliquer pourquoi c'est le cas?

thadeuszlay
la source
Je pense que le downvote n'est pas justifié ici et aussi le lien ne peut pas être appliqué à ma question. Je pose une question technique sur JIT et les fonctions anonymes - je ne demande pas d'avis / goût ou de discussion. Je demande aux autres de m'expliquer pourquoi les fonctions anonymes ne peuvent pas être compilées JIT. Même votre lien dit "J'aimerais que les autres m'expliquent ______", alors vous êtes probablement OK "@gnat
thadeuszlay
4
Avant de demander "Pourquoi?" vous devez d'abord demander: "Est-ce même vrai?". J'appelle BS sur cette réclamation. Il y a 4 moteurs JS différents dans les 4 principaux navigateurs, et la couverture affirmant qu'aucun d'entre eux n'optimisera les fonctions anonymes, sans aucune référence ni donnée pour le sauvegarder, est très audacieuse.
Sebastian Redl
1
Je suis tout à fait certain qu'au moins le moteur V8 est certainement capable de compiler JIT des fonctions anonymes. Source: j'ai lu des parties connexes du code source. Et il n'y a aucune raison technique pour laquelle cela devrait être impossible. La prémisse de la question est donc fausse. Cela soulève la question de savoir pourquoi l'auteur pense que cette déclaration est logique. Mais nous ne pouvons pas le savoir et ce n'est pas l'endroit pour en discuter, comme expliqué par le lien de gnat.
amon
Je vois votre point et suis d'accord avec vous @SebastianRedl. Je n'ai pas compris cette déclaration, mais au lieu de creuser plus profondément, j'ai fait l'itinéraire facile et j'ai demandé ici.
thadeuszlay

Réponses:

15

Il y a une idée fausse commune sur les fonctions imbriquées, nommées ou anonymes, où les gens pensent que parce que la fonction est déclarée dans une autre fonction, le compilateur doit la recompiler à chaque fois que la fonction externe est invoquée. Ce n'est pas vrai. Le code de la fonction est constant, même si son contexte d'appel ne l'est pas, et il peut être intégré ou optimisé comme n'importe quelle autre fonction. Cette confusion semble particulièrement puissante chez les programmeurs qui utilisent principalement des fonctions imbriquées dans les implémentations de langage interprétées / JIT, comme dans cette question .

Cet article contient quelques autres idées fausses similaires qui montrent qu'il ne comprend pas les problèmes aussi bien qu'il le pense. Je ne le considérerais pas comme une source fiable pour en savoir plus sur la programmation fonctionnelle.

Karl Bielefeldt
la source
Merci de clarifier. Je ne suis pas moi-même un expert en informatique (CS). Je n'ai même pas de diplôme ou d'études CS. Il m'est donc difficile de tout rechercher moi-même. Pourriez-vous s'il vous plaît clarifier quels autres points l'auteur de l'article lié n'a pas entièrement compris?
thadeuszlay