Decisions
ADRs 0001–0030 come from the earlier compiler CeeSafe began as a port of, with their text unchanged; CeeSafe's own language decisions continue the series from ADR 0031 (the specification §2).
- ADR 0001 — Compiler implementation language
- ADR 0002 — Milestone 0 decision set
- ADR 0003 — M3 heap types are built in, ahead of general generics
- ADR 0004 — M4 regions: built-in region types, scoped results, LIFO scratch frames
- ADR 0005 — M6: user generics and interfaces; built-in collections; floats deferred
- ADR 0006 — OD-3: region parameters on aggregates and functions
- ADR 0007 — M8: hybrid core library, raw pointers, unsafe contexts
- ADR 0008 — C struct types are imported from the codebase's headers
- ADR 0009 — C7: context effects, and C state embedded by value
- ADR 0010 — M9c: writes through pointers made from references end with the loan
- ADR 0011 — M11 G7: floating-point types
- ADR 0012 — M11 G8: function values and scoped closures
- ADR 0013 — M10 T5–T6: modules and packages
- ADR 0014 — C arrays in imported structs, C member names, and exported constants
- ADR 0015 — M13 G2–G3: dynamic dispatch and owning closures
- ADR 0016 — M13 G4: userland threads and data-race freedom
- ADR 0017 — M13 G6: a package registry and version solving
- ADR 0018 — OD-25: scoped threads by fork-join
- ADR 0019 — OD-9a: direct closure calls by specialisation
- ADR 0020 — OD-9c: functions whose effects are their closure arguments'
- ADR 0021 — OD-24: weaker orderings for lib/std's atomics
- ADR 0022 — M14 K2a: generated C in several translation units
- ADR 0023 — M14 K4: building a reference kernel where the reference compiler does not run
- ADR 0024 — M14 K1: static items (global state)
- ADR 0025 — M14 K3: the kernel library
- ADR 0026 — M14 K5: inline atomics, and atomics in every profile
- ADR 0027 — M14: a static
Mutex, andObjectCache<T> - ADR 0028 — M15 S7: the host services a compiler needs
- ADR 0029 — M14: exported structs that hold C state
- ADR 0030 — M14: what SA3 needs from the reference (one definition,
offsetOf, the caller's address) - ADR 0031 — L1: async/await (stackless frames, structured scopes, cancellation as a flag)
- ADR 0032 — L1: channels between threads and between tasks
- ADR 0033 — L1 A4d: a scope child per loop iteration, with its own values
- ADR 0034 — C
chararrays in imported structs - ADR 0035 — L1 A4b: completion-based I/O (IOCP, io_uring)
- ADR 0036 — L1 A4: async methods through
dyn - ADR 0037 — L1 A4: higher-order functions that suspend when their closure does
- ADR 0038 — L1 A4e: an opt-in work-stealing executor
- ADR 0039 — L1 A4c: an executor for freestanding code, and a CosmoOS boot test
- ADR 0040 — The hosted executor in CosmoOS userland
- ADR 0041 — C interop for porting a stateful subsystem: shared atomics, imported unions, variadic calls
- ADR 0042 — Statics that are C state: imported structs, ops tables and function addresses
- ADR 0043 — Exports that exist only in some builds, and C function pointers from addresses
- ADR 0044 — Socket addresses, IPv6, socket options and network error kinds
- ADR 0045 — Vectored send, and the message operation record
- ADR 0046 —
Async.timeoutandAsync.deadline - ADR 0047 — System libraries in the manifest
- ADR 0048 — DNS resolution for tasks
- ADR 0049 —
ceesafec test: declared tests, a generated harness, a runner - ADR 0050 — UDP sockets for tasks
- ADR 0051 — Sending a file on a stream without copying it
- ADR 0052 —
HashMapin lib/std - ADR 0053 — Task sets: spawning while a task runs
- ADR 0054 — Generic impls, and impls for types with region parameters
- ADR 0055 — Wall-clock time
- ADR 0056 — Recursion through
await: frames from a per-task stack - ADR 0057 — A faster
sortBy: branchless partitioning, equal keys, sorted runs - ADR 0058 — The generated C compiled at
-O3 - ADR 0059 — Allocation counters only when something reads them
- ADR 0060 — Random bytes,
Channel.tryRecv, C allocations,IoError.HostNotFound - ADR 0061 — C allocations that are counted but never failed, for a library's one-time initialisation
- ADR 0062 — A cancellation visits only the cancelled scope's tasks
- ADR 0063 — Index ranges, integer
min/max, and reborrowing intodyn - ADR 0064 — Generic methods, arrays and slices of views,
dynas a bound and scopeddyn(from the ClayWind port) - ADR 0065 — Agent-facing reference: the library API in llms-full.txt,
ceesafe_api, and "did you mean" - ADR 0066 — Static tables of views
- ADR 0067 — A write to a
static mutcarries no loan - ADR 0068 —
staticin signatures: rejected on parameters, enforced on results - ADR 0069 — Native windows in lib/std
- ADR 0070 — Presenting only the changed parts of a window's frame
- ADR 0071 — Bytes and text: bulk appends, byte order, bit rotation, searching and number parsing
- ADR 0072 — Optionals and equality:
??,isSome/isNull,==on fieldless enums, slices and arrays - ADR 0073 — Temporaries as receivers, two-phase
mutarguments, block values in branches, and a first warning - ADR 0074 — The rest of the port's findings: unit payloads,
never, run-once captures, method regions, optional borrows, raw literals, associated consts, iterator loops, integer conversions, shadowing a dependency - ADR 0075 — The storage engine's findings: durable files, error conversion, an ordered map, checksums, a monotonic clock,
assert/panic,replace, arrays as slices,*r, static tables, and tooling - ADR 0076 — A package's compiler requirement:
ceesafec = ">=0.19.1" - ADR 0077 —
Console.flush(),Directory.space(path), and what diskio needs:IoError.StorageFull,File.openAppend,File.modified,File.setPermissions - ADR 0078 —
sendFilenever raises SIGPIPE; an open file's time and kind, andFile.openRegular - ADR 0079 — Imported C enums
- ADR 0080 — The kernel floors: exported and imported C data, constants C checks, configured code, C locals
- ADR 0081 — C declarations shared between packages: one owner per C symbol, typed views as wrappers
- ADR 0082 — Separate compilation at scale: units that never merge, per-unit preludes, parallel and cached builds, per-package check
- ADR 0083 — Const generic parameters:
bool, integer and enum values as generic arguments - ADR 0084 — Interior mutability:
RawCell,Celland a checkedRefCell - ADR 0085 — Pattern guards and richer patterns:
if (…)guards,|, ranges,@, constants, strings, slices,is - ADR 0086 — Interfaces: default methods,
Self, associated types and constants, and anIterator<T>interface - ADR 0087 — Macros: none in the language; translation rules,
@derive,debugAssert,c"…",embed - ADR 0088 — Embedding CeeSafe in a host program: a library archive,
ceesafe_init, panic and allocator hooks, host bindings