about summary refs log tree commit diff stats
path: root/300.txt
diff options
context:
space:
mode:
authorKartik Agaram <vc@akkartik.com>2020-07-13 20:57:35 -0700
committerKartik Agaram <vc@akkartik.com>2020-07-13 21:52:26 -0700
commite2b55208b22f3c97dfbc866d8d555b7a7c614632 (patch)
tree5b7f29f1a09a53f91b97cd03f1305afddd855d1d /300.txt
parent6b8a3a94b1ae33fe053a13a4bbf96d9dc5eeb4b2 (diff)
downloadmu-e2b55208b22f3c97dfbc866d8d555b7a7c614632.tar.gz
6643
Diffstat (limited to '300.txt')
-rw-r--r--300.txt18
1 files changed, 16 insertions, 2 deletions
diff --git a/300.txt b/300.txt
index 1544081b..a151656f 100644
--- a/300.txt
+++ b/300.txt
@@ -1,3 +1,17 @@
 Layers in the 3xx series use all the available syntax sugar for SubX programs.
-For the most part they're intended to be used by the Mu translator:
-  apps/mu.subx
+They're used by the Mu translator (apps/mu.subx) and can also be called from
+Mu programs if they meet certain criteria:
+
+  - There's a signature for them in 400.mu
+  - Inouts on the stack, outputs in registers
+  - Valid Mu types everywhere (Mu's type system isn't expressive enough for
+    everything SubX does in rare situations.)
+  - No way to for an `addr` to escape a function. No `(... addr ... addr ...)`
+    inouts, and no `(... addr ...)` outputs.
+
+While functions _can_ be called, not all SubX functions meeting these criteria
+_should_ be called. In particular, avoid exporting functions that could be
+misused. A classic example is trying to add a `size-of` operator. If you're
+doing that you're likely going to rely on programmers to use it correctly. Mu
+tries to be idiot-proof. Even if SubX requires greater care, using SubX
+primitives from Mu should not.