diff options
| author | 2026-10-14 09:32:57 +0000 | |
|---|---|---|
| committer | 2026-10-14 09:32:57 +0000 | |
| commit | b6053794cb9fee474685bdd08edef1b8d621c4db (patch) | |
| tree | 6d1d7bdfe8d899ce8357ad58232341b86a39cc5d /examples | |
| parent | todo: tick the markdown cleanup and onboarding check (diff) | |
| parent | document the standard library api (diff) | |
Merge std library docs
Diffstat (limited to 'examples')
| -rw-r--r-- | examples/std_tour.zc | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/examples/std_tour.zc b/examples/std_tour.zc new file mode 100644 index 0000000..df4d02b --- /dev/null +++ b/examples/std_tour.zc @@ -0,0 +1,61 @@ +namespace; +include rt, std; + +// a tour of the standard library: one or two functions from each group, printing +// what they return. run it with: build/bin/zy < examples/std_tour.zc + +int big(int x) { return x > 2; } +int dbl(int x) { return x * 2; } +int add(int a, int b) { return a + b; } + +fn main() { + // text: char* strings, one character per word + let buf[32]; + std.Text.itoa(0 - 42, buf); rt.put_s(buf); rt.put_c(10); // -42 + rt.put_n(std.Text.find("needle in a haystack", "hay")); rt.put_c(10); // 12 + + // num: integer helpers + rt.put_n(std.Num.gcd(84, 36)); rt.put_c(' '); // 12 + rt.put_n(std.Num.pow(2, 10)); rt.put_c(10); // 1024 + + // host: the clock and the environment; this variable is not set + rt.put_n(std.Host.now() > 0); rt.put_c(' '); // 1 + let v[16]; + rt.put_n(std.Host.env("STD_TOUR_UNSET_VARIABLE", v, 16)); rt.put_c(10); // -1 + + // bytes: packed byte strings, from b"..." literals + rt.put_n(std.Bytes.len(b"packed")); rt.put_c(' '); // 6 + rt.put_n(std.Bytes.find(b"needle", b"ed")); rt.put_c(' '); // 2 + rt.put_bs(std.Bytes.itoa(7)); rt.put_c(10); // 7 + + // arena: a region of words, handed out in pieces and freed all at once + let a = std.arena(8); + rt.put_n(std.Arena.alloc(a, 4) != 0); rt.put_c(' '); // 1 + rt.put_n(std.Arena.alloc(a, 100) == 0); rt.put_c(10); // 1 + std.Arena.reset(a); + + // buf: byte buffers from bnew + let b = std.bnew(8); + std.Buf.set(b, 0, 65); std.Buf.set(b, 1, 66); + rt.put_n(std.Buf.length(b)); rt.put_c(' '); // 2 + rt.put_c(std.Buf.get(b, 1)); rt.put_c(10); // B + + // capture: send the output into a string instead of the terminal + let out = std.capture.start(); + rt.put_n(42); + std.capture.end(out); + rt.put_s("captured: "); rt.put_s(out); rt.put_c(10); // captured: 42 + + // array algorithms: one function per step, applied to an array of words + int[?] xs = rt.new(int[?], 0); + push(xs, 1); push(xs, 3); push(xs, 5); + rt.put_n(std.array_find(xs, 3)); rt.put_c(' '); // 1 + rt.put_n(std.array_count(xs, big)); rt.put_c(' '); // 2 + rt.put_n(std.array_reduce(xs, 0, add)); rt.put_c(10); // 9 + let doubled = std.array_map(xs, dbl); + rt.put_n(doubled[2]); rt.put_c(10); // 10 + + // the command line: std.libinit() fills argc before main runs + rt.put_n(std.argc > 0); rt.put_c(10); // 1 + return 0; +} |
