Perché la maggior parte delle funzioni anonime non può essere compilata JIT e non sarà mai ottimizzata?


10

Ho appena letto https://techfindings.one/archives/2652 sulla programmazione funzionale e mi sono imbattuto in questo:

Le funzioni anonime spesso non possono essere compilate JIT e non saranno mai ottimizzate

Qualcuno può spiegarmi perché è così?



Penso che il downvote non sia giustificato qui e anche il link non può essere applicato alla mia domanda. Sto facendo una domanda tecnica su JIT e funzioni anonime - Non sto chiedendo opinioni / gusti o discussioni. Sto chiedendo ad altri di spiegarmi perché le funzioni anonime non possono essere compilate JIT. Anche il tuo link dice "Vorrei che gli altri mi spiegassero ______", quindi probabilmente stai bene "@gnat
thadeuszlay

4
Prima di chiedere "Perché?" dovresti prima chiedere: "È anche vero?". Chiamo BS su tale richiesta. Ci sono 4 diversi motori JS nei 4 principali browser e la coperta afferma che nessuno di loro ottimizzerà le funzioni anonime, senza riferimenti o dati a sostegno di ciò, è molto audace.
Sebastian Redl,

1
Sono abbastanza certo che almeno il motore V8 è sicuramente in grado di compilare funzioni anonime JIT. Fonte: ho letto parti correlate del codice sorgente. E non vi è alcun motivo tecnico per cui questo dovrebbe essere impossibile. Quindi la premessa della domanda è sbagliata. Ciò solleva la questione del perché l'autore ritiene che questa affermazione abbia un senso. Ma non possiamo saperlo e questo non è il posto giusto per discuterne, come spiegato dal link di Gnat.
amon,

Vedo il tuo punto e sono d'accordo con te @SebastianRedl. Non ho capito questa affermazione ma invece di scavare più a fondo ho fatto il percorso facile e ho chiesto qui.
Thadeuszlay,

Risposte:


15

Esiste un malinteso comune sulle funzioni nidificate, denominate o anonime, in cui le persone pensano che, poiché la funzione è dichiarata all'interno di un'altra funzione, il compilatore deve ricompilarla ogni volta che viene invocata la funzione esterna. Questo non è vero. Il codice della funzione è costante, anche se il suo contesto chiamante non lo è, e può essere integrato o ottimizzato come qualsiasi altra funzione. Questa confusione sembra particolarmente potente tra i programmatori che utilizzano principalmente funzioni nidificate nelle implementazioni del linguaggio interpretato / JIT, come in questa domanda .

Quell'articolo ha alcune idee sbagliate simili che mostrano che non capisce i problemi così come pensa di farlo. Non lo considero una fonte affidabile per l'apprendimento della programmazione funzionale.


Grazie per il chiarimento. Non sono un esperto in Informatica (CS). Non ho nemmeno una laurea o studiato CS. Pertanto è difficile per me ricercare tutto da solo. Potresti chiarire quali altri punti l'autore dell'articolo collegato non ha ottenuto completamente corretto?
Thadeuszlay,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.