slovo/docs/language/STANDARD_RUNTIME.md

227 lines
45 KiB
Markdown

# Slovo Standard Runtime Catalog
Status: standard-runtime catalog through exp-104 plus the post-beta
`1.0.0-beta.18` JSON string token parsing foundation over the released exp-14
conformance baseline. The latest Slovo experimental alpha release is
`exp-104`, Standard Vec Bool Baseline Alpha. exp-29, exp-30, exp-32,
exp-33, and exp-35 through exp-93 add no compiler-known `std.*` names;
exp-31 adds exactly one checked numeric conversion name; exp-34 adds exactly
one strict bool parse name; exp-94 adds exactly four concrete `(vec i64)`
vector names; exp-95 through exp-98 add no compiler-known `std.*` names;
exp-99 adds exactly four concrete `(vec string)` vector names; exp-100 and
exp-101 add no new compiler-known `std.*` names; exp-103 adds exactly four
concrete `(vec f64)` vector names; and exp-104 adds exactly four concrete
`(vec bool)` vector names.
This document catalogs promoted compiler-known `std.*` operations only. It
does not add source syntax, runtime APIs, standard library functions, manifest
schema versions, ABI/layout promises, runtime headers/libraries, or beta
maturity.
`1.0.0-beta.2` adds the first runtime resource foundation calls for read-only
text file handles and narrow filesystem status/mutation operations. These calls
use the existing concrete `result` families where host failures need to be
observable. Handles are positive opaque `i32` process-local tokens, not stable
file descriptors or ABI values.
The `1.0.0-beta.6` networking foundation release adds a narrow loopback TCP
runtime family behind the `std.net` source facade. These names are blocking,
result-returning, and loopback-only; they do not define DNS, TLS, UDP, async
IO, non-loopback binding, HTTP frameworks, stable socket ABI/layout, or rich
platform error values.
The `1.0.0-beta.7` serialization/data-interchange foundation release adds
`std.json.quote_string` behind the `std.json` source facade. It provides
deterministic compact JSON string quoting before later byte-oriented string
scanning helpers, maps, or recursive JSON values are available.
The `1.0.0-beta.16` string scanning and token-boundary foundation release adds
byte-oriented `std.string` runtime helpers behind the source facade. The helpers
operate over bytes before the trailing NUL in the current runtime string
representation, return `err 1` for ordinary invalid indexes or ranges, and do
not define Unicode scalar, grapheme, display-width, locale, full JSON parser,
object/array parser, language slice/view, or stable API semantics.
The `1.0.0-beta.17` JSON primitive scalar parsing foundation release adds
promoted bool and numeric `std.json.parse_*_value_result` runtime helpers
behind the source facade. The helpers consume a whole isolated JSON primitive
token and return `err 1` for ordinary parse failure. The exact `null` helper
is source-only and is not cataloged as a promoted runtime operation.
The `1.0.0-beta.18` JSON string token parsing foundation release adds promoted
`std.json.parse_string_value_result` for one isolated ASCII JSON string token.
It decodes simple escapes, rejects Unicode escapes for this slice, and leaves
recursive JSON values, tokenizers, streaming, schema validation, and stable
JSON parse errors deferred.
The exp-era catalog is closed to names promoted through exp-104. exp-29,
exp-30, exp-32, exp-33, and exp-35 through exp-93 add no new standard-runtime
operation names. exp-32/exp-39/exp-56/exp-57 `std/math.slo` helpers,
exp-33/exp-35 `std/result.slo` helpers, exp-36 `std/option.slo` helpers,
exp-37 `std/time.slo` wrappers, exp-38 `std/random.slo`, `std/env.slo`, and
`std/fs.slo` wrappers, exp-48 `std/string.slo` and `std/num.slo` facades,
exp-49 `std/io.slo` facades, exp-52 `std/process.slo` facades, and exp-53/55
`std/cli.slo` facades are source-authored functions, not compiler-known
`std.*` operations. exp-44 through exp-55 add explicit source-search and
discovery gates for existing source modules; exp-56 through exp-93 add
language/source-helper slices. exp-94 adds `std.vec.i64.empty`,
`std.vec.i64.append`, `std.vec.i64.len`, and `std.vec.i64.index`; exp-95
broadens option language/source-helper support only and adds no new catalog
entries; exp-99 adds `std.vec.string.empty`, `std.vec.string.append`,
`std.vec.string.len`, and `std.vec.string.index`; exp-100 broadens option
language/source-helper support only and adds no new catalog entries; exp-101
broadens vec-string source-helper support only and adds no new catalog
entries; exp-103 adds `std.vec.f64.empty`, `std.vec.f64.append`,
`std.vec.f64.len`, and `std.vec.f64.index`; and exp-104 adds
`std.vec.bool.empty`, `std.vec.bool.append`, `std.vec.bool.len`, and
`std.vec.bool.index`.
Legacy compatibility
aliases such as `print_i32`, `print_string`, `print_bool`, and `string_len`
are not `std.*` names and are therefore excluded from this catalog. Legacy
unqualified result helper names remain compatibility syntax; the preferred
source-level result helper names are the `std.result.*` names cataloged below.
## Catalog
| Operation | Signature | Release | Fixture | Behavior/trap/result note | Manifest note | Deferrals |
| --- | --- | --- | --- | --- | --- | --- |
| `std.io.print_i32` | `(i32) -> unit` | v1.5 | `examples/supported/standard-runtime.slo` | Prints the `i32` using the legacy stdout behavior and returns builtin `unit`. | Uses existing standard-runtime usage recording if present; no schema change. | Unit/composite printing, formatting controls, stable helper ABI/layout. |
| `std.io.print_string` | `(string) -> unit` | v1.5 | `examples/supported/standard-runtime.slo` | Prints the string using the legacy stdout behavior and returns builtin `unit`. | Uses existing standard-runtime usage recording if present; no schema change. | String formatting controls, Unicode policy beyond existing string bytes, stable helper ABI/layout. |
| `std.io.print_bool` | `(bool) -> unit` | v1.5 | `examples/supported/standard-runtime.slo` | Prints `true` or `false` using the legacy stdout behavior and returns builtin `unit`. | Uses existing standard-runtime usage recording if present; no schema change. | Broader value printing and formatting controls. |
| `std.io.print_f64` | `(f64) -> unit` | exp-20 | `examples/supported/f64-numeric-primitive.slo` | Prints one implementation-owned finite `f64` textual representation plus a newline and returns builtin `unit`. | Uses existing standard-runtime usage recording if present; no schema change. | Formatting controls, stable printed digits, NaN/infinity policy, stable helper ABI/layout. |
| `std.io.print_i64` | `(i64) -> unit` | exp-21 | `examples/supported/i64-numeric-primitive.slo` | Prints one signed decimal `i64` textual representation plus a newline and returns builtin `unit`. | Uses existing standard-runtime usage recording if present; no schema change. | Formatting controls, unsigned/narrower integer printing, stable helper ABI/layout. |
| `std.num.i32_to_i64` | `(i32) -> i64` | exp-22 | `examples/supported/numeric-widening-conversions.slo` | Explicitly widens a signed `i32` value to the corresponding signed `i64` value. | Uses existing standard-runtime usage recording if present; no schema change. | Implicit promotion, narrowing conversions beyond exp-23 checked i64-to-i32 result, cast syntax, stable helper ABI/layout. |
| `std.num.i32_to_f64` | `(i32) -> f64` | exp-22 | `examples/supported/numeric-widening-conversions.slo` | Explicitly converts a signed `i32` value to a finite `f64` value representing that integer. | Uses existing standard-runtime usage recording if present; no schema change. | Implicit promotion, rounding-mode controls, generic casts, stable helper ABI/layout. |
| `std.num.i64_to_f64` | `(i64) -> f64` | exp-22 | `examples/supported/numeric-widening-conversions.slo` | Explicitly converts a signed `i64` value to a finite `f64`; exact preservation is not promised for every `i64`. | Uses existing standard-runtime usage recording if present; no schema change. | Implicit promotion, checked lossy f64 conversion APIs, rounding-mode controls, stable helper ABI/layout. |
| `std.num.i64_to_i32_result` | `(i64) -> (result i32 i32)` | exp-23 | `examples/supported/checked-i64-to-i32-conversion.slo` | Returns `ok value` when the signed `i64` input is in the signed `i32` range, otherwise returns `err 1`; range failure does not trap. | Uses existing standard-runtime usage recording if present; no schema change. | Other narrowing conversions beyond exp-27 checked f64-to-i32 result, cast syntax, `std.num.cast`, checked cast generics, stable helper ABI/layout. |
| `std.num.i32_to_string` | `(i32) -> string` | exp-24 | `examples/supported/integer-to-string.slo` | Returns the decimal signed ASCII string for the input `i32`; negative values include `-`, non-negative values have no leading `+`. | Uses existing standard-runtime usage recording if present; no schema change. | f64 formatting beyond exp-26 finite decimal text, parse APIs beyond the released i32/i64/f64/bool result calls, locale/base/radix/grouping/padding controls, generic format/display, implicit conversion, stable helper ABI/layout/ownership. |
| `std.num.i64_to_string` | `(i64) -> string` | exp-24 | `examples/supported/integer-to-string.slo` | Returns the decimal signed ASCII string for the input `i64`; negative values include `-`, non-negative values have no leading `+`. | Uses existing standard-runtime usage recording if present; no schema change. | f64 formatting beyond exp-26 finite decimal text, parse APIs beyond the released i32/i64/f64/bool result calls, locale/base/radix/grouping/padding controls, generic format/display, implicit conversion, stable helper ABI/layout/ownership. |
| `std.num.f64_to_string` | `(f64) -> string` | exp-26 | `examples/supported/f64-to-string.slo` | Returns finite decimal ASCII string text for promoted finite `f64` inputs; fixture values are `0.0`, `3.5`, `-1.5`, and `10.0`. | Uses existing standard-runtime usage recording if present; no schema change. | f32, f64 parse, generic parse/format/display/interpolation, locale/base/radix/grouping/padding/precision controls, stable NaN/infinity text, implicit conversion, stable helper ABI/layout/ownership. |
| `std.num.f64_to_i32_result` | `(f64) -> (result i32 i32)` | exp-27 | `examples/supported/f64-to-i32-result.slo` | Returns `ok value` only when the `f64` input is finite, exactly integral, and in the signed `i32` range; returns `err 1` for non-finite, fractional, or out-of-range input without trapping. | Uses existing standard-runtime usage recording if present; no schema change. | Unchecked f64-to-i32, casts/cast syntax, generic `cast_checked`, f32, unsigned/narrower integer families, f64 parse, mixed numeric arithmetic, numeric containers, stable helper ABI/layout/ownership. |
| `std.num.f64_to_i64_result` | `(f64) -> (result i64 i32)` | exp-31 | `examples/supported/f64-to-i64-result.slo` | Returns `ok value` only when the `f64` input is finite, exactly integral, and in the signed `i64` range; returns `err 1` for non-finite, fractional, or out-of-range input without trapping. Conservative fixture values avoid pinning every `f64`/`i64` edge. | Uses existing standard-runtime usage recording if present; no schema change. | Unchecked casts, unchecked f64-to-i64, cast syntax, generic `cast_checked`, f32, unsigned/narrower integer families, mixed numeric arithmetic, broad math, stable helper ABI/layout/ownership. |
| `std.string.len` | `(string) -> i32` | v1.5 | `examples/supported/standard-runtime.slo` | Returns the existing decoded byte-count length used by legacy `string_len`. | Uses existing standard-runtime usage recording if present; no schema change. | Unicode scalar/grapheme length, slicing, indexing, stable string ABI/layout. |
| `std.string.concat` | `(string, string) -> string` | exp-1 | `examples/supported/owned-string-concat.slo` | Returns an immutable runtime-owned string; allocation failure traps as `slovo runtime error: string allocation failed`. | Uses existing standard-runtime usage recording if present; no concat-specific schema field. | Mutable strings, string containers, user-visible allocation/deallocation, stable string ABI/layout. |
| `std.string.byte_at_result` | `(string, i32) -> (result i32 i32)` | `1.0.0-beta.16` | `examples/projects/std-layout-local-string` | Returns `ok byte` for a valid zero-based byte index before the trailing NUL, or `err 1` for an invalid index. | Uses existing standard-runtime usage recording if present; no schema change. | Character/grapheme indexing, unchecked indexing, Unicode scalar values, stable string ABI/layout. |
| `std.string.slice_result` | `(string, i32, i32) -> (result string i32)` | `1.0.0-beta.16` | `examples/projects/std-layout-local-string` | Returns `ok text` for a valid byte range before the trailing NUL, or `err 1` for an invalid range; allocation failure may trap with the existing string allocation policy. | Uses existing standard-runtime usage recording if present; no schema change. | Borrowed substring views, language slice/view syntax, Unicode/grapheme slicing, stable string ABI/layout/ownership. |
| `std.string.starts_with` | `(string, string) -> bool` | `1.0.0-beta.16` | `examples/projects/std-layout-local-string` | Returns whether the first string starts with the prefix bytes; the empty prefix matches. | Uses existing standard-runtime usage recording if present; no schema change. | Locale-sensitive matching, case folding, Unicode normalization, tokenizer/parser APIs, stable string ABI/layout. |
| `std.string.ends_with` | `(string, string) -> bool` | `1.0.0-beta.16` | `examples/projects/std-layout-local-string` | Returns whether the first string ends with the suffix bytes; the empty suffix matches. | Uses existing standard-runtime usage recording if present; no schema change. | Locale-sensitive matching, case folding, Unicode normalization, tokenizer/parser APIs, stable string ABI/layout. |
| `std.json.quote_string` | `(string) -> string` | `1.0.0-beta.7` | `examples/projects/std-layout-local-json` | Returns a compact JSON string literal for the input text, including surrounding quotes; it escapes quote, backslash, newline, tab, carriage return, backspace, form feed, and other control bytes as JSON escapes. Allocation failure traps as `slovo runtime error: string allocation failed`. | Uses existing standard-runtime usage recording if present; no schema change. | Full JSON parsing, recursive JSON values, maps/sets, streaming encoders, schema validation, Unicode normalization, embedded NUL support in the current null-terminated string ABI, stable helper ABI/layout/ownership. |
| `std.json.parse_string_value_result` | `(string) -> (result string i32)` | `1.0.0-beta.18` | `examples/projects/std-layout-local-json` | Returns `ok decoded` for one exact ASCII JSON string token with surrounding quotes and simple escapes, or `err 1` for ordinary parse failure; rejects leading/trailing whitespace, raw control bytes, raw non-ASCII bytes, raw quote/backslash, trailing bytes, and all `\uXXXX` escapes. Allocation failure may trap with the existing string allocation policy. | Uses existing standard-runtime usage recording if present; no schema change. | Full JSON parsing, object/array/value parsing, Unicode escape decoding, Unicode normalization, embedded NUL support in the current null-terminated string ABI, stable parse error taxonomy, stable helper ABI/layout/ownership. |
| `std.json.parse_bool_value_result` | `(string) -> (result bool i32)` | `1.0.0-beta.17` | `examples/projects/std-layout-local-json` | Returns `ok true` for exact `true`, `ok false` for exact `false`, or `err 1` otherwise. | Uses existing standard-runtime usage recording if present; no schema change. | Full JSON parsing, whitespace-tolerant document parsing, stable parse error taxonomy, stable helper ABI/layout. |
| `std.json.parse_i32_value_result` | `(string) -> (result i32 i32)` | `1.0.0-beta.17` | `examples/projects/std-layout-local-json` | Returns `ok value` for a whole JSON integer token in signed `i32` range, or `err 1`; rejects leading/trailing whitespace, leading `+`, and leading-zero integer forms except `0`. | Uses existing standard-runtime usage recording if present; no schema change. | Full JSON parsing, generic numeric parsing, stable parse error taxonomy, stable helper ABI/layout. |
| `std.json.parse_u32_value_result` | `(string) -> (result u32 i32)` | `1.0.0-beta.17` | `examples/projects/std-layout-local-json` | Returns `ok value` for a whole non-negative JSON integer token in `u32` range, or `err 1`; rejects leading/trailing whitespace, leading `+`, negative tokens, and leading-zero integer forms except `0`. | Uses existing standard-runtime usage recording if present; no schema change. | Full JSON parsing, generic numeric parsing, stable parse error taxonomy, stable helper ABI/layout. |
| `std.json.parse_i64_value_result` | `(string) -> (result i64 i32)` | `1.0.0-beta.17` | `examples/projects/std-layout-local-json` | Returns `ok value` for a whole JSON integer token in signed `i64` range, or `err 1`; rejects leading/trailing whitespace, leading `+`, and leading-zero integer forms except `0`. | Uses existing standard-runtime usage recording if present; no schema change. | Full JSON parsing, generic numeric parsing, stable parse error taxonomy, stable helper ABI/layout. |
| `std.json.parse_u64_value_result` | `(string) -> (result u64 i32)` | `1.0.0-beta.17` | `examples/projects/std-layout-local-json` | Returns `ok value` for a whole non-negative JSON integer token in `u64` range, or `err 1`; rejects leading/trailing whitespace, leading `+`, negative tokens, and leading-zero integer forms except `0`. | Uses existing standard-runtime usage recording if present; no schema change. | Full JSON parsing, generic numeric parsing, stable parse error taxonomy, stable helper ABI/layout. |
| `std.json.parse_f64_value_result` | `(string) -> (result f64 i32)` | `1.0.0-beta.17` | `examples/projects/std-layout-local-json` | Returns `ok value` for a whole finite JSON number token, including exponent form, or `err 1`; rejects leading/trailing whitespace, leading `+`, leading-zero whole-number forms except `0`, and non-finite results. | Uses existing standard-runtime usage recording if present; no schema change. | Full JSON parsing, generic numeric parsing, stable parse error taxonomy, stable helper ABI/layout. |
| `std.vec.i32.empty` | `() -> (vec i32)` | exp-2 | `examples/supported/vec-i32.slo` | Returns an empty immutable runtime-owned `(vec i32)`. | Uses existing standard-runtime usage recording if present; no vector-specific schema field. | Generic vectors, element families beyond current concrete vector families, vector mutation, stable vector ABI/layout. |
| `std.vec.i32.append` | `((vec i32), i32) -> (vec i32)` | exp-2 | `examples/supported/vec-i32.slo` | Returns a new immutable vector containing the input elements and appended value; allocation failure traps with the exp-2 vector allocation message. | Uses existing standard-runtime usage recording if present; no vector-specific schema field. | Mutation, `push`, capacity APIs, user deallocation, stable vector ABI/layout. |
| `std.vec.i32.len` | `((vec i32)) -> i32` | exp-2 | `examples/supported/vec-i32.slo` | Returns vector length as `i32`. | Uses existing standard-runtime usage recording if present; no vector-specific schema field. | Generic length APIs and stable vector ABI/layout. |
| `std.vec.i32.index` | `((vec i32), i32) -> i32` | exp-2 | `examples/supported/vec-i32.slo` | Returns the indexed value; out-of-bounds access traps with the exp-2 vector bounds message. | Uses existing standard-runtime usage recording if present; no vector-specific schema field. | Slices/views, iterators, mutation, stable vector ABI/layout. |
| `std.vec.i64.empty` | `() -> (vec i64)` | exp-94 | `examples/supported/vec-i64.slo` | Returns an empty immutable runtime-owned `(vec i64)`. | Uses existing standard-runtime usage recording if present; no vector-specific schema field. | Generic vectors, element families beyond current concrete vector families, vector mutation, stable vector ABI/layout. |
| `std.vec.i64.append` | `((vec i64), i64) -> (vec i64)` | exp-94 | `examples/supported/vec-i64.slo` | Returns a new immutable vector containing the input elements and appended value; allocation failure traps with the existing vector allocation message. | Uses existing standard-runtime usage recording if present; no vector-specific schema field. | Mutation, `push`, capacity APIs, user deallocation, stable vector ABI/layout. |
| `std.vec.i64.len` | `((vec i64)) -> i32` | exp-94 | `examples/supported/vec-i64.slo` | Returns vector length as `i32`. | Uses existing standard-runtime usage recording if present; no vector-specific schema field. | Generic length APIs and stable vector ABI/layout. |
| `std.vec.i64.index` | `((vec i64), i32) -> i64` | exp-94 | `examples/supported/vec-i64.slo` | Returns the indexed value; out-of-bounds access traps with the existing vector bounds message. | Uses existing standard-runtime usage recording if present; no vector-specific schema field. | Slices/views, iterators, mutation, stable vector ABI/layout. |
| `std.vec.f64.empty` | `() -> (vec f64)` | exp-103 | `examples/supported/vec-f64.slo` | Returns an empty immutable runtime-owned `(vec f64)`. | Uses existing standard-runtime usage recording if present; no vector-specific schema field. | Generic vectors, element families beyond current concrete vector families, vector mutation, stable vector ABI/layout. |
| `std.vec.f64.append` | `((vec f64), f64) -> (vec f64)` | exp-103 | `examples/supported/vec-f64.slo` | Returns a new immutable vector containing the input elements and appended value; allocation failure traps with the existing vector allocation message. | Uses existing standard-runtime usage recording if present; no vector-specific schema field. | Mutation, `push`, capacity APIs, user deallocation, stable vector ABI/layout. |
| `std.vec.f64.len` | `((vec f64)) -> i32` | exp-103 | `examples/supported/vec-f64.slo` | Returns vector length as `i32`. | Uses existing standard-runtime usage recording if present; no vector-specific schema field. | Generic length APIs and stable vector ABI/layout. |
| `std.vec.f64.index` | `((vec f64), i32) -> f64` | exp-103 | `examples/supported/vec-f64.slo` | Returns the indexed value; out-of-bounds access traps with the existing vector bounds message. | Uses existing standard-runtime usage recording if present; no vector-specific schema field. | Slices/views, iterators, mutation, stable vector ABI/layout. |
| `std.vec.bool.empty` | `() -> (vec bool)` | exp-104 | `examples/supported/vec-bool.slo` | Returns an empty immutable runtime-owned `(vec bool)`. | Uses existing standard-runtime usage recording if present; no vector-specific schema field. | Generic vectors, element families beyond current concrete vector families, vector mutation, stable vector ABI/layout. |
| `std.vec.bool.append` | `((vec bool), bool) -> (vec bool)` | exp-104 | `examples/supported/vec-bool.slo` | Returns a new immutable vector containing the input elements and appended value; allocation failure traps with the existing vector allocation message. | Uses existing standard-runtime usage recording if present; no vector-specific schema field. | Mutation, `push`, capacity APIs, user deallocation, stable vector ABI/layout. |
| `std.vec.bool.len` | `((vec bool)) -> i32` | exp-104 | `examples/supported/vec-bool.slo` | Returns vector length as `i32`. | Uses existing standard-runtime usage recording if present; no vector-specific schema field. | Generic length APIs and stable vector ABI/layout. |
| `std.vec.bool.index` | `((vec bool), i32) -> bool` | exp-104 | `examples/supported/vec-bool.slo` | Returns the indexed value; out-of-bounds access traps with the existing vector bounds message. | Uses existing standard-runtime usage recording if present; no vector-specific schema field. | Slices/views, iterators, mutation, stable vector ABI/layout. |
| `std.vec.string.empty` | `() -> (vec string)` | exp-99 | `examples/supported/vec-string.slo` | Returns an empty immutable runtime-owned `(vec string)`. | Uses existing standard-runtime usage recording if present; no vector-specific schema field. | Generic vectors, element families beyond current concrete vector families, vector mutation, stable vector ABI/layout. |
| `std.vec.string.append` | `((vec string), string) -> (vec string)` | exp-99 | `examples/supported/vec-string.slo` | Returns a new immutable vector containing the input elements and appended string; allocation failure traps with the existing vector allocation message. | Uses existing standard-runtime usage recording if present; no vector-specific schema field. | Mutation, `push`, capacity APIs, user deallocation, stable vector ABI/layout. |
| `std.vec.string.len` | `((vec string)) -> i32` | exp-99 | `examples/supported/vec-string.slo` | Returns vector length as `i32`. | Uses existing standard-runtime usage recording if present; no vector-specific schema field. | Generic length APIs and stable vector ABI/layout. |
| `std.vec.string.index` | `((vec string), i32) -> string` | exp-99 | `examples/supported/vec-string.slo` | Returns the indexed value; out-of-bounds access traps with the existing vector bounds message. | Uses existing standard-runtime usage recording if present; no vector-specific schema field. | Slices/views, iterators, mutation, stable vector ABI/layout. |
| `std.io.eprint` | `(string) -> unit` | exp-3 | `examples/supported/host-io.slo` | Writes the string to stderr without appending a newline and returns builtin `unit`. | Uses existing standard-runtime usage recording if present; no host-IO schema bump. | Formatting controls, terminal APIs, async IO, stable helper ABI/layout. |
| `std.process.argc` | `() -> i32` | exp-3 | `examples/supported/host-io.slo` | Returns process argument count as `i32`. | Uses existing standard-runtime usage recording if present; no process-specific schema field. | Rich process APIs, argv encoding guarantees, stable helper ABI/layout. |
| `std.process.arg` | `(i32) -> string` | exp-3 | `examples/supported/host-io.slo` | Returns zero-based process argument; out-of-range access traps as `slovo runtime error: process argument index out of bounds`. | Uses existing standard-runtime usage recording if present; no process-specific schema field. | Result-based errors are separate exp-10 names; rich process APIs remain deferred. |
| `std.env.get` | `(string) -> string` | exp-3 | `examples/supported/host-io.slo` | Returns environment value, or the empty string when missing. | Uses existing standard-runtime usage recording if present; no env-specific schema field. | Result-based errors are separate exp-10 names; env mutation and enumeration remain deferred. |
| `std.fs.read_text` | `(string) -> string` | exp-3 | `examples/supported/host-io.slo` | Returns file text; host read failure traps with the exp-3 file read message. | Uses existing standard-runtime usage recording if present; no fs-specific schema field. | Result-based errors are separate exp-10 names; binary, directory, streaming, async APIs remain deferred. |
| `std.fs.write_text` | `(string, string) -> i32` | exp-3 | `examples/supported/host-io.slo` | Writes text, returning `0` on success and `1` on host failure. | Uses existing standard-runtime usage recording if present; no fs-specific schema field. | Result-based errors are separate exp-10 names; binary, directory, streaming, async APIs remain deferred. |
| `std.time.monotonic_ms` | `() -> i32` | exp-8 | `examples/supported/time-sleep.slo` | Returns non-negative host monotonic elapsed milliseconds with implementation-owned epoch; host unavailability may trap as `slovo runtime error: monotonic time unavailable`. | Uses existing standard-runtime usage recording if present; no time-specific schema field. | Wall-clock/calendar/timezone APIs, high-resolution timers, scheduling guarantees, stable clock ABI/layout. |
| `std.time.sleep_ms` | `(i32) -> unit` | exp-8 | `examples/supported/time-sleep.slo` | Sleeps for a non-negative millisecond duration; `0` is valid. Negative runtime values trap as `slovo runtime error: sleep_ms negative duration`; host sleep failure may trap as `slovo runtime error: sleep failed`. | Uses existing standard-runtime usage recording if present; no time-specific schema field. | Positive-duration conformance timing assertions, async timers, cancellation, scheduling guarantees. |
| `std.process.arg_result` | `(i32) -> (result string i32)` | exp-10 | `examples/supported/host-io-result.slo` | Returns `ok` with argument text when in range, or `err 1` when out of range. | Uses existing standard-runtime usage recording if present; no exp-10-specific schema field. | Rich host error ADTs, platform codes, process API breadth, stable helper ABI/layout. |
| `std.env.get_result` | `(string) -> (result string i32)` | exp-10 | `examples/supported/host-io-result.slo` | Returns `ok` with environment value when present, or `err 1` when missing. | Uses existing standard-runtime usage recording if present; no exp-10-specific schema field. | Rich host error ADTs, env mutation/enumeration, platform codes. |
| `std.fs.read_text_result` | `(string) -> (result string i32)` | exp-10 | `examples/supported/host-io-result.slo` | Returns `ok` with file contents on success, or `err 1` on ordinary host read failure. | Uses existing standard-runtime usage recording if present; no exp-10-specific schema field. | Binary, directory, streaming, async APIs, rich host error ADTs. |
| `std.fs.write_text_result` | `(string, string) -> (result i32 i32)` | exp-10 | `examples/supported/host-io-result.slo` | Returns `ok 0` on success, or `err 1` on ordinary host write failure. | Uses existing standard-runtime usage recording if present; no exp-10-specific schema field. | Binary, directory, streaming, async APIs, rich host error ADTs. |
| `std.fs.exists` | `(string) -> bool` | `1.0.0-beta.2` | `examples/projects/std-layout-local-fs` | Returns `true` when host metadata lookup succeeds for the path, otherwise `false`. | Uses existing standard-runtime usage recording if present; no schema change. | Rich host errors, symlink policy, permissions detail, stable platform metadata model. |
| `std.fs.is_file` | `(string) -> bool` | `1.0.0-beta.2` | `examples/projects/std-layout-local-fs` | Returns `true` when the path exists and host metadata classifies it as a regular file. | Uses existing standard-runtime usage recording if present; no schema change. | Rich metadata, symlink policy, stable platform file-kind model. |
| `std.fs.is_dir` | `(string) -> bool` | `1.0.0-beta.2` | `examples/projects/std-layout-local-fs` | Returns `true` when the path exists and host metadata classifies it as a directory. | Uses existing standard-runtime usage recording if present; no schema change. | Directory handles, enumeration, recursive traversal, symlink policy, stable platform file-kind model. |
| `std.fs.remove_file_result` | `(string) -> (result i32 i32)` | `1.0.0-beta.2` | `examples/projects/std-layout-local-fs` | Removes one file; success returns `ok 0`, while ordinary host failure returns `err 1`. | Uses existing standard-runtime usage recording if present; no schema change. | Recursive removal, directory removal, rich host errors, platform-specific error codes. |
| `std.fs.create_dir_result` | `(string) -> (result i32 i32)` | `1.0.0-beta.2` | `examples/projects/std-layout-local-fs` | Creates one directory; success returns `ok 0`, while existing paths or ordinary host failure return `err 1`. | Uses existing standard-runtime usage recording if present; no schema change. | Recursive creation, permissions/mode policy, directory handles, rich host errors, platform-specific error codes. |
| `std.fs.open_text_read_result` | `(string) -> (result i32 i32)` | `1.0.0-beta.2` | `examples/projects/std-layout-local-fs` | Opens a text file for read-only resource-handle flow; success returns `ok handle` where `handle` is a positive opaque process-local `i32`, and ordinary open or handle-table failure returns `err 1`. | Uses existing standard-runtime usage recording if present; no schema change. | Writable handles, binary IO, directory handles, process handles, sockets, async IO, platform-specific error codes, stable handle ABI/layout. |
| `std.fs.read_open_text_result` | `(i32) -> (result string i32)` | `1.0.0-beta.2` | `examples/projects/std-layout-local-fs` | Reads remaining text from an open read handle; success returns `ok text`, while invalid, closed, or failed reads return `err 1`. | Uses existing standard-runtime usage recording if present; no schema change. | Chunked reads, seek, buffering controls, binary IO, async IO, platform-specific error codes, stable handle ABI/layout. |
| `std.fs.close_result` | `(i32) -> (result i32 i32)` | `1.0.0-beta.2` | `examples/projects/std-layout-local-fs` | Closes an open resource handle; success returns `ok 0`, while invalid, closed, or failed close operations return `err 1`. | Uses existing standard-runtime usage recording if present; no schema change. | Finalizers, destructors, affine ownership, automatic cleanup, stable handle ABI/layout. |
| `std.net.tcp_connect_loopback_result` | `(i32) -> (result i32 i32)` | `1.0.0-beta.6` | `examples/projects/std-layout-local-net` | Connects to a loopback TCP port; success returns `ok handle` where `handle` is a positive opaque process-local `i32`, and ordinary host failure returns `err 1`. | Uses existing standard-runtime usage recording if present; no schema change. | DNS, TLS, UDP, non-loopback connect policy, async IO, timeouts, rich host errors, stable socket ABI/layout. |
| `std.net.tcp_listen_loopback_result` | `(i32) -> (result i32 i32)` | `1.0.0-beta.6` | `examples/projects/std-layout-local-net` | Opens a blocking loopback TCP listener; success returns `ok handle`, and ordinary bind/listen or handle-table failure returns `err 1`. | Uses existing standard-runtime usage recording if present; no schema change. | Non-loopback binding, socket options, backlog policy beyond the implementation minimum, async IO, rich host errors, stable socket ABI/layout. |
| `std.net.tcp_bound_port_result` | `(i32) -> (result i32 i32)` | `1.0.0-beta.6` | `examples/projects/std-layout-local-net` | Returns the bound loopback TCP port for a listener handle as `ok port`; invalid handles or host lookup failure return `err 1`. | Uses existing standard-runtime usage recording if present; no schema change. | Stable handle ABI/layout, address inspection, IPv6 policy, rich host errors. |
| `std.net.tcp_accept_result` | `(i32) -> (result i32 i32)` | `1.0.0-beta.6` | `examples/projects/std-layout-local-net` | Accepts one blocking connection from a listener handle; success returns `ok handle`, and invalid handles or host accept failure return `err 1`. | Uses existing standard-runtime usage recording if present; no schema change. | Async accept, cancellation, readiness polling, peer address APIs, rich host errors, stable socket ABI/layout. |
| `std.net.tcp_read_all_result` | `(i32) -> (result string i32)` | `1.0.0-beta.6` | `examples/projects/std-layout-local-net` | Reads remaining text from a stream handle until EOF; success returns `ok text`, and invalid handles or host read failure return `err 1`. | Uses existing standard-runtime usage recording if present; no schema change. | Chunked reads, binary IO, buffering policy, encodings, async IO, rich host errors, stable socket ABI/layout. |
| `std.net.tcp_write_text_result` | `(i32, string) -> (result i32 i32)` | `1.0.0-beta.6` | `examples/projects/std-layout-local-net` | Writes the complete text to a stream handle; success returns `ok 0`, and invalid handles or host write failure return `err 1`. | Uses existing standard-runtime usage recording if present; no schema change. | Partial-write APIs, binary IO, buffering policy, async IO, rich host errors, stable socket ABI/layout. |
| `std.net.tcp_close_result` | `(i32) -> (result i32 i32)` | `1.0.0-beta.6` | `examples/projects/std-layout-local-net` | Closes a TCP stream or listener handle; success returns `ok 0`, while invalid, already closed, or failed close operations return `err 1`. | Uses existing standard-runtime usage recording if present; no schema change. | Finalizers, destructors, affine ownership, automatic cleanup, stable socket ABI/layout. |
| `std.random.i32` | `() -> i32` | exp-11 | `examples/supported/random.slo` | Returns a non-negative implementation-owned random `i32`; unavailable randomness traps as `slovo runtime error: random i32 unavailable`. | Uses existing standard-runtime usage recording if present; no randomness-specific schema field. | Seed APIs, crypto/security promises, ranges, bytes, floats, UUIDs, stable RNG ABI/layout. |
| `std.io.read_stdin_result` | `() -> (result string i32)` | exp-12 | `examples/supported/stdin-result.slo` | Reads remaining stdin as text; success returns `ok` text, ordinary EOF with no bytes returns `ok ""`, ordinary host/input failure returns `err 1`. | Uses existing standard-runtime usage recording if present; no stdin-specific schema field. | Trap stdin, line APIs, prompts, terminal mode, binary/streaming/async stdin. |
| `std.string.parse_i32_result` | `(string) -> (result i32 i32)` | exp-13 | `examples/supported/string-parse-i32-result.slo` | Parses an entire ASCII decimal signed `i32`; success returns `ok` value, ordinary parse failure returns `err 1`. | Uses existing standard-runtime usage recording if present; no parse-specific schema field. | Trap parse, floats/bools/bytes, trimming, locale/radix/underscore/plus parsing, rich parse errors, Unicode digits, slicing/indexing. |
| `std.string.parse_i64_result` | `(string) -> (result i64 i32)` | exp-25 | `examples/supported/string-parse-i64-result.slo` | Parses an entire non-empty ASCII decimal signed `i64` with optional leading `-`; success returns `ok` value, parse failure or out-of-range returns `err 1` without trapping. | Uses existing standard-runtime usage recording if present; no parse-specific schema field. | Generic parse, leading plus, trimming, locale/radix/base-prefix/underscore parsing, rich parse errors, Unicode digits, stable helper ABI/layout/ownership. |
| `std.string.parse_f64_result` | `(string) -> (result f64 i32)` | exp-28 | `examples/supported/string-parse-f64-result.slo` | Parses complete finite ASCII decimal `f64` text in the narrow `-?digits.digits` shape; success returns `ok` value, ordinary parse failure, non-finite text, unsupported leading/trailing characters, or out-of-domain input returns `err 1` without trapping. | Uses existing standard-runtime usage recording if present; no parse-specific schema field. | Generic parse, trap-based f64 parse, leading `+`, exponent notation, `.5`, `5.`, bool parse beyond exp-34 exact lowercase true/false, string/bytes parse, locale parsing, Unicode digits, underscores, rich parse errors, stable helper ABI/layout/ownership, result genericity, f64 containers. |
| `std.string.parse_bool_result` | `(string) -> (result bool i32)` | exp-34 | `examples/supported/string-parse-bool-result.slo` | Parses exactly complete ASCII lowercase `true` or `false`; success returns `ok true` or `ok false`, and ordinary parse failure returns `err 1` without trapping. | Uses existing standard-runtime usage recording if present; no parse-specific schema field. | Generic parse, trap-based bool parse, bool parsing beyond exact lowercase true/false, string/bytes parse, trimming, case-insensitive parsing, locale/Unicode parsing, numeric boolean parsing, rich parse errors, stable helper ABI/layout/ownership. |
| `std.result.is_ok` | `((result i32 i32)) -> bool`; `((result i64 i32)) -> bool`; `((result string i32)) -> bool`; `((result f64 i32)) -> bool`; `((result bool i32)) -> bool` | exp-15, extended exp-25, exp-28, and exp-34 | `examples/supported/result-helpers.slo`; `examples/supported/string-parse-i64-result.slo`; `examples/supported/string-parse-f64-result.slo`; `examples/supported/string-parse-bool-result.slo` | Preferred source-level ok-tag observer for the supported concrete result families. | No result-helper-specific manifest field; schema version remains `1`. | Generic results, result payload families beyond the listed concrete families, option helpers, mapping/chaining, stable helper ABI/layout. |
| `std.result.is_err` | `((result i32 i32)) -> bool`; `((result i64 i32)) -> bool`; `((result string i32)) -> bool`; `((result f64 i32)) -> bool`; `((result bool i32)) -> bool` | exp-15, extended exp-25, exp-28, and exp-34 | `examples/supported/result-helpers.slo`; `examples/supported/string-parse-i64-result.slo`; `examples/supported/string-parse-f64-result.slo`; `examples/supported/string-parse-bool-result.slo` | Preferred source-level err-tag observer for the supported concrete result families. | No result-helper-specific manifest field; schema version remains `1`. | Generic results, result payload families beyond the listed concrete families, option helpers, mapping/chaining, stable helper ABI/layout. |
| `std.result.unwrap_ok` | `((result i32 i32)) -> i32`; `((result i64 i32)) -> i64`; `((result string i32)) -> string`; `((result f64 i32)) -> f64`; `((result bool i32)) -> bool` | exp-15, extended exp-25, exp-28, and exp-34 | `examples/supported/result-helpers.slo`; `examples/supported/string-parse-i64-result.slo`; `examples/supported/string-parse-f64-result.slo`; `examples/supported/string-parse-bool-result.slo` | Preferred source-level ok-payload extraction; traps with the existing `unwrap_ok on err` behavior when applied to `err`. | No result-helper-specific manifest field; schema version remains `1`. | Generic results, result payload families beyond the listed concrete families, generic `std.result.unwrap_or`, mapping/chaining, stable helper ABI/layout. |
| `std.result.unwrap_err` | `((result i32 i32)) -> i32`; `((result i64 i32)) -> i32`; `((result string i32)) -> i32`; `((result f64 i32)) -> i32`; `((result bool i32)) -> i32` | exp-15, extended exp-25, exp-28, and exp-34 | `examples/supported/result-helpers.slo`; `examples/supported/string-parse-i64-result.slo`; `examples/supported/string-parse-f64-result.slo`; `examples/supported/string-parse-bool-result.slo` | Preferred source-level err-payload extraction; traps with the existing `unwrap_err on ok` behavior when applied to `ok`. | No result-helper-specific manifest field; schema version remains `1`. | Generic results, result payload families beyond the listed concrete families, generic `std.result.unwrap_or`, mapping/chaining, stable helper ABI/layout. |
## Manifest Rule
The artifact manifest remains `slovo.artifact-manifest` schema version `1`.
If the existing implementation records standard-runtime usage, it records the
names above through the same additive structure. If it does not, this catalog
does not introduce one-off metadata for any operation or release.
## Deferrals
This catalog does not define broad standard-library modules, importable
standard packages, stable runtime helper names, C ABI symbols, headers,
libraries, semantic versioning, deprecation policy, or beta compatibility.
Those remain future beta work unless a later explicit contract promotes them.
For the current exp-37 language baseline, it also does not define automatic
standard-library imports, compiler-loaded `std/` source, source replacement of
cataloged compiler-known calls, `f32`, generic parse or format APIs,
`f64` formatting beyond
`std.num.f64_to_string : (f64) -> string` finite decimal text, locale/base/
radix/grouping/padding/precision controls, generic format/display/
interpolation traits, implicit conversions, stable NaN/infinity text, mixed
numeric arithmetic/comparison, unchecked f64-to-i32, unchecked f64-to-i64,
unchecked casts, casts/cast syntax, generic `cast_checked`, narrowing or
checked numeric conversions beyond `std.num.i64_to_i32_result`,
`std.num.f64_to_i32_result`, and `std.num.f64_to_i64_result`, unsigned or
narrower integer families, broad math beyond the source-authored exp-32
`std/math.slo` helper slice, trigonometry, `sqrt`, `pow`,
generic result helpers beyond the source-authored exp-35 `std/result.slo`
concrete helper slice, source constructors or general source `match` support
for `(result bool i32)` beyond compiler-supported fixture flow,
generic `std.result.unwrap_or`, `std.result.map`,
`std.result.and_then`, generic option helpers beyond the source-authored
exp-36/exp-75/exp-95/exp-100 `std/option.slo` concrete helper slices, option
payload families beyond `i32`, `i64`, and `string`, broad time APIs beyond
the exp-37 `std/time.slo` wrappers,
wall-clock/calendar/timezone APIs, high-resolution timers, async timers,
cancellation, scheduling guarantees, new result payload families,
numeric parse/format APIs beyond the two exp-24
integer-to-string calls, the exp-26 f64-to-string call, and the released
`std.string.parse_i32_result` /
`std.string.parse_i64_result` /
`std.string.parse_f64_result` /
`std.string.parse_bool_result` result calls, bool parsing beyond exact
lowercase `true`/`false`, string scanning/tokenizing APIs beyond
`1.0.0-beta.16` byte access, substring, and prefix/suffix helpers,
string/bytes parse, underscores, rich parse errors, Unicode digit parsing,
f64 containers,
writable resource handles, binary IO, directory handles, directory
enumeration, recursive filesystem operations, process handles, sockets, async
resource handling, platform-specific host error codes, rich host-error ADTs,
automatic cleanup/finalizers/destructors, stable standard-library APIs or
implementation replacement, stable ABI/layout/ownership, manifest schema
changes, or beta maturity.