Я начал свой путь к Lisp уже чуть больше года назад. Я делал ежеквартальные дайджесты новостей, в основном из ленты Reddit:
Пришло время сделать годовой обзор! Что случилось в мире Common Lisp? Существуют ли (или новаторские, многообещающие полезные развлечения) проекты, статьи, обсуждения, учебные пособия?
Нет необходимости говорить, что я не буду ссылаться на все, что мы находим в ежеквартальных публикациях, в которых не перечислены все новые проекты, появляющиеся на Quicklisp (мы можем найти их в ежемесячных выпусках Quicklisp) или Github.
Я надеюсь, что этот обзор заострит ваш интерес к тому, что, на мой взгляд, является недостаточно продаваемым и все еще очень многообещающим языком и платформой, которые мне нравятся все больше и больше (и ооочень больше, чем Python;)).
Счастливых открытий.
Документация
Электронная документация Common Lisp могла бы быть более полной и приветливой. К счастью, некоторые из нас возродили некоторые проекты и поработали над ними - мой любимый - Common Lisp Coobook. В этом году у нас есть учебники по:
- Структуры данных
- Отладка, в том числе интерактивная отладка космического корабля,
- Объектная система Common Lisp (CLOS)
- Цикл, итерация, отображение
- Доступ к базе данных и постоянство
- Обработка ошибок и состояний
- Числа и многомерные массивы
- Создание сценариев и сборка автономных исполняемых файлов
- Работа с типами
наряду с множеством улучшений на других страницах, таких как начало работы и поддержка редактора.
Это подводит меня к следующему: ситуация с редакторами гораздо более открыта, чем вы думаете:
- Выбранный редактор по-прежнему Emacs со Slime (или Sly),
- Тем не менее, мы можем начать работу с Emacs и Lisp за 3 клика с помощью Portacle, автономного портативного Emacs с включенным sbcl и включенным батареями, адаптированного для CL,
- Для Vim и NeoVim у нас есть SLIMV, VLIME, и плагины для NeoVim могут быть написаны с помощью cl-neovim.
- Или, если нам нужен редактор, написанный на cl, есть автономный редактор Lem, который также работает для Python, Go, Rust, Nim, Scheme, HTML, JSX, наряду с режимом каталогов, экспериментальный режим LSP, режим расчета и многое другое,
- Не забывайте, что пользователи Mac Os X могут использовать Clozure Common Lisp IDE
- Все редакции LispWorks (включая бесплатную) включают LW IDE
- Для пользователей Eclipse IDE есть плагин Dandelion
- Популярные редакторы очень хорошо знакомы с Atom, а популярный Visual Studio Code можно заставить работать с CL с помощью cl-lsp.
- У нас есть ipython-подобный REPL (cl-repl),
- а для интерактивных блокнотов у нас есть ядра Jupyter и еще один блокнот (Darkmatter).
Очень долгожданным улучшением является веб-сайт фонда Common Lisp: https://common-lisp.net/. Он получил масштабное обновление и теперь стал привлекательным. У нас был http://lisp-lang.org/ (не пропустите его раздел с историями успеха (знаете ли вы, что pgloader был переписан с Python на CL? :))), но common-lisp.net был горшок с медом гуглеров.
На этом веб-сайте используются два «потрясающих» списка, которые были созданы или массово обставлены в прошлом году:
- список Awesome-CL, обновленный сотнями коммитов, который, мы надеемся, сделает экосистему более доступной и привлекательной, и
- Awesome Lisp Companies: это было необходимо, потому что Lispers не знали многих компаний, использующих CL appart от IRobot, Google ITA (на базе Kayak, Orbitz и других), Grammatech, YCombinator, Siscog или других мертвых.
Другие места для изучения Common Lisp:
- Cl-упражнение: Common Lisp Learning System, работающая в браузерах
- школы программирования, такие как Каттис
- и конкурирующие сайты по программированию, такие как CodeForces, HackerEarth, HackerRank и CodeChef.
- наконец, книга Питера Норвига« Парадигмы программирования искусственного интеллекта доступна на Github»
У нас также регулярно появляются новые скринкасты:
- много от Baggers: он делает следующее и транслирует в прямом эфире почти еженедельно
- Маленькие кусочки Lisp: короткие видеоролики для изучения основ Lisp
- Много кусочков Лиспа: длинные видеоролики для углубленного изучения продвинутых предметов (макросы, CFFI,…)
- Выталкивание пикселей с помощью Lisp: в основном работа с OpenGL
- и более" !
- У Шинмера тоже много видео, мы можем увидеть, как он работает над игровыми движками, играми, своими библиотеками, приложениями Qt и многим другим,
- Группа изучения CL (здесь введение в Screamer, библиотеку недетерминированного программирования)
Реализации
Время подходит для реализаций Common Lisp. Большинство из них возникло несколько десятилетий назад и уже доказали, на что способны (помните, SBCL является потомком Лиспа, отправившегося в космос). Отсюда отсутствие ажиотажа, ИМО. Тем не менее, многие из них находятся в активной разработке и продолжают улучшаться. Как заметил /u/defunkydrummer
:
Нам повезло, что мы живем в то время, когда разработка Lisp все еще продолжается, и многие команды носят флаг Lisp с открытым исходным кодом:
SBCL (новый выпуск сегодня)
SICL (последняя фиксация 2 часа назад)
ECL (последняя фиксация, вчера),
CLASP (последняя фиксация 2 дня назад)
CCL (последняя фиксация 7 дней назад),
CLISP (две недели назад),
CMUCL (1 месяц назад)
ABCL (3 месяца назад)
SBCL выпускает ежемесячные выпуски. Если вы читаете примечания к выпуску, вы можете беспокоиться:
количество изменений в каждом выпуске в эти годы уменьшается
но, как отмечает /u/baggers
:
Я думаю, что коммиты говорят немного о другом. Всегда есть много предыстории, чтобы «сделать что-то лучше», чем не появится, поскольку объяснение будет либо сверхвнутренним и конкретным, либо будет очень расплывчатым и очень похожим каждый месяц (например, «материал работает немного быстрее»).
Для того, чтобы быть слишком конкретным, этот может стать хорошим примером. Это грандиозная работа, но она не проявляется ни в одной конкретной функции шепелявости, просто лучше.
Кроме того, сопровождающий:
Или разработчики лень описывать свои изменения.
что не является уважительной причиной;)
У нас есть новый выпуск Corman Lisp, высокопроизводительной реализации для Windows / 32bit со встроенной IDE,
у нас есть CLASP, ориентированный на C ++ через LLVM (см. Извлеченные уроки по реализации Common Lisp с LLVM), построенный с помощью компилятора Cleavir, части SICL, очень новой реализации Common Lisp со свежими идеями,
у нас есть ABCL, ориентированный на JVM, Embedable Common Lisp, не забывая об активных коммерческих, таких как LispWorks и AllegroCL. Пока я занимаюсь этим, вы можете взглянуть на MOCL для IO, Android и OSx.
Сопровождающий Clozure Common Lisp приятно побеседовал с нами: Этот старый Лисп (это может быть вторая по популярности реализация, особенно хороша для разработки - сверхбыстрое время компиляции (я слышал, что он компилируется за секунды), совет, Наблюдаемые объекты, собственная IDE).
Последнее замечание, сопровождающий SBCL запустил порт RISC-V: Первые шаги RISCy - перенос SBCL на RISC-V
Итак: добро пожаловать в этот новый мир. Это точно больше, чем я думал.
Проекты
Я перечисляю только некоторые проекты, которые могут кого-то заинтересовать. Полную информацию смотрите в постах за квартал!
Новые проекты
- Next browser 1.2.0 is out!: Браузер, открывающий все свои внутренние компоненты для CL. Будьте продуктивны.
- CANDO - среда программирования вычислительной химии, объединяющая Common Lisp и C ++ на основе записной книжки Jupyter. Их Youtube канал.
- Коалтон, диалект машинного обучения, встроенный в Common Lisp (альфа)
- Воксельный игровой движок (Майнкрафт) - движок Майнкрафт. Позволяет вносить интерактивные изменения.
- Emotiq - блокчейн на Common Lisp
- Temperance - логическое программирование (в разработке, вышла v1.0.0)
- MAGICL: программы матричной алгебры в Common Lisp - Rigetti Computing (квантовые вычисления)
- SHCL: нечестивый союз POSIX Shell и Common Lisp (reddit)
- JSCL 0.7.0 теперь поддерживает CLOS благодаря работе влад-км
- Cl-torrents 0.9 - интерфейс readline и парсер 1337x.to - простой инструмент для поиска торрентов на популярных трекерах. Мое первое приложение CL. Почти закончены веб-интерфейсы и графические интерфейсы.
- Знакомство с Seed: интерактивная программная среда на Common Lisp
- Товеро - это система трехмерного моделирования для Common Lisp
- RMSBolt: посмотрите, что делает ваш компилятор внутри Emacs (имеет минимальную поддержку Common Lisp)
- Pngload: декодер формата изображений PNG (переносимая сетевая графика)
- Cl-vep: процессор видеоэффектов
- Библиотека алгебраических данных
- Petalisp: элегантные высокопроизводительные вычисления
- Wiki-lang-detect: определение языка текста с использованием данных Википедии.
- Дюфи, библиотека цветов
- Ppath, библиотека управления путями
- Cl-statistics.lisp
- Powerlisp: простой инструмент для автоматизации вашей работы с dmenu / rofi
- Json-mop: метакласс для соединения объектов CLOS и JSON.
- Clsh: набор привязок Lispy для запуска и создания * nix процессов.
- Filter-functions - позволяет использовать произвольные предикаты для выбора и применения методов.
Интернет
- Новое краткое руководство Weblocks - Weblocks - это изоморфные веб-фреймворки, которые позволяют писать интерактивные веб-приложения без написания Javascript (и без написания кода, транслируемого в JS). Сейчас происходит массовое обновление. Будучи Lisp, мы можем создать автономный исполняемый файл нашего веб-приложения, отправить его на сервер, запустить и увидеть его снаружи.
- Три почтовых библиотеки
- Исходный код reddit1.0 (комментарии), затем Код Reddit работает на SBCL. См. Также Reddit.
- Интерактивные фрагменты кода Common Lisp на любой веб-странице
- Arboreta-wasm - инструментарий Common Lisp для WebAssembly
Информацию о веб-библиотеках см. На странице https://github.com/CodyReichert/awesome-cl#network-and-internet.
GUI
- Nodgui - еще один пакет GUI на основе Tcl / Tk для Common Lisp (на основе Ltk, с синтаксическим сахаром и другими мета-виджетами)
- IUP bindings GUI stuff (в разработке)
- YstokWidgets Professional Edition
- МИДЖЕТЫ - Коллекция виджетов и утилит CAPI
- Подтекст: пользовательский интерфейс, в основном основанный на тексте, соединяет объекты Common Lisp и фрагменты текста. Минималистичный текстовый пользовательский интерфейс
- Ftw: Библиотека графического интерфейса Common Lisp Win32
- Код интерфейса какао, написанный на Lisp для использования с Clozure Common Lisp
- Релиз McCLIM 0.9.7« Имболк »
- Демонстрационный сценарий SBCL с использованием Gtk
- Демонстрационный сценарий ABCL с использованием Java Swing
для библиотек GUI: https://github.com/CodyReichert/awesome-cl#gui
Управление пакетами
Quicklisp - это де-факто менеджер пакетов, но новые проекты дополняют его и обходят его ограничения:
- Доступна вторая версия Ultralisp - Ultralisp - важный проект, заполняющий пробел. Это быстрое распространение, которое обновляется каждые 5 минут. Это также приложение Weblocks!
- Quicksys - устанавливает системы из нескольких дистрибутивов Quicklisp.
Дополнительные параметры см. В разделах Qlot (локальная установка и закрепление библиотек, например virtualenv Python) и Roswell.
Развертывание
- Apache Thrift получает поддержку CL
- S2i-lisp: Образ сборки Common Lisp + Quicklisp OpenShift
- Lisp-images: образы Docker для общей разработки lisp (с некоторыми другими, см. Awesome-list)
- Докер-контейнер для разработки CL (также lisp-devel, CI on CL Cookbook)
- Клиентская библиотека Kubernetes для Common Lisp
- Пакет сборки Heroku для Common Lisp
- Cl-aws-custom-runtime - пример использования Common Lisp (SBCL) в качестве настраиваемой среды выполнения на AWS lambda.
- Prometheus.cl - клиент Prometheus.io. Панель управления Grafana для метрик SBCL и Hunchentoot (память, потоки, запросы в секунду,…).
Мы также можем развертывать приложения в Digital Ocean, и нет нужды говорить, что развернуть автономный исполняемый файл легко, как и подключиться к удаленному экземпляру.
Музыка
- Музыка: Музыкальная структура для музыкального выражения в Common Lisp с акцентом на теории музыки (построена с нуля, на стадии разработки)
- Сочинение на Лиспе с использованием Csound'а
- Shuffletron, музыкальный проигрыватель Common Lisp для терминала
см. также ПО для создания аудио и музыки
(пере) Открытия
- Lfarm - библиотека для распределения работы по машинам (поверх lparallel и usocket)
- Крикун - недетерминированное программирование. Дополнение Common Lisp практически всей функциональностью языков программирования Prolog и логики ограничений (10 лет, Nikodemus)
- Quid-pro-quo: библиотека контрактного программирования в стиле Eiffel's Design by Contract
- Ячейки, табличная выразительность для CLOS
- Cl-bibtex: Совместимая повторная реализация программы BibTeX на Common Lisp с компилятором BST-to-CL
- Синтаксис языка C, встроенный в Common Lisp
- Gendl - Система генеративного программирования и инженерии, основанная на знаниях (KBE), встроенная в Common Lisp
- Абстрактная машина когнитивного робота = Common Lisp + ROS
- Esrap - синтаксический анализатор для Common Lisp
- C-Mera, компилятор Common Lisp от исходного кода к исходному для генерации C / C ++
- Cl-bench - Пакет для тестирования Common Lisp
- QGAME: Эмулятор квантовых и вентильных измерений
Статьи
- Дорога к Common Lisp (комментарии хакерских новостей). Вам следует прочитать это.
- Как сильные стороны языков семейства Lisp облегчают создание сложных и гибких биоинформатических приложений
- Написание парсера даты и времени на естественном языке - внутреннее устройство библиотеки Common Lisp Chronicity
- Реализация пользовательских сессий Hunchentoot
- Обзор генераторов документации (codex, coo, declt, staple, cldomain)
- Конвертер карт из Reflex Arena в QuakeWorld. cl-yacc, 3d-матрицы
- Отладка Common Lisp в Slime
- Пакеты в Common Lisp, учебное пособие (pdf)
- Как написать контрольные приборы для FiveAM - Dark Chestnut
- Партнер Franz and Semantic Web Co. по созданию сети знаний Ноама Хомского
- Основы компилятора: от лиспа до сборки
- Марвин Мински - Ученый - Красота языка Лисп
- В поисках общего сокровища: Common Lisp
- Удовольствие с макросами: если-пусть и когда-пусть / Стив Лош
- Extempore - Разработка, реализация и применение киберфизического языка программирования, Эндрю Соренсен, Тезис, 2018 (PDF)
- Единый структурированный синтаксис, метапрограммирование и компиляция во время выполнения
- Простое сравнение вычислителя выражений между Haskell, Rust и Common Lisp
- Слушаю в Лаборатории реактивного движения
а также
- Лисп, джаз, айкидо: три выражения одной сущности
- Почему лисп - биолисп
- Веселье с макросами: Сбор / Стив Лош
- Опыт написания полнофункционального клиента блога livejournal на Common Lisp. Часть 2: клиентская логика
- (Не) общий Lisp-подход к исследованию операций (2012)
- Чужой: возвращение чужих технологий к классическому планированию
- Emacs + ECL на Android
- Общий, согласованный и точечный доступ к структурам данных с помощью Access - lisp-travelling (reddit)
- Средства сбора мусора LLVM и GC поколения SBCL
- Набор утилит от (опять же) sjl: функции высшего порядка, последовательности, отладка, профилирование.
- Возвращение cl-notebook
- Тестирование пакета SERIES
По играм:
- О создании игр на Lisp - Gamedev
- Создание (нетривиальной) игры на Лисп в 2018 году (они только что запустили Краудфандинг)
- История (defun games ())
- Начало работы с trivial-gamekit
Другие скринкасты
- Лисп, выбор квантового программиста - компьютерный фанат, эпизод 2
- McCLIM + Maxima: манипуляции с сюжетом
- McCLIM + Maxima: векторная демонстрация
- Комфортное программирование на Лиспе - проект« Wikify | Эпизод 2 в 10:00 по тихоокеанскому стандартному времени »
- Common Lisp и C ++ 17 Живой поток кодирования | TinyCDN CFFI Interop | Эпизод 13
- Выращивание компилятора Лиспа - Амстердам Лисп
- Веб-разработка на Emacs, Common Lisp и Clojurescript - Potato (Slack-подобный)
Обсуждение
- Лисп и удаленный агент - он же Лисп в космическом корабле - с AMA Рона Гаррета
- Как сделать (Common) Lisp популярным?
- Отзыв нового пользователя LispWorks (как дела у LispWorks?)
- Как вы обычно используете однажды написанную программу?
- Структуры против параметрического полиморфизма (ответ на сообщение« переход с Common Lisp на Julia - мысли? )» Также это обсуждение
- Как работать над проектом и правильно отслеживать зависимости?
- Кто-нибудь еще ненавидит LOOP?
- Что нужно, чтобы понять истинную мощь Лиспа?
- Как Lisp облегчил вам жизнь?
- Следует ли по возможности избегать использования локальных переменных при функциональном программировании?
- Является ли ABCL активным проектом и поддерживает ли он JRE 1.11?
- Реализовали ли когда-нибудь Gnu Coreutils на Лиспе? Если нет, будет ли это стоящий проект?
- Общий Лисп и машинное обучение в наши дни
- Кто-нибудь рассматривал или начинал проект по написанию реализации CL на WebAssembly?
- Что посоветуете для работы с базами данных SQL? Какой у вас опыт работы с Mito? и интерфейс только для sqlite: cl-sqlite или cl-dbi? и существует ли ORM, который генерирует классы из определений таблиц?
Изучение Лиспа
- Я хочу попробовать Lisp, с чего мне начать?
- Какой шепелявый диалект для приложений« реального мира ?»
- Что предлагают коммерческие Lisps, чего не дает освобождение?
- Какой (не Clojure) Lisp изучать в первую очередь?
- Может ли CL реализовать ключевое слово Clojure как синтаксис функции?
- Почему вы решили изучать Лисп?
- Как вы собираетесь начать проект Common Lisp? Новичок в поисках указателей .
- Как новичок, чего мне будет не хватать, если я выберу Racket вместо Common Lisp? Или, если мне случится выучить оба в будущем, выбор Racket / Common Lisp сейчас будет иметь смысл?
- Что могут делать другие языки, чего не может Lisp?
Common Lisp VS…
- Как сообщество Common Lisp выжило без эквивалента clojure.spec?
- Есть ли Лисп, который считается« превосходным в отношении обработки ошибок?»
- Обзор диалекта Лиспа
- Вызов Юлии
- Подводные камни Python?
- Как программист на Common Lisp смотрит на пользователей других языков (юмор)
- Исследователи школы Миллера помогают раздвинуть границы языков программирования в биологии
- Лисп против Java (подумал, ребята, вам это может показаться смешным)
- На каких еще языках, кроме Лиспа, вам нравится программировать?
Наслаждайтесь материалом, и до скорой встречи!
Спасибо /u/defunkydrummer
за вычитку.
Исправьте или улучшите эту статью на Gitlab.