Design decisions
Every change that shapes the language, the compiler or the tools has an architecture decision record (ADR). Each one states the context, the options considered, what was decided and why, and what was measured afterwards. They are the best place to find out why SSPUR works the way it does, and what was tried and rejected.
| ADR | Decision | Area |
|---|---|---|
| 0001 | Foundations | Language |
| 0002 | Phase 2 compiler core | Compiler |
| 0003 | Phase 3 agent loop and tolerant input | Agents |
| 0004 | Native execution tiers | Native |
| 0005 | Native compilation by default | Native |
| 0006 | Garbage collection for native code | Native |
| 0007 | Removing runtime checks the compiler can prove | Native |
| 0008 | In-place reuse, pipeline fusion, and speed-first memory | Native |
| 0009 | SMT-checked contracts | Contracts |
| 0010 | Effect handlers and generators | Language |
| 0011 | Automatic data parallelism for pure pipelines | Native |
| 0012 | The sys profile and the ownership checker | Systems |
| 0013 | Structured threads, atomics and channels | Systems |
| 0014 | C FFI and binding generation | Systems |
| 0015 | Vectorizable fused pipelines | Native |
| 0016 | Deployer and effects-as-IAM | Deploy |
| 0017 | The bare profile, MMIO, interrupts and QEMU targets | Systems |
| 0018 | Standard library toward C++ coverage | Library |
| 0019 | Data migrations, hot swap and replay | Deploy |
| 0020 | GPU kernels | GPU |
| 0021 | Multi-agent sync, replicas and the global check cache | Agents |
| 0022 | Per-definition native objects, proven rewrites and cost-driven choices | Native |
| 0023 | Asynchronous launches, shared memory, atomics, 2D grids and helpers | GPU |
| 0024 | LLVM backend, PGO and LTO, inline asm, Cortex-M, fixed arrays and statics | Systems |
| 0025 | Hardening pass before v0.2.0 | Quality |
| 0026 | Packages and dependencies | Packages |
| 0027 | Traits, bounds, operator traits and derive | Language |
| 0028 | Block lambdas and trait methods as values | Language |
| 0029 | Or-patterns, list patterns and if e is p | Language |
| 0030 | Hole filling and suggested contracts | Agents |
| 0031 | The language server | Tooling |
| 0032 | e is p anywhere, guard clauses and long lines | Language |
| 0033 | Freeing at last use, in front of the collector | Native |
| 0034 | Running an unchanged program from the cache | Native |
| 0035 | HTTP client and server, with TLS, configuration and structured logs | Library |
| 0036 | Source-level debugging with lldb and gdb | Tooling |
| 0037 | Databases, crypto, compression and CSV | Library |
| 0038 | The package registry: index, snapshots, checks and the publish loop | Packages |
| 0039 | Scoped package names tied to GitHub owners | Packages |
| 0040 | sspur fmt breaks long lines | Tooling |
| 0041 | Cold native builds of big packages | Native |
| 0042 | sspur fmt keeps comments, and the last syntax fixes before 1.0 | Language |
| 0043 | The hot functions first in the sspur binary | Tooling |
| 0044 | W_CONVERSION_MAY_TRAP: proving F64 to Int conversions safe | Tooling |