Arithmetic does not fork across the spaces; the tiebreaker stops at semantics
This commit is contained in:
parent
4f060d07db
commit
9611fce108
13
FIX.org
13
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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user