Dlaczego większość anonimowych funkcji nie może być skompilowana w JIT i nigdy nie będzie zoptymalizowana?

10

Właśnie przeczytałem https://techfindings.one/archives/2652 o programowaniu funkcjonalnym i natknąłem się na to:

funkcje anonimowe często nie mogą być skompilowane w JIT i nigdy nie zostaną zoptymalizowane

Czy ktoś może mi wyjaśnić, dlaczego tak jest?

thadeuszlay
źródło
1
zobacz Omów to $ {blog}
gnat
Myślę, że głosowanie nie jest tu uzasadnione, a także nie można zastosować linku do mojego pytania. Zadaję pytanie techniczne dotyczące JIT i funkcji anonimowych - nie pytam o opinie / smak ani dyskusję. Proszę innych, aby wyjaśnili mi, dlaczego anonimowych funkcji nie można skompilować w JIT. Nawet twój link mówi: „Chciałbym, żeby inni mi wyjaśnili ______”, to prawdopodobnie nic ci nie jest. ”@Gnat
thadeuszlay 12.01.18
4
Zanim zapytasz „Dlaczego?” powinieneś najpierw zapytać: „Czy to w ogóle prawda?”. W tej sprawie dzwonię do BS. Istnieją 4 różne silniki JS w 4 głównych przeglądarkach, a ogólny twierdzenie, że żadna z nich nie zoptymalizuje anonimowych funkcji, bez odniesienia czy danych, jest bardzo odważne.
Sebastian Redl,
1
Jestem pewien, że przynajmniej silnik V8 z pewnością jest w stanie skompilować anonimowe funkcje JIT. Źródło: Przeczytałem pokrewne części kodu źródłowego. I nie ma technicznego powodu, dla którego powinno to być niemożliwe. Więc przesłanka pytania jest błędna. Rodzi to pytanie, dlaczego autor uważa, że to stwierdzenie ma sens. Ale nie możemy tego wiedzieć i nie jest to miejsce do omawiania tego, jak wyjaśnia link komara.
amon
Rozumiem twój punkt widzenia i zgadzam się z tobą @SebastianRedl. Nie zrozumiałem tego stwierdzenia, ale zamiast kopać głębiej, wybrałem łatwą trasę i zapytałem tutaj.
thadeuszlay

Odpowiedzi:

15

Istnieje powszechne nieporozumienie na temat funkcji zagnieżdżonych, nazwanych lub anonimowych, w których ludzie myślą, że ponieważ funkcja jest zadeklarowana w innej funkcji, kompilator musi ją rekompilować za każdym razem, gdy wywoływana jest funkcja zewnętrzna. To nie jest prawda. Z funkcji kod jest stała, nawet jeśli jego kontekst wywołujący nie jest, a to może być inlined lub optymalizowany tak jak każdej innej funkcji. To zamieszanie wydaje się szczególnie silne wśród programistów, którzy przede wszystkim używają funkcji zagnieżdżonych w implementacjach języka interpretowanego / JIT, jak w tym pytaniu .

W tym artykule jest kilka innych podobnych nieporozumień, które pokazują, że nie rozumie problemów tak, jak mu się wydaje. Nie uważałbym tego za godne zaufania źródło wiedzy na temat programowania funkcjonalnego.

Karl Bielefeldt
źródło
Dzięki za wytłumaczenie. Sam nie jestem ekspertem w dziedzinie informatyki (CS). Nie mam nawet dyplomu ani studiów CS. Dlatego trudno mi samemu wszystko zbadać. Czy możesz wyjaśnić, jakie inne punkty autor powiązanego artykułu nie uzyskał pełnej poprawności?
thadeuszlay