slovo/docs/language/STANDARD_RUNTIME.md
2026-05-22 12:11:23 +02:00

156 lines
29 KiB
Markdown

# Slovo Standard Runtime Catalog
Status: standard-runtime catalog through exp-101 over the released exp-14
conformance baseline. The latest Slovo experimental alpha release is
`exp-101`, Standard Vec String Option And Transform Helpers 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; and
exp-99 adds exactly four concrete `(vec string)` vector names. exp-100 and
exp-101 add no new compiler-known `std.*` 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.
Post-`1.0.0-beta.1` main-branch work adds the first runtime resource
foundation calls for read-only text file handles. These calls use the existing
concrete `result` families and are intended for a future `1.0.0-beta.2`
bundle. Handles are positive opaque `i32` process-local tokens, not stable
file descriptors or ABI values.
The exp-era catalog is closed to names promoted through exp-101. 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.
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.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 `i32`, `i64`, and `string`, 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 `i32`, `i64`, and `string`, 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.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 `i32`, `i64`, and `string`, 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.open_text_read_result` | `(string) -> (result i32 i32)` | post-`1.0.0-beta.1` main | `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)` | post-`1.0.0-beta.1` main | `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)` | post-`1.0.0-beta.1` main | `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.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/bytes parse,
underscores, rich parse errors, Unicode digit parsing, f64 containers,
writable resource handles, binary IO, directory handles, 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.