Zastanawiałem się nad tym długo, a nawet poszedłem na konferencje Lisp, aby spróbować zrozumieć, czym jest ta „ciemna strona” Lisp, która powstrzymuje wszystkich przed przyjęciem tego.
Nie znalazłem kompletnej, przyzwoitej odpowiedzi.
Ignorancja może być przyczyną utraty popularności, ale bardziej mnie zastanawia to, że nawet ten, kto na pewno wie o Lisp (na przykład Google - pracuje dla nich Peter Norvig), nie korzysta z niej.
Jedyne częściowe wyjaśnienie, które wymyśliłem, to fakt, że większość świetnych pomysłów Lisp jest teraz powszechna, a jedynym naprawdę ważnym brakującym (niezwykle ważnym IMO) jest łatwość metaprogramowania.
Niestety nie widzę łatwego sposobu na adsorbowanie tej koncepcji w innych językach, ponieważ dobre metaprogramowanie wymaga homoikonicznego i regularnego języka (mówię o ogólnym metaprogramowaniu, a nie o durnej wersji opartej tylko na szablonie). Innymi słowy, w zasadzie wymaga podejścia Lisp do składni: kod to dane, a dane to kod. Pisanie kodu w języku bogatym w składnię, który manipuluje AST, jest trudniejsze, ponieważ musisz znać dwa języki: jak pisać kod i jak pisać AST. Jest to szczególnie trudne, jeśli twój AST jest stały, a także złożony i nieregularny z wieloma różnymi typami węzłów. Zamiast tego Lisp ma dość regularną (i rozszerzalną!) AST, a ty już normalnie kodujesz, pisząc bezpośrednio w AST.
Metaprogramowanie jest również z natury trudniejsze (a meta-metaprogramowanie jeszcze bardziej itd.), A większość programistów i menedżerów najwyraźniej woli po prostu odpowiedź „nikt nie będzie potrzebował”.
Szczególnie smuci mnie to, że „nowe” języki, takie jak go
skończyły, wykorzystują tekstowe metaprogramowanie, gdy jest to potrzebne (generatory kodu zewnętrznego piszą pliki tekstowe) i „magię” (tzn. Kompilator może robić to, czego nie potrafią programiści).
Myślę, że rozwiązaniem problemu złożoności są potężne narzędzia i edukacja. Trend jest raczej tępymi narzędziami i udawanie, że problem nie występuje.