about summary refs log tree commit diff stats
path: root/linux/300.txt
diff options
context:
space:
mode:
Diffstat (limited to 'linux/300.txt')
-rw-r--r--linux/300.txt16
1 files changed, 16 insertions, 0 deletions
diff --git a/linux/300.txt b/linux/300.txt
new file mode 100644
index 00000000..62413330
--- /dev/null
+++ b/linux/300.txt
@@ -0,0 +1,16 @@
+Layers in the 3xx series use all the available syntax sugar for SubX programs.
+Functions here can 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.