Skip to content

v0.7

Latest

Choose a tag to compare

@mdbergmann mdbergmann released this 16 Aug 11:07
· 14 commits to master since this release

CL-Amiga 0.7

Highlights

Native TLS — HTTPS everywhere

  • EXT:SOCKET-START-TLS upgrades a connected TCP socket stream to TLS in place: OpenSSL 1.1.1/3.x on the host (loaded via dlopen, no build dependency), AmiSSL v5 on AmigaOS/MorphOS.
    Companions: TLS-AVAILABLE-P, TLS-VERSION, SOCKET-TLS-P, TLS-PEER-CERTIFICATE.
  • A bundled cl+ssl facade (in lib/shims, auto-registered on ASDF's central registry — no installation step) gives drakma and hunchentoot HTTPS out of the box. CLAMIGA_NO_SHIMS=1 (host)
    / SetEnv CLAMIGA_NO_SHIMS 1 (Amiga) opts out.
  • The AmiSSL SDK headers are vendored in-repo — a plain checkout cross-compiles with TLS, no setup script.
  • Verified end-to-end on real hardware: drakma HTTPS via AmiSSL on a Vampire V4 (68k) and natively on MorphOS.

ARexx development port

  • (require "amiga/arexx") + (amiga.arexx:start) opens a public CLAMIGA ARexx port: drive a running clamiga from any ARexx-capable Amiga editor — LOAD, COMPILE-FILE, EVAL,
    IN-PACKAGE, LASTRESULT, PING, VERSION. A failing load answers with every diagnostic in the file (with line numbers), and the return-code ladder (0/5/10/20) is FAILAT-friendly. The
    on-Amiga counterpart to the SLY setup — no Emacs, no TCP, no host machine.
  • Lisp can also send ARexx commands to any application's port.

Unicode / wide strings

  • The MorphOS build now ships full Unicode (CHAR-CODE-LIMIT > 65533) with an adaptive representation — 8-bit strings stay 8-bit, UTF-32 only for strings that actually contain characters above
  1. Unblocks flexi-streams/drakma, which hard-require it.
  • New WIDE=1 cross-build knob for a wide-string 68k AmigaOS variant (composes with FPU=1). Released 68k binaries stay narrow to keep the 68020/8MB baseline lean.
  • Condition reports survive non-ASCII text — (error "…ü…") now prints the message instead of failing.

Floats: exact, FPU-independent printing and reading

  • Float↔text conversion no longer goes through libc's %g/strtod: shortest round-trip digits (Steele-White/Burger-Dybvig) and correctly rounded parsing, in core, with integer arithmetic only.
    Every printed float reads back bit-identically — on softfloat, real 68881/68882, and FPGA FPUs (Vampire/Apollo) alike.
  • New hard-float FPU=1 build variant (68881/68882): per-task/thread FPCR setup, excess-precision-safe FLOOR/CEILING/ROUND/TRUNCATE. Binary releases ship bin/aos3 (soft-float, any
    68020+) plus bin/aos3-fpu.

Debugger & backtraces

  • :bt N / :bt all — full backtraces on demand. The hard 20-frame window and the invisible 2KB formatting buffer are gone; expressions typed at the Debug> prompt evaluate on top of the
    error-time frames instead of destroying them.
  • Backtraces now show real names where they used to show <anonymous>: FLET/LABELS locals and CLOS method bodies carry their names, and a nested lambda no longer steals its enclosing function's
    name.

Loader & threading correctness

  • LOAD/COMPILE-FILE bind *PACKAGE*/*READTABLE* as true dynamic bindings (CLHS 23.2.7/24.2.2) — an error thrown out of a load no longer leaves the caller in a switched package. (This single
    fix eliminated 156 cascading failures in one real-hardware suite run.)
  • LOAD's per-form error recovery now survives an enclosing UNWIND-PROTECT, and a THROW out of a cleanup running an error unwind correctly abandons the original transfer (CLHS 5.2).
  • *PACKAGE* is per-thread at the C level — one thread binding it (e.g. Sly's control thread) no longer poisons readers/compiles running in other threads.
  • MP:MAKE-THREAD takes :stack-size, :vm-stack-size, :vm-frames, :nlx-frames (enlarge-only); Amiga worker threads inherit the launching console — or can open their own CON: window and
    run a REPL in it.

Amiga API additions

  • AMIGA.INTUITION:QUERY-OVERSCAN / DISPLAY-MODE-HEIGHT — ask the display database how tall a mode really is (PAL 256 vs NTSC 200 vs RTG), so programs can open correctly sized screens. Also
    fixes the underlying register order — the call had never once succeeded.
  • MSG-RAW-KEY — the qualifier-blind raw keycode behind a VANILLAKEY message, immune to wedged-modifier keymap lies.

Fixes

  • FORMAT ~F without a d parameter now prints true free-format fixed-point per CLHS 22.3.3.1: the decimal point is always present (87.0, not 87) and large/small magnitudes expand instead of
    switching to exponent notation (150000000.0, 0.00001).
  • COMPILE-FILE no longer writes stray output to stderr — the buffered bytes froze detached MorphOS processes at exit.
  • Source-compiling boot.lisp/clos.lisp at boot (stale-FASL fallback) now produces the same CLOS as the shipped FASLs — 47 internal helper names were missing from the pre-intern list, silently
    dropping dispatch self-heal, accessor ICs, and defstruct MOP registration.
  • MorphOS build fixes: ARexx SDK type differences; the stray-stderr exit freeze above.

Compatibility notes

  • FASL version 25 → 29 — stale FASL caches are rejected and rebuild transparently (the cache re-keys to cl-amiga-0.7-fasl29).
  • The cl+ssl/swank shims moved from contrib/shims (quicklisp symlink scheme) to lib/shims (auto-registered); make install-shims now just removes the old symlinks.