feat(stdlib): add Os.* — the OS/environment interface (#21)
All checks were successful
docs / build-and-deploy (push) Successful in 2s
All checks were successful
docs / build-and-deploy (push) Successful in 2s
An Os.* namespace, Go-flavored and game-scoped, for the environment *around* the game: the command line, environment variables, standard streams, process exit, the host platform, and the per-user known folders a game writes into. Rounds the bare System.* builtins (arg/getenv/exit) into one coherent surface. - args / arg_count / arg the argument vector (args() -> []string) - env / env_or / has_env read env vars (null-safe via env_or) - set_env / unset_env mutate this process's environment - exit(code) terminate with a status code - platform() / arch() host facts (uname sysname/machine) - stdout_write / stderr_write raw writes to the standard streams - save_dir / config_dir / cache_dir / temp_dir per-user known folders Pure libc over NUL-terminated strings; C-free, no new runtime. arg_count/arg/ exit stay light (no prelude) as thin aliases of the existing intrinsics; the rest share one Os runtime prelude emitted on demand (g_uses_osrt). platform() is portable (uname system name is field 0 on every Unix); arch() and the known-folder layout follow the macOS/BSD conventions — the fully supported native target today. Linux/Windows/wasm folder resolution and a target-aware arch() are documented follow-ups. - examples/library/os.ludic: asserts the invariants that hold regardless of host — env round-trip, env_or fallback, unset, args()==arg_count(), non-empty platform/arch and known dirs. Wired into `x test` (now 54 passed). - docs: a new Os section + 17 per-symbol pages; inventory updated; every fence passes check-docs (--fmt) and the site builds via docgen. - seed regenerated; `x bootstrap-cfree` fixpoint holds. Closes #21 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
031b138f84
commit
b205dd8dfd
27 changed files with 12109 additions and 10447 deletions
|
|
@ -438,5 +438,24 @@
|
|||
"log-error",
|
||||
"log-set_level",
|
||||
"log-level"
|
||||
],
|
||||
"os": [
|
||||
"os-args",
|
||||
"os-arg_count",
|
||||
"os-arg",
|
||||
"os-env",
|
||||
"os-env_or",
|
||||
"os-has_env",
|
||||
"os-set_env",
|
||||
"os-unset_env",
|
||||
"os-exit",
|
||||
"os-platform",
|
||||
"os-arch",
|
||||
"os-stdout_write",
|
||||
"os-stderr_write",
|
||||
"os-save_dir",
|
||||
"os-config_dir",
|
||||
"os-cache_dir",
|
||||
"os-temp_dir"
|
||||
]
|
||||
}
|
||||
|
|
|
|||
|
|
@ -32,6 +32,7 @@ function selfhost_frags() -> []pointer {
|
|||
push(f, "selfhost/emit_uuid.ludic")
|
||||
push(f, "selfhost/emit_noise.ludic")
|
||||
push(f, "selfhost/emit_log.ludic")
|
||||
push(f, "selfhost/emit_os.ludic")
|
||||
push(f, "selfhost/emit_list.ludic")
|
||||
push(f, "selfhost/emit_ease.ludic")
|
||||
push(f, "selfhost/emit_collide.ludic")
|
||||
|
|
|
|||
|
|
@ -103,6 +103,7 @@ function cmd_test() -> int {
|
|||
feat_case("library/uuid", "", "1 2 3 4 5 6 7 8 9 10", "uuid.ludic (Uuid v4/v7 format, version/variant, parse/equals)")
|
||||
feat_case("library/noise", "", "1 2 3 4 5 6 7 8 9 10 11", "noise.ludic (Noise value/perlin/simplex/fbm/cellular determinism + range)")
|
||||
feat_case("library/logging", "", "0 5 2 1", "logging.ludic (Log levels, set_level/level threshold, structured fields)")
|
||||
feat_case("library/os", "", "1 2 3 4 5 6 7 8 9 10 11 12 13", "os.ludic (Os args/env round-trip, platform/arch, known dirs)")
|
||||
|
||||
# issue #9: the Time/Date/Duration/Clock stdlib, driven from its own `entry`.
|
||||
net_case("lang/offline_rewards", "13 650 2026-08-30 0")
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue