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

Proposals

Proposals record design rationale and rejected alternatives. The reference defines current behavior; the backlog tracks future work. If a proposal disagrees with the reference, follow the reference.

Status

Each main proposal opens with a status note linking to the governing reference, identifying differences in what shipped, and naming remaining backlog items. Companion pages identify their parent and whether their examples are hypothetical.

StatusMeaning
ImplementedThe design shipped. The page keeps the rationale.
Partly implementedSome of it shipped. The block says which parts.
Not implementedNothing shipped. The page is the design record for future work.
Investigation completeAn assessment reached a decision; it does not imply feature implementation.

Proposal text retains its original wording: it may describe shipped features as future work or show syntax that never shipped. Proposal code is not compiled by the test suite.

When a change implements or alters a design, update its status note. Move a proposal to completed/ when its agreed scope ships or its investigation concludes without an implementation commitment; retain its rationale and update links and book navigation. Alternatives and future extensions need not ship for the agreed scope to be complete. Keep partly implemented and unimplemented proposals here; retain superseded or abandoned designs separately in archived/ when needed.

The status scan used reference, implementation, and regression coverage at local main commit 74fa81d8 on 2026-10-20; it did not rerun every feature test. Later reviews reconciled HTTP acceptance, error composition, and anonymous sums at 4e40c4fc on 2026-10-23, and entry points, modules, executable lessons, and the next language phase at 161e1c63 on 2026-10-24.

Find a design by topic

TopicStart hereRelated decisions
Rust compiler architecture and performanceCompiler boundariesDiagnostics, frontend/session state, identity and facts, module replay
Runtime-independent networking protocolsCodec, session and driver architectureSession contract, runtime integration, WebSocket acceptance
Executable scripts and embedded metadataSingle-file scriptsModules and entry points, current packages
Mixed-edition packages and language evolutionPackage language editionsCurrent packages, script metadata
Protocol bodies, defaults, final, and private hooksProtocol method bodiesAgreed rules, short programs, existing wrappers and capabilities
Heterogeneous protocol objectsBoxed protocolsExplicit ownership and method contract, implementation design, research evidence
Error compositionComposition overviewAnonymous sums and the Failure policy, completed reporting, typed-stream evidence
Ownership and stateTypestateLinear obligations, resolution scopes, integration boundaries
Optional and fallible borrowsReturned enums that carry referencesReturned references, borrowed matching
Linked structures and graphsOwned structures and checked identitiesRecursive representation, arena prototype
CollectionsOrderingStable sorting algorithm, hashing and equality, slice syntax
Compile-time sizes and fixed inline arraysValue generic parametersFixed capacity and inline storage, portable std.simd API
Typed data formatsDerived serializationstd.json, std.toml, method annotations
Native platforms and librariesCross-platform assessmentFFI, export contracts, GCC backend
Allocation and parallel executionMemory, parallelism, and SIMDAllocation audit, shipped concurrency
Cooperative suspension and owned tasksAsync/await exploration, Go-style scoped tasksAsync ownership and cleanup, async spike evidence, stackful runtime choices, stackful spike evidence, linear execution responsibility
Iteration and adapter chainsFluent iterator pipelinesShipped generators, parallel execution
Portable vector operations and automatic SIMDPortable std.simdAPI contract, pipeline recognition, backend evidence
Columnar record storageColumnar listsOwnership and API, chunks and deletion, layout evidence, Plenty implementation spike
Analytical dataframesPolars embeddingNative interface and measured costs
Plotting and data visualisationstd.plotExamples beside ggplot2 and plotnine
Scientific numerics: optimization, integration, ODEs, special functionsNumerics coreAPI sketch, crate evaluation, std.linalg, std.stat
Exact decimal and financial arithmeticstd.decimalPolars embedding, ordering, dictionary keys, checked arithmetic
Physical units and dimensional analysisUnits of measureprecedents, spike evidence, domain types, value generics
Language consistency: copying, formatting, views, iteration, errors, callbacksSix rules for a consistent coreFluent iterator pipelines, user type hashing, error composition

Companion examples and evidence do not imply additional implementation commitments.

Completed

See Completed proposals for shipped designs and their reference pages. Further extensions remain tracked in the backlog.

Partly implemented

ProposalShippedRemaining
Value generic parametersValue parameters and BoundedB83 arrays/assertions; B96 std adoption
Recursive owned dataRecursive storage through Box[T]B11, B33
Typed ranges, generic calls, and expression-local inferenceTyped ranges, contextual literals, explicit type argumentsB12, B16, B32
C interop and dynamic librariesImports, linking, exports, and resident loadingB18, B27, B28
Generated library contracts and C headersExports, contractsB27, B28
Fallible memory, parallel execution, and SIMDFallible allocation, concurrency, initial SIMDB13 allocator control; B23 SIMD extensions; B24 automatic parallelization; B83 fixed arrays
Standard library scopeEmbedded library, including data formats, TLS, HTTP, SQLite, signals and testingRemaining B38–B70 scope
Keyword arguments, defaults, and static unpackingNamed calls and fresh defaults under the narrower designB36: splats and signature markers remain separate candidates
Units of measureDimensions and Quantity[T, D], erased to their storage type (issue #701)B97: std.units, sharing bodies that differ only in dimension

Not implemented

ProposalBacklog
Runtime-independent networking protocols — agreed codec/session/driver direction; complete shared WebSocket session and both drivers remain proposedB94, B85
Actor budgets and retained stacks — test-only heap/trap probe; compiler checkpoints and stage ownership integration remain unimplementedB85
Blocking work for actors — bounded native workers, independent job ownership and event-based completionB85
Async/await exploration — owned movable frames, fallible admission and synchronous cancellation; isolated spike onlyUnscheduled exploration; async implementation remains out of scope pending an adoption decision
Cosmopolitan and Actually Portable Executables — bounded compatibility experiment before any runtime/platform commitmentB18, B17
Package language editions — exploratory compatibility mechanism; no editions implementedB17
Using Rust crates in Plenty — three prototypes favor generated C adapters over a Cargo/rustc graph; production integration remainsB17, related B20
Compiling Plenty to Rust source — checked-IR scalar emitter, native companion round-trip and Rust build-cost measurements; ownership probes remain hand-lowered, no production backendB20, related B17
Linear obligations, including aggregate and error rules — opt-in non-abandonmentB72 (issue #149)
Synchronous resolution scopes — consuming scope policy; depends on linear obligationsB72 (issue #149)
Linearity, typestate, and execution responsibility — shared boundaries and deferred worker/async contractsB72 (issue #149)
GCC backend (plenty_codegen_gcc)B20
Portable std.simd and automatic pipeline SIMD — small portable API, bounded safe transformations, and backend spike evidenceB23; related B12, B19, B24, B75
Columnar lists — explicit field-column storage, a bounded object facade, and native layout/ownership spikesB76; related B11, B12, B23, B75
User-defined ordering — one three-way __cmp__ hookB37
Timsort for stable, adaptive sorting — fallible workspace, stability, and compatibility choicesB37 (issue #331)
User-defined dictionary keys and set members — derived structural hashing and a KeyType boundStructural class/enum/anonymous-sum keys, including custom cleanup, plus KeyType; copying operations require duplicable keys
Derived serialization for classes and enums — @serial derives hooks against a JSON-shaped std.serial data model shared by JSON and TOMLNone yet; candidate under B51/B38 (issue #471)
Returned enums that carry references — Option[&T] and Result[&T, E] returned under the first-reference-parameter rule, held in locals, never storedNone yet; extends B11 (issue #516)
Go-style scoped tasks, with runtime choices and native spike evidence — exploratory fixed-stack alternative; no lightweight scheduler adoptedB22 investigation; implementation uncommitted
Arbitrary-precision integers — Plenty limbs with an inline small value; malachite rejected on allocation failure and LGPLB38 (issue #481)
Thread-local reference counts — single-threaded phase first, then Lean/Koka-style thread-shared marks at certified boundaries; measured atomic count trafficNone yet; related issues #743–#746
Faster linking — measured link costs; caching the executable, running the linker directly and reusing the extracted runtime archive; object-format changes do not payB19; related B17
Checked arithmetic by default — function-level typed errors, explicit unchecked: with a validated no-failure precondition and retained local checked: recovery; core/repository adoption and bounded validation complete; local review and merge pendingB14
Exact decimal arithmetic — allocation-free 38-digit Decimal in Plenty, scale kept with numeric equality as in Python, exact operators under the integer trap and checked: rules, NonZero[Decimal] divisors, explicit roundingNone yet; related B76, B37, B74
Numerics core — std.numeric in Plenty over std.linalg; a scoped SciPy subset in three milestones; basin and numeris not adoptedB38 (replaces issues #492, #493)
Six rules for a consistent core — one copy rule, one formatting path, owner-to-view conversion, adapters on iterators only, error types that name only what can fail, every callable form as a callbackNone yet; proposes B88–B93; related B12, B49, B84 (issues #614–#636)

Completed investigations

AssessmentDecision / related backlog
Native macOS, Windows, and AArch64 supportNative ports need target-aware builds, ABI validation and OS/stdlib contracts before release packaging. B18, with B17/B12 dependencies.
Protocol method bodiesCore default/final dispatch and member-specific grants agreed; definition-time contract checking required. No automatic method injection. Not implemented or scheduled (B29).
Owned structures and checked node identitiesTested patterns and arena prototype; production identity/access contract remains B73, broader borrowing B11.
Typestate and owned transitionsExisting owned transitions and their limits; linear non-abandonment is a separate proposed extension (B72).