CL-Amiga 0.8
Highlights
MUI from Lisp
AMIGA.MUI((require "amiga/mui")) — build MUI GUIs from Lisp:NEW-OBJECTby class name with nested objects as tag values,MAKE-OBJECT,NOTIFY,APPLICATION-INPUT,REQUEST.- Lisp functions as callbacks on the target —
FFI:MAKE-CALLBACK(m68k stub + MorphOS): MUI custom classes whose dispatcher is a Lisp function, layout hooks, list hooks. - Raw muimaster layer generated from
libraries/mui.h: 26 functions and 891 constants, merged across MUI 3.8, MUI 5 and MorphOS. AMIGA.BOOPSI— the toolkit-neutral half (memory pools, tag lists,DO-METHOD,GET-ATTR/SET-ATTRS), split out ofAMIGA.REACTIONand shared by both toolkits. Works on a bare OS 3.1 with no toolkit installed.- Eight ported MUI SDK examples in
examples/amiga/mui/, verified on AmigaOS 3.9 (MUI 3.8) and MorphOS (MUI 4).
Raw OS bindings for the whole system
lib/amiga/raw/**— 1:1 bindings generated from the NDK 3.2 and MorphOS SDKs.(require "amiga/raw/intuition"), and the same for every other library; ReAction classes undergadgets/,images/,classes/.AMIGA.REACTIONhelpers, with ports of the NDK's ReAction examples.- They cost almost nothing now: FFI stub descriptors and demand-interned binding tables cut the common raw modules from 1.42 MB to 0.18 MB of heap, and
lib/amigaships precompiled so an Amiga never compiles ~1 MB of generated source.
Heap images
EXT:SAVE-IMAGEsnapshots a whole session — packages, functions, CLOS, your data — and--image(or an auto-discoveredclamiga.img) restores it without booting.:SHAKE-BINDINGSdrops the binding tables from a delivered image.
Native Windows build
make hostin an MSYS2 mingw shell produces a real.exe— threads, sockets, TLS, FFI, generational GC, debugger, REPL. Plus awindows-11-armCI job.
REPL, debugger and inspector
- The REPL echoes every value a form returns;
(values)prints nothing at all. - Ctrl-D at the
Debug>andInspect>prompts returns to the caller instead of ending the session. - CLHS-conforming string escapes, printing and multi-line input at the prompt.
New in the library
MAKE-ECHO-STREAMwith its component accessors — the last composite stream kind.MP:COMPARE-AND-SWAP/CAS/ATOMIC-INCF/ATOMIC-DECF; backs bordeaux-threads v2's atomic API.EXT:*EXIT-HOOKS*— user cleanup on every normal exit path.AMIGA.ASYNCIO— double-buffered file I/O straight over DOS packets (NDK AsynchIO port).AMIGA.IFF— IFF reading over iffparse (sift.cport).make install/make uninstall; an installed clamiga finds<prefix>/lib/clamiga/on its own, from any directory.- New gfx examples: NDK V39 screen double-buffering and RKM hardware sprites.
Fixes
- CLOS class redefinition updates the existing metaobject in place (CLHS 4.3.6) — methods specialized on a redefined class keep applying to subclasses defined afterwards.
LOOP'sINTOaccumulators hold their list in order at every step, not only in the epilogue.REQUIREaccepts symbol and keyword module names on case-sensitive file systems, and never reloads an already-provided module.NTHaccepts any non-negative integer and signals on a negative one (CLHS 14.2).- Multiple-values hygiene in the compiler:
(let ((x (floor 7 2))) x)returns one value, not two. - A multithreaded performance regression, bisected and fixed: the Ctrl-C poll counter is per-thread again, and
vm.obuilds without LTO. - The banner names the host it actually runs on — macOS, Linux or Windows — instead of greeting every host build as AmigaOS.
Compatibility notes
- FASL version 29 → 31 — stale FASL caches are rejected and rebuild transparently (the cache re-keys to
cl-amiga-0.8-fasl31). AMIGA.REACTION's toolkit-neutral symbols now live inAMIGA.BOOPSIand are re-exported from it:amiga.reaction:do-methodisamiga.boopsi:do-method, so existing code and examples are unaffected.
Downloads
clamiga-0.8.0-bin.lha / .zip contain bin/aos3 (68020+, soft-float), bin/aos3-fpu (hard-float, needs an FPU), bin/mos (MorphOS PPC, built natively), plus lib/, docs/ and examples/. See README-BINARY.txt inside for which binary to pick.