Skip to content

v0.8

Latest

Choose a tag to compare

@mdbergmann mdbergmann released this 31 Aug 20:05

CL-Amiga 0.8

Highlights

MUI from Lisp

  • AMIGA.MUI ((require "amiga/mui")) — build MUI GUIs from Lisp: NEW-OBJECT by class name with nested objects as tag values, MAKE-OBJECT, NOTIFY, APPLICATION-INPUT, REQUEST.
  • Lisp functions as callbacks on the targetFFI: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 of AMIGA.REACTION and 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 under gadgets/, images/, classes/.
  • AMIGA.REACTION helpers, 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/amiga ships precompiled so an Amiga never compiles ~1 MB of generated source.

Heap images

  • EXT:SAVE-IMAGE snapshots a whole session — packages, functions, CLOS, your data — and --image (or an auto-discovered clamiga.img) restores it without booting.
  • :SHAKE-BINDINGS drops the binding tables from a delivered image.

Native Windows build

  • make host in an MSYS2 mingw shell produces a real .exe — threads, sockets, TLS, FFI, generational GC, debugger, REPL. Plus a windows-11-arm CI job.

REPL, debugger and inspector

  • The REPL echoes every value a form returns; (values) prints nothing at all.
  • Ctrl-D at the Debug> and Inspect> 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-STREAM with 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.c port).
  • 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's INTO accumulators hold their list in order at every step, not only in the epilogue.
  • REQUIRE accepts symbol and keyword module names on case-sensitive file systems, and never reloads an already-provided module.
  • NTH accepts 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.o builds 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 in AMIGA.BOOPSI and are re-exported from it: amiga.reaction:do-method is amiga.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.