А вы знаете, где сейчас используется Лисп?
Введение
Лисп — второй по старшинству из ныне живых высокоуровневых языков программирования (после Fortran) и первый функциональный язык. Он был разработан в 1958 году и сильно изменился с тех пор, породив множество диалектов и оказав значительное влияние на развитие других языков. На данный момент наиболее известные диалекты: Common Lisp, Scheme, Racket и Clojure.
Слева: Лисп-машина в музее MIT.
Справа: Лисп-машина Symbolics 3640, фото Michael L. Umbricht и Carl R. Friend (Retro-Computing Society of RI)
Лисп стал «первооткрывателем» многих идей, нашедших применение в современных языках программирования: древовидные структуры, динамическая типизация, функции высшего порядка и многое другое. В этом посте мы не будем углубляться во вклад Лиспа в теорию, а сосредоточимся на практической пользе.
Изначально Лисп предназначался для работ в области искусственного интеллекта, в частности как представление математической нотации для символьных вычислений. Но насколько широко диалекты Лиспа используются сейчас и в каких областях применяются?
Мы в Typeable любим и применяем функциональное программирование, а влияние Лиспа на функциональные языки всё ещё сильно, поэтому нам стало интересно разобраться в этом вопросе.
Кто и что пишет на Лиспе?
Во время учёбы мне часто приходилось иметь дело с диалектами Лиспа. Проведя поиск информации при подготовки этой статьи, я была приятно удивлена, когда находила упоминание кода на том или ином диалекте Лиспа в приложениях, которыми пользуюсь сама. Думаю, и вы найдёте знакомые названия в этом списке.
- GNU Emacs — текстовый редактор, разработанный Ричардом Столлманом в 1984 году, первая программа проекта GNU, участник вечной битвы за звание лучшего текстового редактора. Написан по большей части на своём собственном диалекте Лиспа, Emacs Lisp. На нём же пользователи пишут конфиги и расширения для Emacs. Хотя этот диалект и может использоваться как скриптовый язык общего назначения, он всё же заточен под разработку текстового редактора: например, в Emacs Lisp есть мощная библиотека для работы с текстовыми файлами.
- Grammarly — онлайн-сервис для проверки текстов на английском языке. Сервис использует искусственный интеллект для анализа текста и формирования советов по его улучшению. Проверяется не только грамматика и орфография, но и лаконичность, словарный запас и тон текста. Разработка началась в 2009 году, сейчас у сервиса 30 миллионов активных пользователей ежедневно, он регулярно попадает в различные рейтинги. Я сама использую Grammarly как расширение для браузера, и неожиданно для меня оказалось, что весь их бэкенд, вся работа с обработкой текстов, написана на Common Lisp. Разработчики поделились в своём техническом блоге, почему они выбрали CL и каково это — Лисп в современном продакшене: https://www.grammarly.com/blog/engineering/running-lisp-in-production/
- В Boeing 747 и 777 используется Allegro NFS Server (сервер, использующий протокол сетевого доступа к файловым системам, NFS), написанный на Common Lisp. Продолжая тему авиации: Boeing и Airbus используют Piano — пакет программ на Common Lisp для разработки и анализа конструкции воздушного судна. Узнать больше о низкоуровневой разработке на Common Lisp можно из этого доклада: https://youtu.be/S7nEZ3TuFpA
- ITA Software — некогда отдельная компания, разработавшая систему поиска и расчёта цен авиабилетов, а сейчас — часть подразделения Google, отвечающего за индустрию туризма. Для разработки своего ПО компания по большей части использует Allegro Common Lisp.
- Ещё одно применение в области транспорта — Лондонское метро, которое использует ПО от португальской компании Siscog, в которой основной язык разработки — Common Lisp. Компания разрабатывает системы поддержки принятия решений для планирования, распределения и управления ресурсами при транспортировке.
- Circle CI — одна из крупнейших и, вероятно, самых известных платформ для CI/CD с миллионами билдов ежемесячно и прочей впечатляющей статистикой, которую можно посмотреть у них на сайте. Большая часть написана на Clojure, кроме того. на фронтенде используется ClojureScript. Вообще, Clojure полюбился разработчикам настолько, что в 2021 году занял второе место среди любимых технологий пользователей Stack Overflow, согласно их ежегодному опросу (https://insights.stackoverflow.com/survey/2021#technology-most-loved-dreaded-and-wanted).
- В системах автоматизированного проектирования работ AutoCAD используется диалект AutoLISP как внутренний язык разработки приложений. Хотя AutoLISP — самый старый из внутренних языков программирования в AutoCAD, он активно поддерживается и доступен для разработки в других CAD-системах (Bricscad, IntelliCAD, DraftSight).
- Apache Storm — распределенный инструмент обработки больших объёмов данных в реальном времени. Проект реализован на Clojure и Java, и был выложен в открытый доступ под лицензией Apache License 2.0 после того, как его выкупил Twitter. Интероперабельность с Java — главная особенность Clojure, позволяющая интегрировать код на нём в любой проект, написанный на Java.
- Riemann — инструмент для мониторинга распределённых систем. Он агрегирует события с серверов и приложений пользователей, объединяет их в поток и передаёт для дальнейшей обработки или хранения. Riemann отличается от других подобных систем гораздо большей гибкостью и отказоустойчивостью. А ещё он написан на Clojure чуть менее, чем полностью. Код доступен на GitHub и распространяется под лицензией Eclipse Public License 1.0.
- Новостной сайт Hacker News был разработан как проект компании Y Combinator и написан на языке Arc. Это диалект Лиспа, реализация которого сделана на Racket. Автор сайта, Пол Грэм, также принимал участие в разработке этого языка и, как видим, нашёл ему практическое применение. Одной из целей было формирование сообщества, похожего на то, которое было на Reddit в начале его существования (тогда он, внезапно, был написан на Common Lisp, пока в 2005 году его не перенесли на Python).
Заключение
Я попыталась включить в список примеры из разных прикладных областей, инструменты для разработчиков, готовые приложения для нетехнических пользователей и системы, входящие в состав того, чем регулярно пользуется довольно большое число людей, даже не задумываясь об этом.
Конечно, это список не полный, здесь выделены наиболее интересные на мой субъективный взгляд применения Лиспа в современном ПО. Более полные списки библиотек, готовых приложений и компаний, использующих диалекты Лиспа, можно посмотреть в следующих ресурсах:
- Clojure:
- Common Lisp
- Scheme/Racket