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>
1.7 KiB
| id | title | order |
|---|---|---|
| os | Os | 6 |
The operating-system interface — the environment around the game rather than the game itself: the command line, environment variables, the standard streams, the process exit code, the host platform, and the per-user folders a game writes its saves, config, and cache into. It rounds the bare System builtins (arg, getenv, exit) into one coherent, Go-flavored namespace.
It is deliberately small and game-scoped: there is no process spawning, no signals, and no user/permission APIs. Reach for it in launchers, asset pipelines, and dev tools — parsing launch flags like --level 3, reading config from the environment, or resolving where a save file belongs — far more than in the simulation itself.
Determinism: args, the env family, and platform/arch are non-deterministic host input. Read them once at startup to configure the game, and keep them out of the replayable simulation so a shared seed still reproduces.
Platform coverage: this first version targets the native macOS/BSD host — the fully supported target today. platform is portable (the uname system name is available on every Unix); arch and the known-folder layout (save_dir/config_dir/cache_dir) follow the macOS conventions. Linux/Windows/wasm folder resolution and a target-aware arch are documented follow-ups.