aboutsummaryrefslogtreecommitdiffstats
path: root/config
diff options
context:
space:
mode:
authoruser <user@clank>2026-08-16 16:16:19 +0200
committeruser <user@clank>2026-08-16 16:16:19 +0200
commita540b74dd3bb04d33a69219487cb2db32f2022f1 (patch)
tree4e21d8c3cf739c0f9cd2e91983e23fd4e796cb63 /config
parentsl0ppty: sin and cos (diff)
downloadslosh-a540b74dd3bb04d33a69219487cb2db32f2022f1.tar.gz
slosh-a540b74dd3bb04d33a69219487cb2db32f2022f1.tar.xz
slosh-a540b74dd3bb04d33a69219487cb2db32f2022f1.zip
sl0ppty: PI is 180
Angles here are degrees, and pi in an angle language is not a number -- it is a half turn. So `PI` is 180, `TAU` is 360, and a formula written the radian way ports across as written: sin(TAU * x / cols) one cycle over the pane's width sin(TAU * p * 3 / perim) three lobes fitted exactly to a border PI / 2 a quarter turn PI / 6 thirty degrees, exactly That last line is the argument. A numeric pi would be 3 in this language, and `3.14159 / 6` in integers is 0 -- so radians cannot express a sixth of a turn here at all, while degrees give it as a whole number. The pun is not a compromise; it is the more precise reading of the two. Which is why there is no `deg2rad` or `rad2deg` beside them, and asking for one says `unknown function`. There is one angle unit. A conversion could only lose the angle (`deg2rad(90)` is 1, and `sin(1)` is nearly nothing) or invent a second scale for the language to disagree with itself about. Spelled-out numbers rather than variables: they read no environment, carry no dependency, and fold into the program like the literals they are. The browser preview learned the same two, from the same table. Verified: 12 cases in `tests/expr_test.c`, including that `deg2rad` and `rad2deg` are refused; the cross-check agrees with the compiler on 700 evaluations, now including `sin(TAU * x / cols)` and friends. Two smaller things ride along, both from the repl. `PI`/`TAU` tab-complete, and its drift test grew a third table to check -- it already caught `sin`/`cos` missing before I did. And it now checks the script *parses* before starting a pane that runs it: I broke the indentation of one line here, and the failure arrived as `IndexError: list index out of range` from a pane that died before its prompt, which is a long way from "line 212".
Diffstat (limited to 'config')
-rw-r--r--config/config.kdl7
1 files changed, 7 insertions, 0 deletions
diff --git a/config/config.kdl b/config/config.kdl
index 6fc59d2..9ee458a 100644
--- a/config/config.kdl
+++ b/config/config.kdl
@@ -475,6 +475,13 @@ states {
// breathe with nothing to rescale. Any angle
// wraps, negative ones included, since `t / 4`
// does not stop at 360.
+// constants PI TAU 180 and 360: pi as an *angle*, which is all it can
+// be here -- a half turn and a whole one. So a
+// radian-shaped formula ports across as written,
+// `sin(TAU * x / cols)` is one cycle over the pane,
+// and the common fractions stay exact where
+// `3.14159 / 6` in integers would be 0. There is no
+// deg2rad/rad2deg: one unit, nothing to convert.
//
// There are no loops and no recursion, on purpose: a config cannot spin, and
// there is nothing to sandbox. An expression that does not compile drops that