From 9611fce10813d01c78f7c30b6e2a127222ad2814 Mon Sep 17 00:00:00 2001 From: Joseph Ferano Date: Sun, 20 Sep 2026 11:29:20 +0700 Subject: [PATCH] Arithmetic does not fork across the spaces; the tiebreaker stops at semantics --- FIX.org | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/FIX.org b/FIX.org index 3e83526..bc346c3 100644 --- a/FIX.org +++ b/FIX.org @@ -615,6 +615,19 @@ The ML share is the part neither model supplies — the type system, the options, the exhaustive matching, and whatever a second ML surface would eventually add if the deferred syntax question ever reopens. +** Arithmetic semantics do not fork across the two spaces, decided 2026-09-20 +One operator, one meaning, both sides. `/` on integers truncates toward zero +and `%` is its remainder, sign following the dividend — LLVM's sdiv/srem, the +x86 backend's cqo/idiv, and flan_dyn.c's arith all already agree, and that +agreement is now the rule rather than a coincidence. The author's call: this +sort of semantics is normalized across the dynamic and static spaces, so the +Clojure tiebreaker above does not reach it. Clojure's flooring `mod` (sign of +the divisor) is NOT to be added as a dyn-side-only behavior of `%`; if a +flooring mod is ever wanted it is a second, separately named operation +available to both spaces, the way Common Lisp keeps `rem` and `mod` side by +side. Division by zero and INT64_MIN / -1 trap identically on both sides, +and float `%` is fmod on both backends and in dyn. + ** handler-case, decided 2026-09-19 Flan has handler-bind, which is the resuming handler: it runs where the condition was signalled, with the stack still standing, and carries on by