Hacker News Digest

Тег: #common-lisp

Постов: 6

ECL Runs Maxima in a Browser (mailman3.common-lisp.net)

by seansh • 03 ноября 2025 г. в 06:21 • 107 points

ОригиналHN

#common-lisp#abcl#maxima#android#ndk#jvm

Комментарии (11)

  • ABCL не поддерживает Android, а Maxima и другие легаси-проекты были удалены из Play Store.
  • Пользователи жалуются на производительность ABCL и отсутствие нативных библиотек.
  • Некоторые предпочитают NDK-инструменты, чтобы избежать любой зависимости от JVM.
  • Проект в браузере выглядит как open-source-альтернатива Mathematica/Maple, но без четкой документации.

Quirks of Common Lisp Types (fosskers.ca)

Типы — это небеса

В 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.

by todsacerdoti • 31 августа 2025 г. в 00:06 • 101 points

ОригиналHN

#common-lisp#clos#sbcl#types#optimization#compilation#bignum#fixnum#runtime#type-checking

Комментарии (18)

  • Участники согласились, что статья преувеличивает гарантии статической проверки типов в Common Lisp: SBCL даёт лишь «вежливые» предупреждения, а стандарт вообще не требует обязательной проверки.
  • Обсуждали «квирки» иерархии типов: отношения между string, simple-array и vector уточняли через subtypep и typep; выяснилось, что они связаны отношениями подтипов.
  • Отметили особенность «апгрейда» типов элементов массивов: итоговый тип всегда супертип заявленного, причём сохраняются отношения подтипов.
  • Вспомнили специальную форму the, которая служит как для оптимизации, так и для runtime-assert’ов, но не даёт жёстких гарантий.
  • Пошутили о том, что массив с элементами типа NIL формально считается строкой, поскольку NIL — подтип любого типа, включая CHARACTER.

Lisp from Nothing, Second Edition (t3x.org) 🔥 Горячее

LISP FROM NOTHING
344 стр., 2025, Lulu Press, 6"×9", 19 иллюстраций, код бесплатно.

Купить: мягкий переплёт | твёрдый | PDF
Исходники | Превью (PDF) | Опечатки | Видео-обзор

Книга исследует минимальный LISP, способный интерпретировать и компилировать себя, и показывает, каким был хакинг в эпоху перфокарт и мейнфреймов. Во втором издании добавлена глава о связи LISP с λ-исчислением, улучшены макросы и стиль.

Примеры кода

Весь код книги (~100 КБ)
λ-исчисление в Scheme (~6 КБ)
Генератор перфокарт Postscript
Обложка главы «Let There Be LISP»

by nils-m-holm • 27 августа 2025 г. в 09:50 • 341 points

ОригиналHN

#lisp#scheme#common-lisp#lambda-calculus#compilers#interpreters#garbage-collection#punch-cards#mainframes#nils-m.-holm

Комментарии (97)

  • Читатели восторженно отзываются о сайте и книгах Нильса М. Хольма, называя их «личной поэзией» и «культурными артефактами», созданными ради самого процесса.
  • Автор подтверждает: главное для него — красота и простота изложения, а не практическая польза или научная новизна.
  • Покупатели жалуются на выбор: «хочется всё сразу», но автор советует начать с одной книги и прислал шпаргалку «какую выбрать».
  • Обсуждаются входные требования: книга не для новичков; рекомендуют The Little Schemer, ANSI Common Lisp и A Gentle Introduction.
  • Возник спор о названии «Lisp from Nothing» при пометке «не вводная книга»; автор уточняет, что «nothing» значит «с нуля», а не «для нулевых».

Seed: Interactive software environment based on Common Lisp (github.com)

Seed — интерактивная среда разработки на Common Lisp.
Позволяет писать, отлаживать и запускать код в одном окне, поддерживает REPL, графику и встроенные библиотеки.
Подходит для прототипирования, научных задач и обучения.

by todsacerdoti • 24 августа 2025 г. в 06:57 • 104 points

ОригиналHN

#common-lisp#repl#prototyping#node.js#github

Комментарии (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 (turtleware.eu)

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.

by jackdaniel • 21 августа 2025 г. в 12:08 • 87 points

ОригиналHN

#common-lisp#webassembly#javascript#emacs#functional-programming#web-development

Комментарии (24)

  • Обсуждение началось с альтернативной истории: если бы JS изначально был похож на Lisp, возможно, функциональное программирование стало бы мейнстримом раньше.
  • Участники отмечают, что WebAssembly и Gambit-JS уже позволяют писать на Scheme/Common Lisp в браузере, улучшая DX и переиспользование кода.
  • Некоторые сомневаются, что Lisp автоматически «функциональнее» JS, и подчеркивают, что императивный стиль часто естественнее.
  • Поднимаются риски: рост размера рантайма, проблемы на медленных каналах и возможное доминирование Microsoft, если бы IE/VBScript победил.

Nyxt: The Emacs-like web browser (lwn.net)

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.

by signa11 • 11 августа 2025 г. в 01:46 • 133 points

ОригиналHN

#common-lisp#webkitgtk#blink#electron#chromium#emacs#linux#macos#windows

Комментарии (35)

  • Пользователи восторжены идеей «Emacs для браузера», но ждут стабильной 4.0 и полной совместимости с сайтами.
  • Основные тормозы: отсутствие uBlock Origin/umatrix, странный поиск в модальном окне, проблемы с Electron и сборкой под Guix/Mac.
  • Движок — Chromium через Electron, поэтому sandbox-защита сопоставима с Chrome, но «взлом» вне песочницы пугает.
  • Критики считают проект хакерским, а не продуктовым: мало внимания UX и «обычным» пользователям.
  • Сторонники отвечают: целевая аудитория — энтузиасты Emacs/Luakit, а не массовый рынок.