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

Backlog

This is the single maintained list of remaining language, compiler, runtime, standard-library and tooling work. Entries are candidates, not promises about syntax or delivery dates. Row order is a catalogue, not a priority list.

Delivered milestones and retired entries live in Completed work. A B ID can appear there for its delivered subset and here for its remaining extensions; IDs are never renumbered or reused. The implementation status and reference describe what works today. Proposals record rationale and alternatives, not another work queue.

The experimental Windows x86-64 dataframe build and release packaging are recorded in completed work. The macOS ARM64 dataframe subset is recorded in completed work. Broader native OS qualification remains in B18.7.

Current position

B34’s bounded cleanup/review, B71’s typed HTTP acceptance batch, B76’s initial dataframe datatype expansion, the initial B39–B70 library slices and B17 package tooling have landed. Their delivery records are in Completed work. Preserve their installed-toolchain, CLI/data, JSON-service, mutual-TLS and HTTP qualification checks during further work.

Issue severity takes precedence over the batches below. Defects, reproductions, claims and implementation/review status belong in the shared issues.db. Nothing on this page assigns ownership or approves an API without a scoped agreement and acceptance checks.

Next batches

  • B76 — analytical workloads: decimal columns follow the std.decimal proposal after its core module ships. Use the pinned Polars engine’s Parquet capabilities; fixed-size arrays, dictionary semantics, nested casts and broader list operations need separate scope. Use the daily sales application and examples/sales_report/ as evidence: truly large or rejection-heavy workloads should guide multi-output streaming. Temporal/grouped as-of matching and time-bucketed/rolling aggregations need a separate workload before expanding the API.
  • B23/B76 — measured SIMD extensions: packed views, wider shapes, broader predicates, maps/folds, runtime ISA selection and parallel scans need bounded legality/performance evidence. Account for code placement using the retained placement research.
  • B71 — additive error ergonomics: reporting conveniences remain independent candidates, not prerequisites for typed HTTP composition.

Further library breadth, B11 stored-reference extensions and B72 state/linear-obligation experiments remain candidates requiring a concrete use case and an agreed contract. This sequence preserves the existing batch scope; it does not schedule all catalogue entries.

Deliberate deferrals

  • B19 — module caching and frontend scale: serial efficiency, streaming lowering/emission and per-module caching need measurements and a focused batch. The module-cache investigation rejected separately compiled modules and stored syntax trees. A lowered-module cache needs imported interfaces and invalidation by body-derived facts; its broad-import benchmark offered about 30 ms of frontend work in a 44 ms body-edit build. Revisit for frontend-bound std-heavy applications, using module-edit measurements as the baseline. Remote caching waits on a local per-module contract.
  • B22 — broader concurrency: richer mapping/effects, streaming results, rendezvous, larger or send-side selection remain deferred. Existing channel and executor checks do not establish deadlock freedom.
  • Automatic parallelization (B24), optional backends (B20), stored-reference relationships (B11), broader callback erasure (B32) and automatic deep recursive operations (B33) require their own contracts and acceptance checks.

Scope of follow-on work

B22 — task models. The stackful-task investigation and async/await exploration do not commit Plenty to either implementation. Before adoption, compare the same bounded TCP/HTTP workload: I/O cancellation/registration lifetimes, allocation and failed-start preservation, stack budgets, suspension/loan checks, memory and latency. Fixed stacks trade pinning/relocation for reservations and fatal unchecked exhaustion. Retaining native concurrency remains an option. Prefer library APIs over new syntax; require bounded queues/backpressure, failed-send ownership, joins on all exits, cooperative cancellation and partial-result cleanup. Scoped generic tasks need not wait for heterogeneous callback storage in B32.

B32 — additional callback representations. Evaluate registry/event-handler use cases and specify invocation, move/drop, allocation failure and capture lifetimes before adding erased modes. Escaping borrowed captures depend on B11; C ABI callbacks and foreign-library lifetimes remain B28.

Work items

Language, compiler and tooling

IDRemaining workScope / dependency
B11Broader borrowingStored/returned references and views; returning a borrow chosen among several reference parameters; symbolic-index collection loans; field-precise loans through mut reference bindings. Optional/fallible references: phase 2 (mut locals and reference-carrying parameters), nested patterns through the carried reference, match expressions producing these values, dict.get_ref and list.get_ref/get_mut. Preserve owner/variant stability and temporary lifetimes; measure precision against compile-time cost. Proposal; delivered subset, including the len call-borrowing fix for issue #683.
B12Practical I/O and iterationReusable iterator/view protocols, stored/returned slice and substring views (B11), portable path semantics (B18). For substrings: str and std text APIs accepting &substr, more view methods and cached scalar counts. Further adapters need use cases; pipeline-specific extensions are B75. Delivered subset.
B13Public allocator controlGlobal/default and per-container selection, allocator state/lifetimes and buffer provenance. Recoverable allocation is delivered; allocator design remains proposed. Bounded/inline-capacity containers depend on B83 value parameters and fixed arrays.
B14Typed error compositionFinish unchecked arithmetic modes: a plenty.toml setting and a stdlib precondition audit, so std can follow --unchecked assume. Broader Option/Result adapters beyond the delivered fallback/mapping helpers (issues #800/#820), typed composition of parsing/conversion errors and remaining checked shift/cast operations. Preserve precise errors and use Failure only as a last resort. Human-readable reporting extensions are B71. Checked-default core, assumed list/view/Bytes indexing (issue #764), coordinated repository/benchmark-template adoption and bounded validation are recorded in the delivered subset and validation record.
B16Inference and value conveniencesExpected-result inference, partial explicit type arguments, contextual literals across generic arguments; NonZero[T] module constants; saturating conversion; standalone unit bindings/parameters/storage. Require concrete use cases/contracts, not automatic extensions of today’s inference. Parsing/conversion error composition is B14. Delivered subset, including block-if statement values (issue #674) and tuple patterns/nested unpacking (issue #675).
B17Modules, tooling and packagingShared per-user Git cache; semver selection over tags; per-module incremental objects (B19); re-exports and import-cycle policy. LSP: find references, document symbols, signature help, case pattern variants and incremental module re-checking. Preserve deterministic lookup, standalone compilation and reproducibility. Release artifacts: four targets via scripts/release/target.sh, with manual dry runs of the release workflow. Further targets need runtime/linker/artifact tests (B18); std breadth is B38. Exploratory workflows are listed under tooling investigations. Delivered subset, including the completed script design and optimized build defaults.
B18Windows and additional targetsNative GNU/Linux AArch64 compiler/runtime implementation is present alongside x86-64: baseline ARMv8-A code generation, target-aware native dependencies, Linux bindings, UDF traps, stack handling and AAPCS64 actor recovery. Qualification includes host SIGILL coexistence (issue #588), first actor-heap ownership (issue #589), and native libFuzzer discovery (issue #591). Development and emulated qualification records the reproducible harness; B17 owns artifact delivery. Native ARM CI passes the compiler/runtime suites, both optional engines and Docker proxy tests. Linux ARM64 is a release platform: archives are built and tested on native ARM runners and smoke-tested on AlmaLinux 8 and Debian 13. The v0.8.9 artifact audit confirms glibc 2.28 compatibility for both Linux targets (issue #730). Remaining ARM gates: dedicated hardware concurrency/signal stress, minimum kernel and page-size qualification. Packaged linalg integration and tutorial tests pass under the ARM guest; that local artifact does not qualify the release libc floor. The updated cross-platform assessment, interface/source map and toolchain experiments guide ARM macOS and x86-64 Windows; Windows ARM64 remains deferred. Changing the linker alone does not add cross-compilation. The Cosmopolitan/APE proposal recommends a bounded x86-64 compatibility experiment and identical-artifact non-Linux qualification before deciding on a restricted profile or broader port.
B19Measured codegen and storageSee the remaining performance work; completed measurements and optimizations are in the performance record.
B20Optional backendsEvaluate the GCC proposal before adopting another backend/common IR. The Rust-source investigation includes a checked scalar emitter; ownership-bearing APIs remain hand-lowered probes and need emitted semantic parity. Cranelift stays the production backend. Rust dependencies are B17.
B22Native concurrency extensionsUser-facing scoped pool jobs borrowing the submitting scope; broader iterator/closure mapping, streaming results, richer certified effects/types, rendezvous and broader selection. Mutable, one-shot, borrowed, generator-containing and indirect map callbacks need separate scope. Preserve fallible submission and deterministic shutdown. Task-model gates are under follow-on scope. Delivered subset.
B23SIMD extensionsPacked storage/views, broader vector shapes, further predicates, total maps/modular folds, runtime ISA selection and parallel scans. Require separate evidence; hide alignment/tail/target bookkeeping, preserve checked arithmetic and ordered floating folds, and do not treat generic lists as packed arrays. Spikes/backend gates; delivered subset.
B24Automatic parallelizationDeferred beyond B34. Require evidence that effects, cleanup, allocation failures and result ordering remain correct; a thread-count setting alone is insufficient.
B27Expanded C representationsExport text/byte buffers and views, error sums of payload-free enums, payload-carrying errors, recoverable returned ownership and explicit class-method adapters. Keep allocator provenance, output initialization and error-path transfer visible. Owned export contract.
B28Library loading/lifecycleGenerate loaders from extracted contracts without original export source; improve third-party C binding tooling and error detail. Unloading, retained/foreign-thread callbacks, C record layout and header-assisted bindings need separate contracts. Current resident/thread-bound loaders.
B29Further generic constraintsProtocol bounds on data, generic methods satisfying protocols, combined bounds/composition, generic aliases and enum constructor inference. Check bodies against declared bounds so argument-independent errors stay at definitions; preserve explicit lookup and bounded specialization. Library-owned operations favors composition/capabilities; protocol access grants remain deferred. Protocol bodies records agreed default/final dispatch, member-specific grants and definition-time contract checking, not automatic injection; no implementation scheduled. Explicit Box[P] owners, shared/mutable dispatch and fixed-argument inference are delivered; see the contract. Delivered implementation and investigation records.
B32Broader callback storageMutable/consuming/borrowed/worker-bound erased modes and generator-containing environments in heap owners need their own contracts. Escaping borrowed storage depends on B11; see follow-on scope. Delivered subset.
B33Deep recursive operationsIterative fallible copy/format work storage and an explicit bounded-memory contract for structural equality/membership, without hidden allocation failure. Preserve cleanup, shared-string ownership and float/NaN behavior. Rationale.
B36Named-call extensionsFiner protocol receiver tracking, deliberate builtin argument names and structured initialization for large records. Splats, variadics and //* markers remain in the unpacking proposal. Delivered defaults/named calls.
B37Ordering extensionsCached/fallible sort keys, stable sorting and user-defined ordering without hidden allocation. The ordering proposal recommends __cmp__/Order for comparisons/equality and runtime sorting, not dictionary keys. Evaluate Timsort/Powersort with fallible scratch space; naming/migration remain decisions. Use measured runtime-sort bounds (issue #331). Until user ordering lands, __cmp__ and the __eq__/__lt__ family are compile errors (issue #613). Delivered subset.
B38Standard-library breadthSee library follow-ups and ergonomics. Further breadth requires a use case and scoped contract. Prefer Plenty unless native complexity/security justifies a wrapper; use the engine criteria for large native libraries. Delivered modules.

Tooling investigations

These belong to B17 and are not scheduled implementation commitments:

  • Compiler boundaries: structured diagnostics, scoped recorder/teardown policy, the op and syntax-layer splits and grouped pipeline state are delivered (issues #691–#695). A compilation session and further lowering-state extraction wait for a consumer. Module replay remains B19, not a wholesale frontend rewrite.

  • Single-file script manifests, isolated dependency resolution, durable locks and argument forwarding are delivered. Warm executable hits also skip runtime extraction (issue #699). Broader executable-cache toolchain coverage remains B17/B18; a script test command would require its own entry-point/discovery design.

  • plenty-manager: a Plenty-written tool in a separate plentylang/plenty-manager repository for compiler installation, explicit updates, side-by-side versions and project pins. Settle release authentication and qualify manager hosts before delivery.

  • Language editions: wait for a concrete incompatible change; prove mixed-edition compilation with shared types/runtime before edition or migration tooling.

  • Rust crate dependencies: three prototypes compare Rust ABI, generated C adapters and Rust-source lowering. The next gate is real Plenty project integration with checked foreign owners and a coherent runtime build; generated C adapters are the proposal’s recommendation.

  • Local semantic search: improve chunk boundaries and measure retrieval quality before deciding on committed index snapshots. Prefer Plenty for the interface and record language defects in issues.db.

Remaining performance work

B19 is evidence-driven; these are candidates, not an approved optimization batch. Use profiling, faster-linking evidence and the completed measurements as baselines.

  • Generated code: retain/release for text operands computed by calls or loaded in another block; dispatcher copies of sums with inline-record payloads; code size and compilation/link latency. Revisit match density/size policies only with application/CPU evidence. An opt-in CPU target such as x86-64-v2 requires a decision against B17’s fixed-baseline reproducibility contract.
  • Layout/cleanup: natural record-field packing beyond 16-byte slots, compact sum tags/niches, relocation/release plans for records holding ranges/sums/other managed fields, records over 192 bytes and tuple release plans. Measure inline copies beyond current runtime-copy paths; owned temporaries and nonscalar list rows still use runtime helpers. Flat-layout rationale. Box size (issue #814): a box’s class-record slot still keeps a value word that only addresses the record after it, and Option[Box[T]] keeps a tag word rather than a null niche; dropping both would take a binary-trees node from a 96-byte malloc chunk to 64 (C: 32). A size-class free list for fixed-size boxes is unmeasured.
  • Serial frontend efficiency: module-scope name hashing, builtin-sum interning and Ty/nominal-handle clone traffic (about 10% of check samples with allocation excluded; issue #696). The signature map and nominal fact/lock costs measured below 2% and are not candidates. Whole-program table/cache misses still increase per-function cost at scale (issue #57); interned names or per-function batch processing need measurements. Further type-representation changes follow the completed issue #302 investigations. Measured attribution records the profile; existing frontend function symbols and type-fact caches are not missing features.
  • Peak memory: lower and emit one function at a time instead of retaining full syntax/operation sets at phase boundaries (issue #54). IR construction’s measured 7% of emission CPU limits scaling only above about fourteen cores.
  • Caching/lowering: imported-interface lowering with explicit outputs and serialized operations/types; body-derived invalidation and per-function granularity for one-module programs (issue #317). Separately evaluate lowering only reachable std functions. A trusted opt-in remote cache follows a local per-module contract, not before it. Prove fresh-environment replay using explicit module outputs before persistence. See deferrals.
  • Upstream gates: regalloc2’s quadratic block-parameter handling needs an upstream report/fix before removing the 2,048-argument fallback. Reopen issue #425’s deferred arithmetic-check work only when Cranelift changes unfused overflow branches, frame setup or callee-save spills; do not treat closed investigations as active claims.

Stdlib-driven language ergonomics

IDRemaining workScope / dependency
B71Error presentationBenchmark-template migration after active comparisons, and separately scoped conveniences such as field-level redaction (for example URL userinfo, beyond shipped class/enum redaction). Case guards, residual-set inference, empty sums, arbitrary protocol forwarding and dynamic error objects remain deferred. Delivered composition/HTTP work.
B72State/ownership ergonomicsExplore typestate and runtime-state enums. Linear obligations, resolution scopes and integration boundaries do not approve implementation or blanket std conversion. Real HTTP integration of the owned-response experiment remains unexplored. Field moves through Box/Shared, per-element tuple tracking, partial destruction for __del__ classes and whole-object destructuring need contracts. Delivered subset.
B73Arenas/linked dataBefore std.arena, replace caller namespaces with a safe arena-identity contract covering copy/concurrency/exhaustion, review callbacks/movement cost, and qualify deletion/reuse, bad handles, affine cleanup, OOM preservation and tree/graph consumers. Keep linked lists/trees as examples until a workload justifies an API; the linked-list lesson covers owned chains and index-based bidirectional links (delivery), and balanced-tree examples demonstrate B-tree/red-black insert/delete and invariant checks (delivery); the Unicode trie adds iterative prefix retrieval and pruning (delivery). Direct disjoint loans/worklists relate to B11; no intrusive-pointer extension implied. Assessment/prototype.
B75Pipeline extensionsEarly stop for parallel any/all and integer range sources beyond range[i64]. Broader reusable iterator/view relationships are B12/B11. All four original stages are delivered; they are not outstanding tasks.
B76Columnar extensionsDecimal columns after the B86 core module; temporal/grouped/floating as-of keys, time-bucketed/rolling aggregations, fixed-size arrays, dictionary semantics, nested casts and broader list operations need workload evidence. Validate use cases before static-schema/zero-copy machinery. For clist: row views/method adaptation, field references, affine fields, chunks, statistics, tombstones/vacuum and interchange. Broader SIMD/parallel scans need legality/performance evidence (B23); borrowing B11/B12, pipelines B75. Delivered dataframe/clist subsets.
B77Derived serializationAccepted design, not implementation: JSON-shaped std.serial; hooks/compiler-expanded entry points; class @serial; TOML; docs. SerialError[E] retains format error/field path. Measure compile time/throughput before derive. Relates to B29/B51; reuse the closed annotation mechanism.
B85Actor extensionsExtend the recorded actor HTTP qualification beyond x86-64 GNU/Linux. Matched normal/fault comparisons are recorded; actor WebSocket/SSE adapters remain; WebSocket uses B94’s shared session and driver/upgrade contract; blocking-work offload proposes bounded native workers, independent job ownership and completion delivery. The budget/stack probe validates native suspension with heap/trap restoration; compiler checkpoints, shared-context ownership, bounded stack admission, safe suspension regions, overflow/platform qualification and fairness/overhead measurements remain. Multi-thread stages; sliding-window/all-for-one restart, parent restart notices and an actor-specific &mut self spawn diagnostic remain. macOS heaps wait on B18. Actor HTTP design, delivered actors/network/TLS/HTTP.
B80PlottingFinish the accepted core milestone: remaining scales, smoothing, broader facet controls and font-measured layout. Then broader geoms/PNG, dates, reflected records and a separate dataframe bridge. Delivered subset.
B83Inline arrays and value-generic extensionsValue parameters and Bounded are delivered. Remaining accepted design: inline array[T, N], allocation-free literals at generic parameters and per-instance assertions; then BoundedList (B13) and measured internal SIMD rewrite (B23). Derived sizes in signatures remain deferred.
B86Exact decimalsstd.decimal proposal: allocation-free 38-digit Decimal in Plenty with exact operators and explicit rounding. Stages: u64.widening_mul, std-only @arithmetic methods/hooks, __cmp__ (B37) and a ZeroTest bound for NonZero; core module; __key__ key policy (reconcile with the delivered structural-key contract) and a format-spec hook; Polars decimal columns (B76) and JSON/CSV interchange. Arbitrary precision only on evidence.
B87Std conventionsPublic std APIs follow Standard library conventions. Align the listed deviations as they are scheduled (booleans with B36, byte inputs with B39); file issues for the untracked ones: bounds: vs limits:, AllocError unions, predicate names and count() sizes, watch shapes. Delivered: ThreadPoolExecutor.cancel_pending() replaces shutdown(bool) (issue #631); every thread start fails with SpawnError, and owned starts return their job (issue #630); native hooks are std-only intrinsics taking &Bytes, so std.bytes has no public hook methods (issue #633).
B88Copy rule@copy on enums; undeclared enums affine after a migration that annotates every currently copyable enum. Generic enums use B84’s conditional copying and CopyType bound. Delivered: one copy rule in the reference, cheat sheet and skill, checked by tests/test_copy_rule.rs (issue #636). Applied copy/Shared guidance is delivered in issue #810. Proposal.
B89Formatting pathPhases 1 and 2 done (issue #615): print/f"{x}" use display; str.repr/!r/aggregate elements use debug; private types format in their module; wrong-signature display/debug is a compile error. Remaining: main’s report uses display; the shared formatter needed for it is delivered (issue #634). Proposal; issue #615.
B91Iteration sourcesAdapters only on iterators; iter() for every source; membership on std containers stays B49. Delivered: len method dispatch (issue #623); uniform local dictionary views (issue #624); find/reduce copy borrowed copyable items, and iterator methods on non-iterators suggest iter(...) (issues #621, #622). Proposal.
B93Callable formsDelivered: reusable callable forms in serial pipelines and sort_by_key, and &mut named functions (issues #617, #619, #620); constructor values, including generic classes and Some/Ok/Err (issue #618); lexical checked callbacks with scoped failure propagation (issue #614). Remaining: par callbacks for stored capture-free closures and Callable values, including class and variant constructors. Callable names stay (issue #24). Proposal.
B96Bounded integer adoptionThe Bounded[T, lo, hi] type, literal checks and checked runtime construction are delivered. Remaining: adopt it for std.http.Limits.max_line/max_head (>= 2) and fixed std ceilings. Existing ceiling metadata (issue #686) still checks static std inputs; dynamic values still trap under those APIs.

Units of measure

IDRemaining workScope / dependency
B97Units plot axis labelsstd.plot axis labels from quantity units. Deferred; design open, including choosing a display unit that matches the values’ scale (km rather than m for long distances). Candidate design: plot axis labels. Compiler dimensions, Quantity operations, formatting, constants, scoped diagnostics, native erasure, std.units with zero-copy wrap_list/strip_list, the std.units.catalogue of SP 811 units, and shared bodies for instances that differ only in dimension are delivered. Design: units of measure proposal. A Positive[f64] float domain is a separate follow-up.

Runtime-independent protocol support

IDRemaining workScope / dependency
B94Sans-I/O networking protocolsAgreed codec/session/driver direction, not implemented as a general convention. Validate with WebSocket: extract bounded framing/session/handshake logic; migrate the existing blocking/WSS driver without silent behavior changes; add the B85 actor driver with explicit upgrade ownership, entropy supply, timers, backpressure and shutdown. Follow the session contract and acceptance gates; retain existing regressions and add deterministic/fuzz, real TCP/TLS and actor resource/fairness evidence. No universal protocol interface, new scheduler or wholesale HTTP rewrite. Broader protocols require separate scope under B38.

Standard library follow-ups

Only outstanding extensions are listed here. Initial delivery records, issue/PR references and reference links live in Completed library work. B IDs keep their original scope; a closed initial issue does not approve a follow-up. All candidates still require scope and acceptance checks.

IDAreaRemaining candidates
B38Additional breadthstd.bigint (issue #481): Plenty implementation per the bigint proposal; needs u64 widening-multiply and add-with-carry builtins. XML namespace URI resolution and tree/query APIs; recursive filesystem watches/automatic reconciliation; accurate summation/norms, float decomposition/adjacent values and special functions (the numerics core proposal schedules summation, norms and special functions in its first milestone, with optimization, integration, ODEs, interpolation and FFT under std.numeric; it replaces issues #492 and #493); constant function calls and bytes concatenation. Linalg conditioning, least squares and sparse storage need separate scope. Image: GIF/LZW/frames, baseline/progressive JPEG/encoding and WebP/VP8/VP8L/RIFF, then 16-bit buffers, streaming decode, metadata, resampling filters and the measured 2–6× Pillow speed gap; implement in Plenty under the same Limits. Broader statistics need numerical contracts; sketches need mergeable quantiles/frequent items, stronger tail accuracy and workload-led xor/fuse tuning. System: cgroup accounting, CPU utilization sampling and filesystem free space.
B39BytesStored/returned views (B11); OS strings in std.path, std.env, std.process and std.cli are list[u8]. Text APIs accepting &substr are B12. Dataframe byte-view inputs delivered.
B40Binary streamsUnscheduled nonblocking descriptors, vectored I/O, peeking and erased streams.
B41Error contextNative-cause OS description text (B14/B71).
B43ProcessesNative process-readiness wakeups for deadline waits, file/child redirection, stderr merging, dropped-child reaping policy and process groups. Polling deadline/cancellation waits delivered.
B46LogsJSON-lines sink, sampling/rate limits, per-module thresholds and span context.
B47Text/UnicodeGrapheme-aware text wrapping and broader classification; keep the external unicode_text package’s Unicode version aligned with std.unicode. Delivered paragraph tools.
B48RegexBroader DFA/one-pass coverage (Unicode and assertions), remaining scalar scan lowering (issue #760); full Unicode case folding, script and general-category properties. Bounded ASCII accelerators delivered (issue #742).
B49Collections/iteratorsUser iterator protocol (B12, needs B11 stored references); in on user and std containers; len() method dispatch delivered (record, issue #623), Python __len__/__contains__ names remain reserved (issue #645); further collections need use cases.
B50Random/secretsJump/split streams, distributions/float ranges, weighted choice/element sampling, scratch-free secret integers and a zero-on-drop buffer.
B51JSONBulk scans outside string runs, pretty-printing, JSON Lines and derived codecs (B77).
B52TOMLIndependent conformance checks (toml-test/reference crate); evaluate TOML 1.1.
B53CSVLenient parsing/recovery, header mapping/typed columns, non-UTF-8 encodings, multibyte delimiters and throughput benchmarks.
B54EncodingsBulk native codec/packing throughput, streaming codecs and varints. IEEE float packing delivered (issue #656).
B55FilesystemAdvisory locking delivered (issue #774); explicit child-fd inheritance remains issue #777. Passwd fallback, XDG_RUNTIME_DIR and XDG_*_DIRS search lists.
B56Concurrency primitivesCondition variables, rwlocks and semaphores only with a concrete use case.
B60URLsRelative resolution, normalization/equivalence, IDNA and form encoding.
B63HTTP clientWebSocket permessage-deflate and proxy tunnels; cookie jars/content decoding were declined, not scheduled.
B64HTTP serverSSE client reader; waking SSE streams from channel messages rather than polling.
B65HTTP helpersStatic-file Range requests and directory indexes.
B66HTTP qualificationGenerated route dispatch without user match waits on enum methods or existential protocol values; preserve existing qualification suites and proxy fixture ownership (issue #719; delivered scope).
B67CryptoP-384/JWT ES384 and SHA-384 HMAC/JWT HS384; password KDFs need separate use-case/API review.
B68CompressionGzip header access, zstd and trailing-zero tolerance; archives remain B69.
B69ArchivesPAX decimal range correction delivered (issue #705). Remaining: policy-controlled link creation, mode/time restoration and streaming ZIP writes with data descriptors.
B70SQLiteRuntime allocator integration for accounting/failure injection, user-defined functions and backup API.
B78DiffsLine-first pass for char/word diffs and diffs in std.test failures (B57). Performance baselines belong to B19.
B79MarkdownGFM tables, strikethrough/task lists and parser throughput beyond the recorded ~1 MB/s.
B82GraphsWeak components, Prim/Floyd–Warshall, flow/matching, compaction, non-f64 weights and () type arguments.

Reconciled completed work

The delivery records and retired entries moved to Completed work. This heading remains as a link destination; completed-only B IDs no longer appear as work to select here.

Keeping this list useful

  • Add, prioritize or split future work here. Keep IDs stable and link design detail rather than copying queues into proposals, tutorials or reference pages.
  • Settle a candidate’s scope and acceptance checks before implementation. Table order does not approve APIs or require every extension.
  • Before syntax/builtins, state the user problem, why ordinary library code is insufficient, and ownership, allocation, compilation and teaching costs.
  • On completion, move the delivered scope to Completed work, update reference/status/runnable lessons, and leave only genuine outstanding extensions here with a link to their delivery record. Do not mark an entire mixed item done because its initial slice shipped.
  • Issues, claims and review state stay in issues.db; reference pages describe implemented behavior. Use the development workflow for ongoing testing, documentation and performance practices.
  • Historical proposals may contain old syntax/dependencies; introductory notices must say so. Future priorities belong here, not on completed-work pages.

A JIT and an interpreter remain out of scope, not waiting at the bottom of this backlog. Async/await remains unadopted and unscheduled under B22’s investigation gates.

B18 — macOS and Windows implementation sequence

The portability design records rationale and toolchain evidence; this section owns the work sequence. Target ARM64 macOS and x86-64 Windows, preserving both Linux architectures. Use isolated child worktrees based on the portability branch, with component ownership agreed before concurrent edits. No local Mac/Windows machine is assumed; provision CI execution before treating either port as tested.

Work packageDependency / owned componentsCompletion evidence
B18.1 — backend and toolchain decisionsStandalone probes; pinned Cranelift, Zig/cargo-zigbuild, C/Rust adapters; compare Windows MSVC and GNUReal Mach-O/COFF output and native CI execution of mixed ABI/Tail/large-frame fixtures; record SDK/CRT/deployment choice and unwind strategy. Signal restart qualification no longer assumes sleep-based reader scheduling (issue #689). Cross-link success alone is insufficient.
B18.2 — target and host separationB18.1 findings; toolchain, frontend facts, cache/runtime identityOne target description, explicit build-host/compiler-host/output-target identities; incompatible combinations rejected; existing Linux suites pass.
B18.3 — object and linking interfacesB18.2; object metadata/exports/source/trap/coverage records, drivers/distributionELF implementation preserved; Mach-O/COFF metadata, retention, exports and relocation round trips pass; no GNU options leak into other drivers.
B18.4 — dependency and runtime buildsB18.1–2; build.rs, native sources, test hooks, engine helperBoth runtime modes and native dependencies match target; Cargo and embedded builds agree; choose direct-build versus orchestrated Cargo using a measured prototype; no recursive Cargo lock contention.
B18.5 — runtime coreB18.3–4; memory, errors, entropy, threads, mutex/parking, signals/exceptions, actor recoveryMinimal native Plenty program, C callbacks, fallible allocation, secure randomness, stack protection and recovery tests pass on each OS; no success stubs or hidden allocation regressions.
B18.6 — OS contracts and servicesDesign decisions begin alongside B18.1; implementations depend on B18.5; paths/resources/files/process/readiness/watchLossless names, full process status, rooted filesystem security and resource-aware cancellation tests; explicit watch/shutdown capabilities; separate compatible portable contracts from Linux-only APIs.
B18.7 — library parityB18.6; networking/DNS/TLS/HTTP, SQLite/KV, crypto/compression, dataframe/linalgReal native execution, including both optional engines and CPU fallbacks; count skipped/early-return opt-ins separately; publish exact capability gaps before any preview.
B18.8 — developer workflowsB18.3–6; package CLI/cache/LSP/fuzz/export tools and testsExtracted installation handles spaces/Unicode, literal arguments, replacement races, diagnostics and library hosts; explicitly report unqualified fuzz/sanitizer paths.
B18.9 — release admissionB18.7–8; native CI, packaging, notices, minimum-version audits, signing policyOffline clean-machine compilation with documented prerequisites; tested target/engine artifacts, baseline OS/SDK/CRT evidence and signing/unsigned-preview policy. Preserve Linux ARM’s outstanding hardware/release gates. Experimental macOS ARM64 (.tar.gz, macOS 11+) and Windows x86-64 (.zip, Windows 10+, dynamic MSVC CRT) archives include their dataframe engines and notices, with native unit tests, executable/library audits and clean-runner Parquet/application-relocation smoke tests. macOS uses ad-hoc signatures without notarization; Windows remains unsigned. Native execution evidence still depends on CI, including qualification after the engine version-lookup fix (issue #687) and unused native-wrapper and executable-helper pruning (issues #688 and #690) and native distribution executable suffixes (issue #697). Remaining: library-parity smoke tests (B18.7), project workflows (B18.8), signing/notarization.

Current evidence: the native CI smoke suite passes on macOS ARM64, Windows x86-64 MSVC and Linux x86-64. The first B18.2 increment centralizes target facts and compiler-host/runtime validation; it does not implement new object formats or OS services. This is a partial B18.1 gate: large frames, unwind, Rust boundaries and runtime dependencies still need qualification. Both new OS targets are experimental; neither is release-qualified. The shared Apple archive-command fix addresses issue #600; native build-tool tests run before the OS port build and on both Linux architectures. The first B18.5 increment separates native mutex waiting and thread handles, hides cancellation wake storage, and adds Darwin signal-context and stack-handler support. Standalone native synchronization tests run before the complete compiler build. Windows exception dispatch and per-thread stack guarantees are implemented with standalone subprocess tests that pass on the native Windows runner. Native OS entropy fixes dictionary initialization on non-Linux hosts (issue #604); Windows no-replace bundle publication and portable graph fixtures address issues #605 and #606. The initial B18.3 increment enables experimental Mach-O/COFF application output, native C conventions and linker syntax, with framed Mach-O interface metadata. Native qualification now passes full compiler/runtime builds, unit tests, platform-boundary checks and generated-program callback/result probes on macOS ARM64 and Windows x86-64. Linux x86-64 and ARM64 CI also passes all integration shards, both optional engines and Docker proxy tests. Full new-OS standard-library parity and release admission remain gates; these results do not complete B18.5–9.

B18.1 and B18.6 design research can run together; B18.3 and B18.4 can proceed in separate worktrees after the common description settles. Keep independent OS implementations separate after their contracts are agreed. A failing native probe changes the design before target admission. User-facing cross-compilation, Intel macOS and Windows ARM64 remain separate decisions, not implied outcomes.