Чи все-таки LISP практикується / використовується в сучасному світі, чи це застаріла мова
Так, є, але ви повинні знати, де шукати. Люди, які використовують LISP, не схильні кричати про це занадто голосно, але є приклад декількох гучних стартапів, які використовували його для великих ефектів протягом останніх 20 років. Він також дуже популярний серед невеликих компаній Європи.
Який найпоширеніший діалект?
Це справедливе запитання, але відповісти на нього непросто. Відповідь може бути не особливо корисною: багато реалізацій мають специфічну спрямованість, тому їх краще вибирати, якщо вони відповідають вашій конкретній проблемі, а не залежно від того, наскільки широко вона використовується в іншому випадку. Натомість я розповім вам трохи про свої варіанти, і ви можете вирішити самі.
LISP - це сім'я мов, і кожна з цих мов має сімейство діалектів та реалізацій. Широко діалекти потрапляють у два табори "LISPs" та "Schemes".
LISP: До недавнього часу загальний LISP був королем. Це була спроба об'єднати всі розрізнені LISP, і, не будучи доброзичливою, була "C ++" LISP. Тобто це була ВЕЛИЧЕЗНА мова. У ньому було все. За останні кілька років з'явився Clojure. Clojure - це LISP, який працює на віртуальній машині Java і намагається вкоренитися у філософії функціонального програмування. Традиційно інші LISP суворо мульти парадигми. Clojure цікавий тим, що отримує як найкращі, так і найгірші як LISP, так і JVM. Існує ще багато багатослівних мов на основі Java, і вони були досить вільними і легкими з синтаксисом, так що в них багато ручок і кнопок для різних речей, але вони мають справдіцікаві ідеї навколо типів даних, особливо деякі практичні способи їх застосування для застосування ідей функціонального програмування.
Схеми: Схеми є суворим набором LISP. Схему винайшли Стіл і Суссман, і в ранньому житті він був відомий тим, що використовувався в лекційному курсі MIT Computing 101. Схема визначена у "Переглянутому ^ n звіті про алгоритмічну мовну схему (RnRS)". Так: вони там жартують з математики. Схема - це стандартизована мова таким чином, що не є іншими LISP. Це чудово допомагає при переносимості між реалізаціями, але це не срібна куля. Намагання зі стандартизації мають тенденцію бути консервативними, і нововведення у впровадженні, особливо навколо таких речей, як модулі, мають тенденцію до розбіжності. Існує також серія SRFI (Scheme Requests for Implementation), яка подібна до RFC-процесу IETF. Люди використовують його для стандартизації дрібних речей за потребою.
Схеми відрізняються від LISP тим, що вони мають набір жорстких вимог, яким вони повинні задовольнятись, однією з яких є "оптимізація хвостових викликів", яка допомагає зробити рекурсію ефективною. Тому рекурсивні стилі програмування набагато популярніші в Scheme, ніж у LISP. Схема, також не є доброзичливою, як "C" LISP. Тобто це невеликі мови, і ви повинні мати можливість тримати все це в голові відразу.
В даний час є дві сім'ї схем: версії на основі 5-ї версії (R5RS) та такі, що базуються на 6-й версії (R6RS). Складність R6RS була дико більшою, ніж у будь-якого з його попередників, і так багато реалізацій R5RS вирішили пропустити його, сподіваючись, що R7RS буде більше схожим на R5RS, ніж на R6RS. Процес стандартизації R7RS в даний час триває і намагався включити як бажання реалізаторів R5RS, так і такі, як народ R6RS, стандартизувавши невелику основну мову в їхній першій робочій групі, а потім ввівши в експлуатацію другу робочу групу для стандартизації великих функцій. Це дозволить мові мати ефективні та корисні реалізації як на крихітному вбудованому обладнання, так і на більш спроможних машинах.
Зараз я буду більш конкретним:
PicoLisp - це дійсно класний LISP. Це крихітно! Це автор написав це для себе, і, як я розумію, він заробляє на це життя з 1980-х. Якщо ви коли-небудь отримаєте можливість взяти участь у бесіді від нього, тоді вам слід це зробити: він дійсно цікавий і справді знає свої речі, і ви не отримаєте навіть найменшого нюху чимось основного чи нудного.
Я не знайомий із звичайними реалізаціями Lisp, тому більше не буду коментувати їх.
Guile - офіційна схема GNU.
Ракетка - це схема R6RS, але останнім часом, здається, вона розширила мережу і намагається "слугувати платформою для створення, розробки та впровадження мови".
Курка має на меті бути практичною схемою. Він заснований на R5RS і збирається до C. Це виявляється справді, дійсно, важливою перевагою, оскільки робить абсолютно тривіальним використання існуючих бібліотек C. Тому курка, мабуть, є найбільш корисною схемою заміни Perl, Python, Ruby тощо, як вашої щоденної мови сценаріїв. Є кілька людей, які використовували його виключно для всіх своїх потреб протягом декількох років. Він має інтерактивну REPL, а також компілятор. Спільнота (як у списку розсилки, так і в IRC) є обізнаною, доброзичливою та корисною.
Шукайте реалізацію з великою кількістю модулів: це показує, що вона широко використовується і означає, що, ймовірно, є щось, що допомагає у виконанні завдання.
Шукайте реалізацію за допомогою компілятора або, принаймні, чогось, що не базується лише на IDE чи REPL. Багато реалізацій, призначених для навчання, дуже важко використовувати для сценаріїв загального призначення.
Я б рекомендував курку, як саме це я використовую. Я використовував це в своїх особистих проектах і використовував (і зараз його використовую) професійно.
Я не хочу вкладати зайвих зусиль у щось, якщо це абсолютно застаріло - я б все-таки навчився цього, якби він був професійно "мертвим", але тільки з академічної точки зору ...
Схема не є професійно мертвою, але вам, можливо, доведеться докласти певні зусилля, щоб використовувати її в цьому контексті. Щось подібне до курки - це набагато більше, ніж академічне заняття, і воно може легко охопити майже всі основи будь-яких мов високого рівня, якими ви зараз користуєтесь.