Historical internal name "uncommonlisp" retired in favor of the
public name "lumbda" ahead of lumbda.com going live. Scope of
this commit:
Source files renamed:
uncommonlisp.py -> lumbda.py
asm/uncommonlisp.s -> asm/lumbda.s
c/uncommonlisp.h -> c/lumbda.h
whitepaper/uncommonlisp-whitepaper -> whitepaper/lumbda-whitepaper (.rst + .pdf)
Binaries renamed (tracked ones; c/ was always gitignored):
asm/uncommonlisp, asm/uncommonlisp-gc, asm/uncommonlisp.o,
asm/uncommonlisp-gc.o -> asm/lumbda(-gc)(.o)
c/.gitignore -> ignores lumbda
Internal string updates (sed pass ordered longest-first):
asm/uncommonlisp -> asm/lumbda
c/uncommonlisp -> c/lumbda
uncommonlisp.py -> lumbda.py
UNCOMMONLISP_BIN -> LUMBDA_BIN (asm/test.sh env var)
"uncommonlisp> " -> "lumbda> " (asm REPL prompt baked into binary)
UNCOMMONLISP -> LUMBDA (macros, comments)
uncommonlisp -> lumbda (prose)
Binary portal magic updated:
"ULPORTAL" -> "LUMBDAB1" # "Lumbda Binary v1"
Old portal files are not backward-compatible — this is a deliberate
break since it's the rename moment. S-expression portals already
carry their own ";; lumbda-portal v1" header and remain cleanly
versioned.
WHITEPAPER.pdf / WHITEPAPER.rst symlinks repointed to the renamed
files. Makefile's whitepaper target targets lumbda-whitepaper.pdf.
Not changed (intentional, separate phases):
- Filesystem directory /home/fox/git/uncommonlisp itself
(fox renames locally and the gitlab repo URL in a follow-up)
- tests.py hardcoded cwd=/home/fox/git/uncommonlisp
(matches the current on-disk location; will flip when the
directory rename ships)
- Git history (immutable; old commits still say uncommonlisp,
which is correct — that's what they were)
Verified:
137 asm no-GC + 137 asm GC + 571 Python + 83 C + 189 shared
functional tests all pass under the new names.
bench-gc-http (2000 req): all 4 cells behave as expected
(cells 1/2 flat, 3 leaks, 4 bounded at 1 chunk).
Python REPL, C REPL, asm REPL all start cleanly.
217 lines
7.7 KiB
Makefile
217 lines
7.7 KiB
Makefile
# ═══════════════════════════════════════════════════════════════════
|
||
# lumbda — Python + C + Assembly implementations
|
||
# ═══════════════════════════════════════════════════════════════════
|
||
#
|
||
# Implementations:
|
||
# Python lumbda.py bytecode VM, full continuations, portal
|
||
# C c/lumbda tree-walker + bytecode VM + x86_64 JIT
|
||
# Assembly asm/lumbda pure x86_64, no libc, 13KB binary
|
||
#
|
||
# Test suites:
|
||
# make test Python unit/integration (571 tests)
|
||
# make c-test C unit/integration + JIT (76 tests) + functional (114)
|
||
# make asm-test Assembly unit/integration/functional (75 tests)
|
||
# make functional-test Shared .lsp suite in Python + C (114 each)
|
||
# make test-all Everything (836 total)
|
||
#
|
||
# Benchmarks (each generates reproducible numbers referenced in the
|
||
# whitepaper; hardware-independent commands, safety envelope built in):
|
||
# make bench Python bench.py (tree-walker vs bytecode VM)
|
||
# make c-bench C unit-level microbenchmarks
|
||
# make bench-3way §6.4: Python vs C vs asm on sum-to/ack
|
||
# make bench-portal §7.5: S-exp/JSON/binary portal save+load timings
|
||
# make bench-portal-cross §7.2: 3x3 cross-impl portal save×load matrix
|
||
# make bench-web §11.3: HTTP benchmark vs busybox + python http.server
|
||
# make bench-rpc-chain §11.4: Py → C relay → asm backend chain timing
|
||
# make bench-proof §8.6: EML proof — Lean 4 vs Lumbda tiers
|
||
# make bench-all run every bench above back to back
|
||
# make friction head-to-head timing: Python vs C vs CPython
|
||
#
|
||
# Other:
|
||
# make examples Run examples in Python + C, compare output
|
||
# make docs Generate architecture diagrams
|
||
# make whitepaper Build PDF whitepaper
|
||
# make clean-all Clean everything
|
||
|
||
all: test
|
||
|
||
# ─── Python implementation ────────────────────────────────────────
|
||
|
||
test:
|
||
python3 tests.py
|
||
|
||
test-verbose:
|
||
python3 tests.py -v
|
||
|
||
bench:
|
||
python3 bench.py
|
||
|
||
bench-verbose:
|
||
python3 bench.py -v
|
||
|
||
repl:
|
||
python3 lumbda.py
|
||
|
||
lint:
|
||
python3 -m py_compile lumbda.py
|
||
python3 -m py_compile tests.py
|
||
python3 -m py_compile bench.py
|
||
|
||
# ─── C implementation ─────────────────────────────────────────────
|
||
|
||
c-build:
|
||
$(MAKE) -C c all
|
||
|
||
c-test: c-build
|
||
$(MAKE) -C c test
|
||
@echo "── C functional tests (shared .lsp suite) ──"
|
||
./c/lumbda tests/functional.lsp
|
||
|
||
c-bench: c-build
|
||
$(MAKE) -C c bench
|
||
|
||
c-repl: c-build
|
||
./c/lumbda
|
||
|
||
c-clean:
|
||
$(MAKE) -C c clean
|
||
|
||
# ─── Assembly implementation ──────────────────────────────────────
|
||
|
||
asm-build:
|
||
$(MAKE) -C asm all
|
||
|
||
asm-test: asm-build
|
||
$(MAKE) -C asm test
|
||
|
||
asm-repl: asm-build
|
||
./asm/lumbda
|
||
|
||
asm-clean:
|
||
$(MAKE) -C asm clean
|
||
|
||
# ─── All implementations ─────────────────────────────────────────
|
||
|
||
functional-test: c-build
|
||
@echo "═══ Shared functional tests (114 tests) ═══"
|
||
@echo "── Python ──"
|
||
@python3 lumbda.py --fast tests/functional.lsp | tail -3
|
||
@echo "── C ──"
|
||
@./c/lumbda tests/functional.lsp | tail -3
|
||
|
||
test-all: test c-test asm-test functional-test
|
||
@echo "════════════════════════════════════════════════════"
|
||
@echo "All tests passed (Python + C + Assembly + functional)"
|
||
|
||
# ─── Benchmarks (reproducible; referenced in whitepaper §6–§11) ───
|
||
|
||
bench-3way: c-build asm-build
|
||
@bash tests/bench-3way.sh
|
||
|
||
bench-portal: c-build asm-build
|
||
@bash tests/portal-benchmark.sh
|
||
|
||
bench-portal-cross: c-build asm-build
|
||
@bash tests/portal-cross-test.sh
|
||
|
||
bench-web: c-build asm-build
|
||
@bash tests/web-benchmark.sh
|
||
|
||
bench-rpc-chain: c-build asm-build
|
||
@bash tests/rpc-chain-bench.sh
|
||
|
||
bench-proof: c-build asm-build
|
||
@bash tests/bench-proof.sh
|
||
|
||
bench-hashset: asm-build
|
||
@bash tests/bench-hashset.sh
|
||
|
||
bench-gc: asm-build
|
||
@bash tests/bench-gc-memory.sh
|
||
|
||
bench-gc-arena: asm-build
|
||
@bash tests/bench-gc-arena.sh
|
||
|
||
bench-gc-adaptive: asm-build
|
||
@bash tests/bench-gc-adaptive.sh
|
||
|
||
bench-gc-http: asm-build
|
||
@bash tests/bench-gc-http.sh
|
||
|
||
bench-all: bench c-bench bench-3way bench-portal bench-portal-cross bench-web bench-rpc-chain bench-proof
|
||
@echo "═══════════════════════════════════════════════════════════"
|
||
@echo "All benchmarks complete. Numbers in the whitepaper §6.4,"
|
||
@echo "§7.2, §7.5, §11.3, §11.4 are reproducible from these targets."
|
||
|
||
# ─── Examples ─────────────────────────────────────────────────────
|
||
|
||
examples: c-build
|
||
@echo "═══ fibonacci.lsp ═══"
|
||
@echo "--- Python ---" && python3 lumbda.py --fast examples/fibonacci.lsp
|
||
@echo "--- C ---" && ./c/lumbda examples/fibonacci.lsp
|
||
@echo
|
||
@echo "═══ mergesort.lsp ═══"
|
||
@echo "--- Python ---" && python3 lumbda.py --fast examples/mergesort.lsp
|
||
@echo "--- C ---" && ./c/lumbda examples/mergesort.lsp
|
||
@echo
|
||
@echo "═══ objects.lsp ═══"
|
||
@echo "--- Python ---" && python3 lumbda.py examples/objects.lsp
|
||
@echo "--- C ---" && ./c/lumbda examples/objects.lsp
|
||
|
||
# ─── Friction benchmark ──────────────────────────────────────────
|
||
|
||
friction: c-build asm-build
|
||
bash friction.sh
|
||
|
||
# ─── Documentation ────────────────────────────────────────────────
|
||
|
||
DOT_FILES := $(wildcard docs/*.dot)
|
||
DOT_PNGS := $(DOT_FILES:.dot=.png)
|
||
|
||
docs: $(DOT_PNGS)
|
||
|
||
docs/%.png: docs/%.dot
|
||
dot -Tpng $< -o $@
|
||
|
||
# ─── Whitepaper ───────────────────────────────────────────────────
|
||
|
||
VENV := whitepaper/.venv
|
||
RST := whitepaper/lumbda-whitepaper.rst
|
||
PDF := whitepaper/lumbda-whitepaper.pdf
|
||
STYLE := whitepaper/whitepaper.style
|
||
|
||
$(VENV)/bin/rst2pdf:
|
||
python3 -m venv $(VENV)
|
||
$(VENV)/bin/pip install --upgrade pip
|
||
$(VENV)/bin/pip install rst2pdf
|
||
|
||
whitepaper: $(PDF)
|
||
|
||
$(PDF): $(RST) $(STYLE) $(VENV)/bin/rst2pdf
|
||
cd whitepaper && ../$(<D)/.venv/bin/rst2pdf \
|
||
-s whitepaper.style \
|
||
--fit-background-mode=scale \
|
||
lumbda-whitepaper.rst \
|
||
-o lumbda-whitepaper.pdf
|
||
@ln -sf lumbda-whitepaper.pdf whitepaper/WHITEPAPER.pdf
|
||
@echo "Built: $(PDF)"
|
||
|
||
# ─── Clean ────────────────────────────────────────────────────────
|
||
|
||
clean:
|
||
rm -rf __pycache__ *.pyc
|
||
|
||
clean-whitepaper:
|
||
rm -rf $(VENV) $(PDF) whitepaper/WHITEPAPER.pdf
|
||
|
||
clean-docs:
|
||
rm -f docs/*.png
|
||
|
||
clean-all: clean clean-whitepaper clean-docs c-clean asm-clean
|
||
|
||
.PHONY: all test test-verbose bench bench-verbose repl lint \
|
||
c-build c-test c-bench c-repl c-clean \
|
||
asm-build asm-test asm-repl asm-clean \
|
||
test-all bench-all examples friction functional-test \
|
||
bench-3way bench-portal bench-portal-cross bench-web bench-rpc-chain bench-proof \
|
||
docs whitepaper clean clean-whitepaper clean-docs clean-all
|