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
|
options, the exhaustive matching, and whatever a second ML surface would
|
||||||
eventually add if the deferred syntax question ever reopens.
|
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
|
** handler-case, decided 2026-09-19
|
||||||
Flan has handler-bind, which is the resuming handler: it runs where the
|
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
|
condition was signalled, with the stack still standing, and carries on by
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user