Комментарии (11)
- ABCL не поддерживает Android, а Maxima и другие легаси-проекты были удалены из Play Store.
- Пользователи жалуются на производительность ABCL и отсутствие нативных библиотек.
- Некоторые предпочитают NDK-инструменты, чтобы избежать любой зависимости от JVM.
- Проект в браузере выглядит как open-source-альтернатива Mathematica/Maple, но без четкой документации.
Quirks of Common Lisp Types
Типы — это небеса
В CL тип — это множество, и каждый объект принадлежит хотя бы одному.
(type-of 37) → (INTEGER 0 …)
(type-of "漣") → (SIMPLE-ARRAY CHARACTER (1))
(typep 37 'integer) → T, аналогично 'real, 'number, t.
Типы не образуют строгую иерархию: строка всегда string, но не обязательно simple-array.
Типы для корректности
(defun f (n) (+ n "漣")) — компилятор жалуется: "漣" не NUMBER.
(defstruct sky (molecules 0 :type integer))
(make-sky :molecules 1.1) — ошибка типа.
То же для длины массива: (simple-array character (17)) отвергнет строку из 18 символов.
Типы для оптимизации
Подсказки помогают компилятору.
(defun add (n) (+ n 37)) без аннотаций → общий код.
Добавим (declare (type fixnum n)) — генерируется короткая машинная инструкция LEA.
Классы — это земля
Классы реальны: (defclass point () ((x :initarg :x) (y :initarg :y))).
Наследование и множественный диспатч generic-функций работают как в CLOS.
Сердце машины
- «Абстрактные» классы — просто не создают экземпляров.
fixnum— самый быстрый целый, в SBCL 61 бит (63 на 64-битных).
(type-of 4611686018427387904)→(INTEGER 4611686018427387904)— ужеbignum.
Итог
CL даёт строгие типы без потери гибкости: проверки на этапе компиляции и выполнения, оптимизация, но возможность менять код в REPL.
Комментарии (18)
- Участники согласились, что статья преувеличивает гарантии статической проверки типов в Common Lisp: SBCL даёт лишь «вежливые» предупреждения, а стандарт вообще не требует обязательной проверки.
- Обсуждали «квирки» иерархии типов: отношения между string, simple-array и vector уточняли через subtypep и typep; выяснилось, что они связаны отношениями подтипов.
- Отметили особенность «апгрейда» типов элементов массивов: итоговый тип всегда супертип заявленного, причём сохраняются отношения подтипов.
- Вспомнили специальную форму the, которая служит как для оптимизации, так и для runtime-assert’ов, но не даёт жёстких гарантий.
- Пошутили о том, что массив с элементами типа NIL формально считается строкой, поскольку NIL — подтип любого типа, включая CHARACTER.
Lisp from Nothing, Second Edition 🔥 Горячее
LISP FROM NOTHING
344 стр., 2025, Lulu Press, 6"×9", 19 иллюстраций, код бесплатно.
Купить: мягкий переплёт | твёрдый | PDF
Исходники | Превью (PDF) | Опечатки | Видео-обзор
Книга исследует минимальный LISP, способный интерпретировать и компилировать себя, и показывает, каким был хакинг в эпоху перфокарт и мейнфреймов. Во втором издании добавлена глава о связи LISP с λ-исчислением, улучшены макросы и стиль.
Примеры кода
- Метациркулярный интерпретатор: CL, Scheme
- Компилятор (~400 строк): liscmp.lisp.html
- Система: lisp.lisp.html
- Сборщик мусора: gc.lisp.html
Весь код книги (~100 КБ)
λ-исчисление в Scheme (~6 КБ)
Генератор перфокарт Postscript
Обложка главы «Let There Be LISP»
Комментарии (97)
- Читатели восторженно отзываются о сайте и книгах Нильса М. Хольма, называя их «личной поэзией» и «культурными артефактами», созданными ради самого процесса.
- Автор подтверждает: главное для него — красота и простота изложения, а не практическая польза или научная новизна.
- Покупатели жалуются на выбор: «хочется всё сразу», но автор советует начать с одной книги и прислал шпаргалку «какую выбрать».
- Обсуждаются входные требования: книга не для новичков; рекомендуют The Little Schemer, ANSI Common Lisp и A Gentle Introduction.
- Возник спор о названии «Lisp from Nothing» при пометке «не вводная книга»; автор уточняет, что «nothing» значит «с нуля», а не «для нулевых».
Seed: Interactive software environment based on Common Lisp
Seed — интерактивная среда разработки на Common Lisp.
Позволяет писать, отлаживать и запускать код в одном окне, поддерживает REPL, графику и встроенные библиотеки.
Подходит для прототипирования, научных задач и обучения.
Комментарии (21)
- Проект Seed вызывает интерес, но README скуден: не хватает скриншотов и понятного описания.
- Многие сравнивают его с CLOG, который лучше документирован, активнее и имеет больше примеров.
- Разработчик (phantomics) заверяет: Seed не заброшен, старый код заморожен, а новый ветви revival ведётся переписывание.
- Старый Seed можно глянуть на Vimeo и YouTube; новый всё ещё требует Node.js только для сборки JS-библиотек, но не для рантайма.
- Пользователи просят встроить демо прямо в README и убрать зависимость от Node/Gulp, а кто-то мечтает запустить Seed на Mezzano.
Show HN: Using Common Lisp from Inside the Browser
Web Embeddable Common Lisp (WECL) — запуск Common Lisp в браузере через WebAssembly.
Проект экспериментальный; API нестабильны, баг-репорты не принимаются.
Исходники: fossil.turtleware.eu/wecl.
Быстрый старт
Подключите boot.js и wecl.js, пишите код в <script type="text/common-lisp">.
Пример считает обратный отсчёт и выводит «BOOM!».
Демо: easy.html | easy.lisp
JS-FFI
Набор макросов для вызова JavaScript из Lisp:
| макрос | назначение |
|---|---|
define-js-variable |
переменная, выражение подставляется каждый раз |
define-js-object |
объект, сохраняется в хранилище |
define-js-function |
функция |
define-js-method |
метод объекта |
define-js-getter/setter/accessor |
чтение/запись поля |
define-js-script |
шаблон JS-выражения |
define-js-callback |
Lisp-функция, вызываемая из JS |
lambda-js-callback |
анонимный callback |
Типы аргументов: :object, :js-ref, :fixnum, :symbol, :string, :null.
Emacs-интеграция
LIME/SLUG позволяет REPL и отладку прямо из Emacs.
Инъекция в любой сайт
Загрузка WECL в произвольную страницу через bookmarklet или расширение.
Ограничения
- Размер wasm-модуля ≈ 10 МБ (кешируется).
- Нет потоков, FFI неполный, производительность средняя.
Финансирование
Разработка поддерживается подписчиками Patreon.
Комментарии (24)
- Обсуждение началось с альтернативной истории: если бы JS изначально был похож на Lisp, возможно, функциональное программирование стало бы мейнстримом раньше.
- Участники отмечают, что WebAssembly и Gambit-JS уже позволяют писать на Scheme/Common Lisp в браузере, улучшая DX и переиспользование кода.
- Некоторые сомневаются, что Lisp автоматически «функциональнее» JS, и подчеркивают, что императивный стиль часто естественнее.
- Поднимаются риски: рост размера рантайма, проблемы на медленных каналах и возможное доминирование Microsoft, если бы IE/VBScript победил.
Nyxt: The Emacs-like web browser
Nyxt — браузер в духе Emacs, написанный на Common Lisp под BSD-лицензией. Цель — клавиатурное управление и полная расширяемость для разработчиков; Linux — приоритетная платформа.
Проект запущен в 2017 г. Джоном Меркурисом, спонсируется двухчеловечной Atlas. Идея — дать «хороший Emacs-опыт в интернете», но без самого Emacs: технический долг и ограничения плагинов не позволили реализовать задумку иначе. Поддерживаются vi- и CUA-схемы клавиш.
Стабильная ветка 3.12.0 (октябрь 2024) использует WebKitGTK, экспериментально Blink. Обновления безопасности только для последней стабильной версии.
Разрабатывается 4.0: рендер-агностик, WebKitGTK + Electron (из-за производительности и поддержки macOS/Windows). Пока доступен превью-AppImage на Electron; WebKitGTK требует сборки из исходников. Основные изменения — рефакторинг, багфиксы, улучшения UI.
Установка стабильной версии в Linux — Flatpak.
Комментарии (35)
- Пользователи восторжены идеей «Emacs для браузера», но ждут стабильной 4.0 и полной совместимости с сайтами.
- Основные тормозы: отсутствие uBlock Origin/umatrix, странный поиск в модальном окне, проблемы с Electron и сборкой под Guix/Mac.
- Движок — Chromium через Electron, поэтому sandbox-защита сопоставима с Chrome, но «взлом» вне песочницы пугает.
- Критики считают проект хакерским, а не продуктовым: мало внимания UX и «обычным» пользователям.
- Сторонники отвечают: целевая аудитория — энтузиасты Emacs/Luakit, а не массовый рынок.