From e2a74832ef41793a119152151c51412d09e60f7e Mon Sep 17 00:00:00 2001 From: "russell@unturf.com" Date: Sun, 19 Apr 2026 11:21:56 -0400 Subject: [PATCH] www/: static docroot for lumbda.com MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Minimal, monospace, readable. Works as a drop-in docroot for any static server (nginx, caddy, python -m http.server, etc.). Light/dark mode via prefers-color-scheme. No JS, no fonts, no third-party anything. Files: www/index.html landing page (tagline, get-it, four-tier table, portal summary, EML proof blurb, license, whitepaper CTA) www/style.css ~150 lines, CSS vars for theming www/robots.txt allow everything www/404.html referenced by servers that support custom error pages www/whitepaper.pdf -> ../whitepaper/lumbda-whitepaper.pdf (symlink — one source of truth, rebuilds via `make whitepaper` auto-propagate) Smoke-tested with python3 -m http.server: 200 on /, Content-Type: application/pdf for /whitepaper.pdf, Content-Length matches the current 2.67 MB PDF, /robots.txt serves, /nonexistent returns 404. No new build step — docroot is pure static files the existing whitepaper target already produces. A web server configured with docroot=www/ and fallback 404.html has a working lumbda.com today. --- www/404.html | 21 ++++++ www/index.html | 89 ++++++++++++++++++++++++++ www/robots.txt | 2 + www/style.css | 155 +++++++++++++++++++++++++++++++++++++++++++++ www/whitepaper.pdf | 1 + 5 files changed, 268 insertions(+) create mode 100644 www/404.html create mode 100644 www/index.html create mode 100644 www/robots.txt create mode 100644 www/style.css create mode 120000 www/whitepaper.pdf diff --git a/www/404.html b/www/404.html new file mode 100644 index 0000000..10e25d1 --- /dev/null +++ b/www/404.html @@ -0,0 +1,21 @@ + + + + + +404 — Lumbda + + + +
+

404

+

that path resolved to nil

+
+
+

(lookup returned VAL_FALSE. Try the home page or read the whitepaper.)

+
+ + + diff --git a/www/index.html b/www/index.html new file mode 100644 index 0000000..1262a70 --- /dev/null +++ b/www/index.html @@ -0,0 +1,89 @@ + + + + + +Lumbda — feedback is the primitive + + + + + +
+

Lumbda

+

feedback is the primitive

+
+ +
+ +
+

+Lumbda is a Lisp/Scheme-derived language with four independently implemented execution backends sharing one surface syntax and one test suite. A Python tree-walker with an optional bytecode VM, a C implementation that adds an x86_64 JIT, and a pure x86_64 assembly interpreter (~6,600 lines of GNU assembler, ~23 KB stripped, zero external dependencies). Every backend runs the same .lsp source byte-identically, with full first-class continuations, exact rationals, records, and hygienic macros. +

+
+ +
+

Get it

+
git clone https://git.unturf.com/engineering/unturf/lumbda.git
+cd lumbda
+make test-all
+

Run a program in any tier:

+
python3 lumbda.py --fast examples/fibonacci.lsp
+./c/lumbda examples/fibonacci.lsp
+./asm/lumbda < examples/fibonacci.lsp
+
+ +
+

Four tiers, one language

+ + + + + + + + + +
TierLinesBinaryWhat it’s for
Python interpreter + bytecode VM3,743REPL hackability, debugging, reference
C tree-walker + bytecode VM9,164~215 KBdeep recursion, production workloads
C + x86_64 JIT+patches~215 KB7–10× faster than CPython on recursive workloads
Pure x86_64 assembly6,645~23 KBzero-dependency boot, auditability, embedded
Assembly + naive mark-sweep GC + meta-GC arena(same source, GC_NAIVE=1)~27 KBbounded memory without manual arena discipline
+
+ +
+

Portal: feedback across time

+

A continuation is feedback within a process. A portal is feedback across processes. Same primitive, different scope: capture machine state, serialize it, reload it elsewhere, resume. Lumbda ships three portal formats with different trade-offs:

+
    +
  • S-expression portal — Scheme source as the wire protocol. 16 of 16 producer×consumer cells green across Python, C, asm no-GC, and asm GC.
  • +
  • JSON portal — graph-aware, preserves closures and live continuations (Python, C).
  • +
  • Binary heap dump — asm only. 1.5 ms save+resume between two processes.
  • +
+
+ +
+

The EML universality proof

+

A single operator eml(x, y) = exp(x) − ln(y) with the constant 1 generates all elementary functions: exp, ln, arithmetic, negation, complex-plane access, trigonometry. Verified numerically in Python, verified in Lumbda’s own bytecode, proven formally in Lean 4 with zero sorry. Lumbda’s native symbolic-rewrite checker runs the five theorems in 46 ms cold or 7 ms cached — roughly 16× faster than Lean’s cold rebuild on the same hardware.

+
+ +
+

Read the whitepaper

+

Full language reference, tier-by-tier architecture, benchmarks, the meta-GC design, and the universality proof.

+

Lumbda whitepaper (PDF, ~2.7 MB)

+
+ +
+

License

+

AGPL-3.0-only. Public domain for whitepapers, proofs, and disclosures through undefect.com. Companion to unturf.com’s permacomputer project.

+
+ +
+ + + + + diff --git a/www/robots.txt b/www/robots.txt new file mode 100644 index 0000000..c2a49f4 --- /dev/null +++ b/www/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Allow: / diff --git a/www/style.css b/www/style.css new file mode 100644 index 0000000..19e0f00 --- /dev/null +++ b/www/style.css @@ -0,0 +1,155 @@ +/* lumbda.com — minimal, monospace, readable */ + +:root { + --fg: #1a1a1a; + --bg: #fafaf7; + --muted: #666; + --accent: #0b5394; + --rule: #d4d4d0; + --code-bg: #f0ede4; +} + +@media (prefers-color-scheme: dark) { + :root { + --fg: #e8e6e0; + --bg: #161613; + --muted: #9a9892; + --accent: #6fa8dc; + --rule: #3a3a36; + --code-bg: #22221f; + } +} + +* { box-sizing: border-box; } + +html { + font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, "DejaVu Sans Mono", monospace; + font-size: 15px; + line-height: 1.55; + color: var(--fg); + background: var(--bg); +} + +body { + max-width: 720px; + margin: 0 auto; + padding: 2.5rem 1.25rem 4rem; +} + +header { + border-bottom: 1px solid var(--rule); + padding-bottom: 1.5rem; + margin-bottom: 2rem; +} + +header h1 { + font-size: 2.4rem; + margin: 0; + letter-spacing: -0.02em; +} + +.tagline { + color: var(--muted); + margin: 0.25rem 0 0; + font-size: 1rem; +} + +main h2 { + font-size: 1.15rem; + margin-top: 2.5rem; + margin-bottom: 0.75rem; + border-bottom: 1px solid var(--rule); + padding-bottom: 0.25rem; +} + +.lead { + font-size: 1.05rem; + line-height: 1.65; +} + +p { margin: 0.75em 0; } + +a { + color: var(--accent); + text-decoration: underline; + text-decoration-thickness: 1px; + text-underline-offset: 2px; +} + +a:hover { text-decoration-thickness: 2px; } + +code { + background: var(--code-bg); + padding: 1px 4px; + border-radius: 2px; + font-size: 0.92em; +} + +pre { + background: var(--code-bg); + padding: 0.75rem 1rem; + overflow-x: auto; + border-left: 3px solid var(--accent); + font-size: 0.9rem; + line-height: 1.45; +} + +pre code { + background: transparent; + padding: 0; + border-radius: 0; + font-size: inherit; +} + +table { + border-collapse: collapse; + width: 100%; + margin: 1rem 0; + font-size: 0.9rem; +} + +th, td { + text-align: left; + padding: 0.45rem 0.6rem; + border-bottom: 1px solid var(--rule); + vertical-align: top; +} + +th { + font-weight: 600; + color: var(--muted); + border-bottom: 2px solid var(--rule); +} + +tbody tr:last-child td { border-bottom: none; } + +ul { + padding-left: 1.25rem; +} + +li { margin: 0.25rem 0; } + +.cta { + display: inline-block; + margin-top: 0.5rem; + padding: 0.5rem 0.9rem; + border: 1px solid var(--accent); + text-decoration: none; + font-weight: 600; +} + +.cta:hover { + background: var(--accent); + color: var(--bg); +} + +footer { + margin-top: 4rem; + padding-top: 1.5rem; + border-top: 1px solid var(--rule); + color: var(--muted); + font-size: 0.9rem; + text-align: center; +} + +footer a { color: var(--muted); } diff --git a/www/whitepaper.pdf b/www/whitepaper.pdf new file mode 120000 index 0000000..f72e026 --- /dev/null +++ b/www/whitepaper.pdf @@ -0,0 +1 @@ +../whitepaper/lumbda-whitepaper.pdf \ No newline at end of file