Process & Runtime Semantics by Language
Part hub — Section G: Comprehensive Programming-Language Semantics, Standard Libraries, Process APIs, and Subprocess Behavior.
Each of the eight languages (C, C++, Python, Go, Java, Rust, Node.js, OCaml) is documented as a separate documentation project with six mandatory coverage areas and its own verifiable coverage ledger:
- Syntax and semantics — declarations, evaluation rules, scope and lifetime, cleanup, error propagation, undefined/unspecified behavior, version and platform deltas, misconceptions, worked examples.
- Standard-library and runtime API inventory — source-derived, with canonical signatures, side effects, ownership, thread-safety, and version availability; never inventory from memory.
- Process creation and termination — entry-point return versus explicit termination, cleanup handlers, destructors/deferred/hooks/finalizers, uncaught exceptions, panics, aborts, exit-status ranges and truncation.
- Signals and OS interaction — registration, masking, delivery, async-signal-safety, runtime restrictions, threads/GC/FFI interactions, POSIX versus Linux-specific behavior.
- Subprocess and child-process management — creation, waiting, pipes, streams, timeouts, cancellation, zombies, injection-safe argument passing, status retrieval.
- Concurrency and resource semantics — threading, synchronization, fd/handle ownership, buffering, deadlocks, races, leaks, and the effect of GC / ownership systems / runtime scheduling.
Scope discipline: this is not an indiscriminate ecosystem inventory. The in-scope surface is language semantics, the standard library/runtime insofar as it bears on process lifecycle, signals, subprocesses, and resource management. Adjacent deep dives live elsewhere in this book and are cross-linked, not duplicated:
- Exit-status decoding, signal tables, and the
128+Nconvention: Linux → Process Exit Codes, Signals, and Lifecycle — per-language exit/signal chapters underlinux/process-exit-signal/languages/. - Interview-oriented topic pages (pointers, GIL, GC, ownership, JVM
internals): the sibling
Programming Languagessections such as C POSIX, Python GIL, Rust ownership.
Chapters and ledgers
| Language | Chapter | Coverage ledger | Verified target (official sources, retrieved 2026-10) |
|---|---|---|---|
| C | c.md | ledger-c.md | ISO C17 (N2310) + C23 (N3220), glibc (via sourceware.org), POSIX.1-2024, man-pages 6.19 |
| C++ | cpp.md | ledger-cpp.md | ISO C++23 DIS N4950 + working draft (eel.is, 2026-08-23), GCC 14.2.0 libstdc++, POSIX.1-2024 |
| Python | python.md | ledger-python.md | CPython 3.15.0 (docs.python.org + CPython source + PEPs 442/446/475) |
| Go | go.md | ledger-go.md | Go 1.27.2 (go.dev/dl JSON feed + pkg.go.dev) |
| Java | java.md | ledger-java.md | JDK 25 (Javadoc + JLS SE 25 + JEPs + jdk-25+36 source), HotSpot on Linux |
| Rust | rust.md | ledger-rust.md | std 1.99.0 (build b940084d7, 2026-09-28; doc.rust-lang.org + std source) |
| Node.js | nodejs.md | ledger-nodejs.md | Node.js v24.21.0 ‘Krypton’ LTS (nodejs.org/dist + api docs, libuv 1.52.1) |
| OCaml | ocaml.md | ledger-ocaml.md | OCaml 5.5.1 (ocaml.org + official source tree, 24 verified .mli/.c files) |
| All | comparison.md | — | Cross-language semantic comparison (G5), grounded in the eight chapters |
Exact versions were re-verified against the official release feeds at research time; where a chapter’s target moved relative to the exit-signal part’s older range (e.g. Rust 1.61–1.8x era there), the chapters here are the current source of record. What each chapter actually checked, and any source that could not be reached, are stated in the chapter’s scope section and ledger header. No chapter claims universality beyond its declared scope.
Coverage ledger schema (G4)
Every ledger uses the schema below. Statuses: not-started, researched,
documented, source-limited. An entry is documented only when the
explanation exists, required examples are present, and the cited references
support the claims — a name in a table is never sufficient.
| ID | Language/API or behavior | Canonical signature | Documentation path | Authoritative reference | Version/platform scope | Status |
|---|
Stable ID prefixes: PL-C-, PL-CPP-, PL-PY-, PL-GO-, PL-JV-,
PL-RS-, PL-ND-, PL-OC- (deliberately disjoint from the
LG-* ledger IDs of the exit-signal part).
Per-language rollups (inventoried / documented / remaining / source-limited) are reported at the top of each ledger file and consolidated below.
Coverage rollup (integration result)
| Ledger | Inventoried | Documented | Remaining | Source-limited |
|---|---|---|---|---|
| C | 82 | 81 | 0 | 1 |
| C++ | 75 | 74 | 0 | 1 |
| Python | 80 | 80 | 0 | 0 |
| Go | 80 | 80 | 0 | 0 |
| Java | 80 | 78 | 0 | 2 |
| Rust | 76 | 73 | 0 | 3 |
| Node.js | 80 | 80 | 0 | 0 |
| OCaml | 80 | 77 | 0 | 3 |
| Part total | 633 | 623 | 0 | 10 |
Every source-limited row names the unreachable primary source and the
substituting evidence in its ledger (examples: the Linux UAPI wait-status
header claims anchored to man-pages 6.19; std::jthread destructor wording
anchored to the working-draft class contract; libjsig kept brief; OCaml
tail-call and SIGSEGV-conversion wording absent from the fetched manual
pages). No entry is marked documented on the strength of a name in a
table; the statuses not-started and researched do not occur at
publication time.
Reference policy (G3)
- Primary sources only for behavior claims: language specifications, official standard-library and runtime references, official platform documentation.
- Direct links next to significant claims; dedicated
Referencessection per chapter; per-ledger-entry signature source. - Never invent URLs, signatures, outputs, guarantees, or version availability. Implementation-dependent or unverifiable behavior is labeled as such, explicitly.