Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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.

ADRDecisionArea
0001FoundationsLanguage
0002Phase 2 compiler coreCompiler
0003Phase 3 agent loop and tolerant inputAgents
0004Native execution tiersNative
0005Native compilation by defaultNative
0006Garbage collection for native codeNative
0007Removing runtime checks the compiler can proveNative
0008In-place reuse, pipeline fusion, and speed-first memoryNative
0009SMT-checked contractsContracts
0010Effect handlers and generatorsLanguage
0011Automatic data parallelism for pure pipelinesNative
0012The sys profile and the ownership checkerSystems
0013Structured threads, atomics and channelsSystems
0014C FFI and binding generationSystems
0015Vectorizable fused pipelinesNative
0016Deployer and effects-as-IAMDeploy
0017The bare profile, MMIO, interrupts and QEMU targetsSystems
0018Standard library toward C++ coverageLibrary
0019Data migrations, hot swap and replayDeploy
0020GPU kernelsGPU
0021Multi-agent sync, replicas and the global check cacheAgents
0022Per-definition native objects, proven rewrites and cost-driven choicesNative
0023Asynchronous launches, shared memory, atomics, 2D grids and helpersGPU
0024LLVM backend, PGO and LTO, inline asm, Cortex-M, fixed arrays and staticsSystems
0025Hardening pass before v0.2.0Quality
0026Packages and dependenciesPackages
0027Traits, bounds, operator traits and deriveLanguage
0028Block lambdas and trait methods as valuesLanguage
0029Or-patterns, list patterns and if e is pLanguage
0030Hole filling and suggested contractsAgents
0031The language serverTooling
0032e is p anywhere, guard clauses and long linesLanguage
0033Freeing at last use, in front of the collectorNative
0034Running an unchanged program from the cacheNative
0035HTTP client and server, with TLS, configuration and structured logsLibrary
0036Source-level debugging with lldb and gdbTooling
0037Databases, crypto, compression and CSVLibrary
0038The package registry: index, snapshots, checks and the publish loopPackages
0039Scoped package names tied to GitHub ownersPackages
0040sspur fmt breaks long linesTooling
0041Cold native builds of big packagesNative
0042sspur fmt keeps comments, and the last syntax fixes before 1.0Language
0043The hot functions first in the sspur binaryTooling
0044W_CONVERSION_MAY_TRAP: proving F64 to Int conversions safeTooling