diff options
| author | 2026-10-15 09:46:14 +0330 | |
|---|---|---|
| committer | 2026-10-15 09:46:14 +0330 | |
| commit | 903e57850e6678f85c5f26cecf6ec318564ae139 (patch) | |
| tree | 19fb6944dc0fdcf4c54a1582c0cfb6573f93aa26 /docs | |
| parent | xref: baseline records the prover's writers of ft_ln (bin, kw_for), xub and x... (diff) | |
| parent | lsp: prefer the rt import fix when a library group wraps the same name (diff) | |
merge work/stdio: std.Io and one-level module completion
Diffstat (limited to 'docs')
| -rw-r--r-- | docs/LEARN.md | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/docs/LEARN.md b/docs/LEARN.md index ed12caf..35ee914 100644 --- a/docs/LEARN.md +++ b/docs/LEARN.md @@ -531,6 +531,30 @@ output: 124 ``` +### terminal input and output + +`std.Io` groups the terminal: `print(s)` and `println(s)` write a string, `nl()` a line break, and `put_c`, `put_s`, `put_n`, `put_hex`, `put_bs` and `put_f` write a character, a string, a decimal or hexadecimal integer, a packed byte string and a float. `get_c()`, `eof()`, `read(buf, n)` and `getline(buf, n)` read the program input; `getline` drops the line break and returns -1 at the end of the input. zc has no varargs or overloading, so `print` takes a string only and numbers use their own writers. the writers go through `rt.put_c`, so `std.capture` sees them, and the `rt` names (`rt.put_n` and the rest) keep working. + +[example source](../examples/learn/35-io.zc): + +```zc +namespace; +include std; +fn main() { + std.Io.print("total: "); std.Io.put_n(6 * 7); std.Io.nl(); + std.Io.print("ratio: "); std.Io.put_f(1.0 / 4.0); std.Io.nl(); + std.Io.println("done"); +} +``` + +output: + +```text +total: 42 +ratio: 0.250000 +done +``` + ### host services `rt.syscall(op, a, b, c)` calls the runtime interface to the vm's syscall gate. the runtime defines names such as `SYS_OPEN`, `SYS_READ`, `SYS_WRITE`, `SYS_GETENV`, and `SYS_TIME`. unsupported operations return -1. `std.Host.now()` wraps the clock request. |
