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.