Я довго дивився на те саме, і навіть ходив на конференції в Ліспі, щоб спробувати зрозуміти, що це за «темна сторона» Ліспа, яка заважає всім його прийняти.
Я не знайшов повної гідної відповіді.
Незнання може бути причиною зниклої популярності, але що мене більше спантеличує, це те, що навіть той, хто точно знає про Лісп (наприклад, для них працює Пітер Норвіг), не використовує.
Єдине часткове пояснення, яке я придумав, - це те, що більшість чудових ідей Lisp зараз є звичайною справою, єдине дійсно важливе, що відсутнє (надзвичайно важливий IMO) - це простота метапрограмування.
На жаль, я не бачу простого способу адсорбувати цю концепцію для інших мов, тому що метапрограмування є гарним вимагає гомоніконічної та регулярної мови (я кажу про загальну метапрограмування, а не про скинуту версію лише для шаблонів). Іншими словами, він в основному вимагає підходу Ліспа до синтаксису: код - це дані, а дані - код. Введення коду на багатій синтаксисом мові, що маніпулює AST, складніше, оскільки вам потрібно знати дві мови: як написати код і як написати AST. Це особливо важко, якщо ваш AST фіксований, а також складний і нерегулярний з великою кількістю різних типів вузлів. Натомість у Lisp є досить регулярний (і розширюваний!) AST, і ви вже зазвичай кодуєте, безпосередньо записуючи AST.
Метапрограмування також по суті складніше (а метаметапрограмування ще більше тощо), і більшість програмістів і менеджерів, мабуть, просто віддають перевагу відповіді "нікому не знадобиться".
Особливо сумно мені здається, що "нові" мови, як-от в go
кінцевому підсумку, використовують текстову метапрограмування, коли це потрібно (зовнішні генератори коду, що записують текстові файли) та "магічні" (тобто компілятор може робити те, що програмісти не можуть зробити).
Я думаю, що рішення проблеми складності - це потужні інструменти та освіта. Тенденція, мабуть, замість тупих інструментів, і прикидання проблеми немає.