Семейство языков программирования - lisp

Семейство языков программирования - lisp

LISP - один из самых старых и, пожалуй, самый загадочный из современных языков программирования. Также бытует мнение, что он не просто стар, а устарел. Почему это не так и где его ниша, я попробую ответить в этой статье.

LISP является единственным динамическим системный язык программирования. И среди динамических языков он остается непревзойденным выбором благодаря следующим свойствам:

  • реальной мультипарадигменности, дающей возможность элегантно совмещать процедурный, объектно-ориентированный, функциональный и другие стили;
  • уникальной поддержке метапрограммирования;
  • легендарной интерактивной среде разработки железобетонному стандарту языка, за которым стоит многолетняя работа мегаумов МИТа, Xerox PARC, CMU и других подобных мест, оплаченная DARPA;
  • обширному набору реализаций (компилятор и среда исполнения), коих разработано за его историю около 25, до 10 из которых активно поддерживаются и развиваются.

На самом деле, современное положение Lisp'a как языка, который обычно не рассматривают для серьезной разработки, обусловлено отнюдь не техническими причинами, а лишь исторической случайностью - язык сильно опередил свое время, - и человеческим фактором: он и не выбор по умолчанию (как С++, Java или JavaScript), и не модная новая технология (как Scala, Go или Ruby), и не имеет за собой какую-либо серьезную организацию или сообщество, которые бы продвигали его использование (как C#, Swift или Rust).

Тем не менее, миф о непрактичности Lisp опровергает как мой опыт использования его в ядре Grammarly и предыдущих моих коммерческих проектах (уже более 7 лет), так и опыт поисковика авиабилетов ITA Software, купленной Google за 1 млрд. долларов, или же португальской Siscog (разработчик решений для железных дорог), в которой работает более полусотни Lisp-программистов. А адепты теории о необходимости его модернизации могут почитать Changelog SBCL (лидирующей open source реализации).

Конечно, у Lisp'a есть и недостатки - помимо небольшого сообщества, представленного в основном энтузиастами, это:

  • непривычный синтаксис;
  • часто непривычные подходы и способы разработки;
  • отсутствие библиотек для взаимодействия с остальной средой (проект Quicklisp давно доказал обратное).

Таким образом, еще раз можно повторить, что язык и экосистема Common Lisp не имеет серьезных технических недостатков при ряде бесспорных преимуществ, но они слишком непривычны и нетипичны, поэтому страдают от проблемы курицы и яйца: отсутствие Lisp девелоперов не позволяет начинать на нем серьезные проекты, а отсутствие импульса в сообществе не приводит в него новых программистов. Поэтому, Лисп вряд ли будет в ближайшее время серьезно использоваться в индустрии разработки. В чем же тогда его ниша сегодня?

Если оставить за скобками тренды, то я бы сказал, что в первую очередь, это системы, которые пишутся на годы и должны постоянно эволюционировать: в этом плане он находится в точке золотой середины между классическими системными языками, типа C++ и Java, и их динамическими конкурентами, предоставляя невероятно гибкую и, в то же время, достаточную производительную (как в отношении скорости исполнения, так и скорости разработки) среду. Особенно, если такие системы должны иметь средства представления и обработки большого количества знаний. Как раз про них 10-е правило Гринспена: Any sufficiently complicated C or Fortran program contains an ad hoc, informally-specified, bug-ridden, slow implementation of half of Common Lisp.

Однако, очень мало кто решится писать сейчас такие проекты на Lisp. Более актуально другое его применение - быстрое прототипирование и среда для экспериментов. В этой нише у Lisp много конкурентов, таких как Python или же специализированные языки, типа R и MatLab, но преимущество Lisp в том, что удачный прототип можно со временем довести до продакшн системы.

Однако, самое важное значение Lisp для меня - это полная свобода творчества, которую он предоставляет. Кроме шуток, доступ к такой среде дает возможность программисту развиваться не просто набором опыта использования каких-либо инструментов и фреймворков, а через решение нестандартных задач, пытаясь найти для этого наиболее удачный способ независимо от случайных ограничений, налагаемых текущими обстоятельствами и принятыми нормами.

Поближе познакомиться с одним из самых загадочных языков программирования ты можешь на специализированном тренинге Дёмкина Всеволода - "Креш-курс по Lisp", который состоится в Киеве 27 сентября 2015.