LISP все еще практикуется / используется в современном мире, или это унаследованный язык
Да, это так, но вы должны знать, где искать. Люди, которые используют LISP, обычно не кричат об этом слишком громко, но есть несколько примеров того, как несколько высококлассных стартапов использовали его с большим эффектом за последние 20 лет. Он также очень популярен среди небольших компаний в Европе.
Какой диалект наиболее широко используется?
Это правильный вопрос, но на него нелегко ответить. Это также может быть не очень полезным, чтобы ответить: многие реализации имеют конкретную направленность, поэтому их лучше выбирать, если они соответствуют вашей конкретной проблеме, а не исходя из того, насколько широко она используется иным образом. Вместо этого я расскажу вам немного о ваших возможностях, и вы сами решите.
LISP - это семейство языков, и каждый из этих языков имеет семейство диалектов и реализаций. В широком смысле диалекты делятся на два лагеря «LISPs» и «Schemes».
LISP: до недавнего времени Common LISP был королем. Это была попытка объединить все разрозненные LISP и, не будучи недобрым, была "C ++" LISP. То есть это был ОГРОМНЫЙ язык. Там было все. За последние несколько лет появился Clojure. Clojure - это LISP, который работает на виртуальной машине Java и пытается внедрить себя в философию функционального программирования. Традиционно, другие LISP были строго мультипарадигмы. Clojure интересен тем, что получает как самые лучшие, так и самые худшие результаты как для LISP, так и для JVM. Все еще много подробностей языков на основе Java, и они были довольно бесплатны и просты с синтаксисом, так что у него есть множество кнопок и кнопок для разных вещей, но у них есть некоторые действительноинтересные идеи вокруг типов данных, особенно некоторые из практических способов, которые они придумали для применения идей из функционального программирования.
Схемы: Схемы являются строгим подмножеством LISP. Схема была изобретена Стилом и Суссманом и в молодости отличалась тем, что использовалась в курсе лекций MIT Computing 101. Схема определена в «Пересмотренном отчете по алгоритмической языковой схеме (RnRS)». Да, у них там есть математическая шутка. Схема является стандартизированным языком в отличие от других LISP. Это очень помогает в переносимости между реализациями, но это не серебряная пуля. Усилия по стандартизации имели тенденцию быть консервативными, а инновации в реализациях, особенно в таких вещах, как модули, имели тенденцию быть разрозненными. Существует также ряд SRFI (запросов схемы для реализации), которые аналогичны процессу RFC IETF. Люди используют его, чтобы стандартизировать мелочи по мере необходимости.
Схемы отличаются от LISP тем, что у них есть набор жестких требований, которым они должны удовлетворять, одним из которых является «оптимизация хвостового вызова», которая помогает сделать рекурсию эффективной. Следовательно, рекурсивные стили программирования гораздо более популярны в Scheme, чем в LISP. Схема, также, не будучи недоброй, как "C" LISP. То есть это небольшие языки, и вы должны иметь возможность хранить все это в своей голове сразу.
В настоящее время существует два семейства схем: основанные на 5-й версии (R5RS) и основанные на 6-й версии (R6RS). Сложность R6RS была значительно выше, чем у любого из его предшественников, и поэтому многие реализации R5RS решили его пропустить, надеясь, что R7RS будет больше похож на R5RS, чем R6RS. Процесс стандартизации R7RS в настоящее время продолжается и попытался включить как желания разработчиков R5RS, так и желания людей R6RS, стандартизировав небольшой базовый язык в их первой рабочей группе, а затем поручив вторую рабочую группу стандартизировать более крупные функции. Это позволит языку иметь эффективные и полезные реализации как на крошечном встроенном оборудовании, так и на более мощных машинах.
Теперь я буду более конкретным:
PicoLisp - это действительно классный LISP. Это крошечный! Автор написал это для себя, и, насколько я понимаю, он зарабатывает на жизнь этим с 1980-х годов. Если вам когда-нибудь удастся посетить его выступление, вам следует сделать это: он действительно интересен и действительно знает свое дело, и вы не услышите ни малейшего нюха мейнстрима или скучного.
Я не знаком с реализациями Common Lisp, поэтому я не буду комментировать их дальше.
Guile - это официальная схема GNU.
Racket - это схема R6RS, но в последнее время она, похоже, расширила сеть и пытается «служить платформой для создания, проектирования и реализации языка».
Цыпленок стремится быть практической схемой. Он основан на R5RS и компилируется до C. Это оказывается действительно очень важным преимуществом, поскольку делает использование тривиальных библиотек C абсолютно тривиальным. Поэтому Chicken, вероятно, является наиболее полезной схемой для замены Perl, Python, Ruby и т. Д. В качестве повседневного языка сценариев. Есть несколько человек, которые использовали его исключительно для всех своих нужд в течение нескольких лет. Он имеет интерактивный REPL, а также компилятор. Сообщество (как в списке рассылки, так и в IRC) хорошо осведомлено, дружелюбно и полезно.
Ищите реализацию с большим количеством модулей: это показывает, что она широко применима и означает, что у нее, вероятно, есть что-то, что поможет в решении поставленной задачи.
Ищите реализацию с компилятором или, по крайней мере, что-то, не основанное исключительно на IDE или REPL. Многие реализации, предназначенные для обучения, очень сложно использовать для сценариев общего назначения.
Я бы порекомендовал курицу, так как это то, что я использую. Я использовал это в своих личных проектах, и я использовал это (и в настоящее время использую это) профессионально.
Я не хочу вкладывать неуместные усилия во что-то, если оно полностью устарело - я бы все равно научился этому, если бы оно было профессионально «мертвым», но только с академической точки зрения ...
Схема не профессионально мертва, но вам, возможно, придется пойти на все, чтобы использовать ее в этом контексте. Что-то вроде Chicken - это нечто большее, чем просто академическое занятие, и оно может легко охватить практически все основы языков высокого уровня, которые вы используете в настоящее время.