Built-in methods
Quick lookup for builtins and method syntax — full examples in the gallery below.
كيف تقرأ الصفحة
كل صف: الاسم، الأنواع، ومثال قصير. ابحث بـ Ctrl+K. الوحدات الكاملة في stdlib.
fn main() {
print("hi".len())
print(abs(-3))
}fn main() -> void {
print("hi".len())
print(abs(-3))
}Output
2
3
فهرس الـ sugar
كل اسم أدناه له مثال + Output في المعرض. انقر للانتقال:
- JSON:
jparse/jstr/jnum/jbool·jobj·obj/dict/jstringify·dict_i32·jfield - نص:
sb()/cat·.replacen - ملفات:
slurp/spit·ls/rm·create_dir - وقت/بيئة:
now/ms·env/env_or - عملية:
cmd().run()·uuid() - ترميز/أخطاء:
b64/b64d/url_encode·err_io - HTTP:
form/params·cookies/headers·req()· شبكة:fetch/get - مجموعات:
vec()HOFs ·strs()/lines· HashMap - SQL:
qb().to_sql()
I/O no import
| Call | Args | Returns | Notes | Example |
|---|---|---|---|---|
print(expr) | value | void | Stdout + newline | print(42) · print("hi") |
print(expr, color: spec) | value + color | void | ANSI: red, "#RGB", rgb(r,g,b) | print("err", color: red) |
write(expr) | value | void | Buffered stdout, no newline | write("> ") |
println(expr) | value | void | Buffered stdout + newline | println("done") |
flush() | — | void | Flush stdout buffer | write("…"); flush() |
input() | — | string | Read one stdin line | let line = input() |
input(prompt) | string | string | Print prompt, then read line | let name = input("Name? ") |
String methods no import
Method syntax on string — borrows the receiver (does not move). Heap copy: clone s keyword.
| Method | Args | Returns | Description | Example |
|---|---|---|---|---|
.length() / .len() | — | i32 | Byte length | "hello".len() |
.split(sep) | string | split list | Split on separator | "a,b,c".split(",") |
.trim() | — | string | Strip whitespace | " hi ".trim() |
.contains(needle) | string | i32 | 1 if found | "abc".contains("b") |
.starts_with(prefix) | string | i32 | Prefix test | "hello".starts_with("he") |
.ends_with(suffix) | string | i32 | Suffix test | "hello".ends_with("lo") |
.replace(from, to) | 2 × string | string | Replace all | "a-b".replace("-", "_") |
.replacen(from, to, count) | 2 × string, i32 | string | Replace at most count | "aaa".replacen("a", "b", 2) |
.to_upper() | — | string | ASCII upper-case | "hi".to_upper() |
.to_lower() | — | string | ASCII lower-case | "HI".to_lower() |
clone s | — | string | Heap copy (keyword) | let copy = clone s |
.strip_prefix(prefix) | string | string | Remove prefix if present | "pre_hi".strip_prefix("pre_") |
.strip_suffix(suffix) | string | string | Remove suffix if present | "hi.txt".strip_suffix(".txt") |
.index(needle) | string | i32 | First byte index or -1 | "hello".index("ell") |
.last_index(needle) | string | i32 | Last occurrence index | "aba".last_index("a") |
.is_empty() | — | i32 | 1 if length 0 | "".is_empty() |
.count(needle) | string | i32 | Non-overlapping matches | "hello".count("l") |
.repeat(n) | i32 | string | Repeat n times | "ab".repeat(3) |
.trim_start() / .trim_end() | — | string | Strip leading / trailing whitespace | " hi".trim_start() |
.splitn(sep, n) | string, i32 | VecStr | Split into at most n parts | "a,b,c".splitn(",", 2) |
.split_once(sep) | string | string | Part before first separator | "a:b:c".split_once(":") |
.fields() | — | VecStr | Whitespace-split words | "a b c".fields() |
.pad_start(w, pad) / .pad_end(w, pad) | i32, string | string | Pad to width | "hi".pad_start(5, "0") |
.to_snake_case() … .to_pascal_case() | — | string | Case conversion helpers | "Hello World".to_snake_case() |
.compare(other) / .equal_fold(other) | string | i32 | Lexicographic / case-insensitive compare | "abc".compare("abd") |
.index_byte(b) / .last_index_byte(b) | i32 | i32 | Byte search; -1 if missing | "abc".index_byte(97) |
.substring(start, len) | 2 × i32 | string | Slice by byte offset + length | "hello".substring(1, 3) |
.push_char(ch) / .pop() | i32 / — | string | Append byte / remove last byte | "ab".push_char(99) |
.after_sep(sep) / .before_sep(sep) | string | string | Part after / before first separator | "a:b".after_sep(":") |
.strip_ansi() | — | string | Remove ANSI escape codes | s.strip_ansi() |
.is_ascii() | — | i32 | 1 if all bytes ≤ 127 | "hello".is_ascii() |
.collapse_ws() | — | string | Collapse runs of whitespace to single space | " a b ".collapse_ws() |
.reverse() | — | string | Reverse byte order (new string) | "abc".reverse() |
.is_digit() / .is_alpha() / .is_alnum() | — | i32 | ASCII digit / letter / alphanumeric tests | "123".is_digit() |
.common_prefix_len(other) | string | i32 | Shared prefix length in bytes | "abc".common_prefix_len("abx") |
.pad_center(w, pad) | i32, string | string | Center-pad to width | "hi".pad_center(6, " ") |
.escape_json() / .truncate(n) / .split_after(sep) | varies | string | JSON escape / byte cap / split after separator | "a\\"b".escape_json() |
Examples: .split() · .trim() · .strip_prefix() · .fields() · for c in string
Number & math no import
Compiler math intrinsics — lowered to LLVM, no call overhead. Type overload on abs.
| Call | Args | Returns | Notes | Example |
|---|---|---|---|---|
abs(x) | i32 or f64 | same as arg | Absolute value | abs(-5) |
abs_i32(x) / abs_f64(x) | 1 numeric | i32 / f64 | Explicit typed variants | abs_i32(-42) |
min_i32(a, b) / max_i32(a, b) | 2 × i32 | i32 | Min / max | max_i32(3, 7) |
min_f64(a, b) / max_f64(a, b) | 2 × f64 | f64 | Min / max | min_f64(1.0, 2.0) |
clamp_i32(x, lo, hi) | 3 × i32 | i32 | Clamp to range | clamp_i32(15, 0, 10) |
cpu_count() | — | i32 | Logical CPU count | cpu_count() |
size_of<T>() / align_of<T>() | type param | i32 | Layout size / alignment in bytes (×8 for bits) | size_of<i32>() |
Example: abs / min / max · See also stdlib/math.ny f64 helpers · legacy Math_* · size_of / align_of
import "stdlib/math.ny" — f64 math stdlib
Runtime libm-backed helpers with short aliases (floor(x) → floor_f64). Examples in the gallery below.
| Call | Args | Returns | Notes | Example |
|---|---|---|---|---|
floor(x) / ceil(x) / round(x) | f64 | f64 | Rounding | floor(3.7) |
sqrt(x) / pow(b, e) | 1–2 × f64 | f64 | Root / power | sqrt(16.0) |
log(x) / log10(x) / log2(x) | f64 | f64 | Natural / base-10 / base-2 log | log(2.718) |
exp(x) | f64 | f64 | e^x | exp(1.0) |
clamp(x, lo, hi) | 3 × f64 | f64 | Clamp to range | clamp(1.5, 0.0, 1.0) |
trunc(x) | f64 | f64 | Truncate toward zero | trunc(1.9) |
hypot(x, y) | 2 × f64 | f64 | sqrt(x²+y²) | hypot(3.0, 4.0) |
asin(x) / acos(x) / atan(x) | f64 | f64 | Inverse trig | asin(0.0) |
signum(x) / fract(x) / fmod(x, y) | f64 | f64 | Sign / fractional part / remainder | signum(-2.0) |
deg_to_rad(deg) / rad_to_deg(rad) | f64 | f64 | Degree ↔ radian | deg_to_rad(180.0) |
is_nan(x) / is_finite(x) / is_infinite(x) | f64 | i32 | Float classification | is_finite(1.0) |
floor_i32(x) / ceil_i32(x) / round_i32(x) / trunc_i32(x) | i32 | i32 | Integer rounding helpers | round_i32(5) |
gcd_i32(a, b) / lcm_i32(a, b) / mod_i32(a, b) | 2–3 × i32 | i32 | GCD / LCM / Euclidean mod | gcd_i32(12, 8) |
saturating_add(a, b) / saturating_sub(a, b) / wrapping_add(a, b) | 2 × i32 | i32 | Saturating / wrapping integer ops | saturating_add(2147483647, 1) |
leading_zeros(n) / count_ones(n) / trailing_zeros(n) | i32 | i32 | Bit population / leading / trailing zeros | count_ones(5) |
rotate_left(n, s) / rotate_right(n, s) / rem_euclid(a, b) | i32 | i32 | Bit rotate / Euclidean remainder | rotate_left(1, 1) |
lerp(a, b, t) / copysign(x, y) | f64 | f64 | Linear interpolate / copy sign | lerp(0.0, 10.0, 0.5) |
Booleans no import
Booleans have no methods — use operators and print:
| Syntax | Result | Example |
|---|---|---|
a && b / a || b | bool | Logical and / or |
!a | bool | Logical not |
a == b, a != b | bool | Equality |
print(flag) | void | Prints true / false |
Lesson: Nyra Booleans
Fixed arrays no import
Syntax [T; N] — size known at compile time.
| Syntax / method | On | Returns | Notes | Example |
|---|---|---|---|---|
arr[i] | fixed array | T | Zero-based index | let x = nums[0] |
.length() / .len() | fixed array | i32 | Element count | nums.len() |
.sort() | [i32; N] or [f64; N] | new sorted array | Original unchanged | [3, 1, 2].sort() |
.sort_by(cmp) | fixed array | new sorted array | Comparator fn | items.sort_by(cmp) |
for x in arr | fixed array | — | Iterate elements | for x in nums { print(x) } |
for i in 0..n | range | — | Half-open integer range | for i in 0..10 { … } |
Examples: sort · for i in 0..n
Vectors & dynamic lists
vec() / VecI32 — preferred (auto-prelude)
Growable i32 vector with method chaining and HOFs. Low-level Vec_i32_* ptr API remains for FFI.
| Method / ctor | Args | Returns | Notes | Example |
|---|---|---|---|---|
vec() | — | VecI32 | Empty vector | let v = vec() |
.push(x) | i32 | VecI32 | Append (chains) | v.push(42) |
.get(i) / .set(i, v) | index, value | i32 / self | Indexed access | v.get(0) |
.len() / .pop() | — | i32 | Length / pop last | v.len() |
.contains(x) / .includes(x) | i32 | i32 | 1 / 0 | v.contains(42) |
.find(pred, fb) / .find_eq(x, fb) | pred / value | i32 | Search with fallback | v.find_eq(10, -1) |
.filter(pred) / .map(f) / .reduce(init, f) | fn | VecI32 / value | HOFs | v.filter(is_even) |
vec_range(start, end) | 2 × i32 | VecI32 | Half-open range | vec_range(0, 10) |
.insert(i, x) | i32, i32 | VecI32 | Insert at index | v.insert(0, 9) |
.remove(i) | i32 | VecI32 | Remove at index (chains) | v.remove(0) |
.clear() | — | VecI32 | Remove all elements | v.clear() |
.reverse() | — | VecI32 | Reverse in place | v.reverse() |
.sort() | — | VecI32 | Sort ascending in place | v.sort() |
.binary_search(x) | i32 | i32 | Index on sorted vec or -1 | v.binary_search(5) |
.swap(i, j) / .extend(other) / .append(x) | indices / VecI32 / i32 | VecI32 | Swap elements / merge vectors | v.extend(other) |
.capacity() / .reserve(n) / .fill(x) | i32 | i32 / self | Capacity / preallocate / fill in place | v.reserve(64) |
.swap_remove(i) / .is_empty() | i32 / — | i32 / i32 | O(1) remove (unordered) / empty test | v.swap_remove(1) |
.slice(start, end) / .window(start, size) / .retain(pred) | i32 / fn | VecI32 | Sub-range copy / in-place filter | v.window(0, 3) |
Example: vec(). Legacy: Vec_i32_new / Vec_i32_push.
strs() / StrVec — auto-prelude
String vector with method syntax + HOFs.
| Method / function | Args | Returns | Notes | Example |
|---|---|---|---|---|
strs() / StrVec_new() | — | StrVec | Empty string list | strs() |
.push(value) | string | StrVec | Append string | v.push("line") |
.get(index) | i32 | string | Indexed access | v.get(0) |
.len() / .joined(sep) | — | i32 / string | Count / join | v.joined(",") |
.filter / .map / .find / .contains | fn / value | self / value | HOFs | v.contains("a") |
lines(text) / StrVec_from_lines | string | StrVec | Split on newlines | lines(text) |
argv() | — | StrVec | CLI args | argv() |
.pop() / .clear() / .reverse() | — | string / self | Mutate in place | v.pop() |
.insert(i, s) / .remove_at(i) / .set(i, s) | i32, string | self / string | Indexed edit | v.insert(0, "x") |
.swap(i, j) / .extend(other) / .is_empty() | indices / StrVec | self / i32 | Reorder / merge / empty test | v.extend(other) |
Example: StrVec
Maps (key-value objects) — import "stdlib/map.ny"
String-keyed hash maps with method syntax.
| Method | Args | Returns | On type | Example |
|---|---|---|---|---|
.insert(key, value) | string, value | same map type | HashMap_str_i32 | m = m.insert("k", 1) |
.get(key) | string | i32 / string | Lookup value | m.get("score") |
.get_or(key, default) | string, default | value type | Fallback when key missing | m.get_or("x", 0) |
.contains(key) | string | i32 | 1 / 0 | m.contains("score") |
.len() | — | i32 | Entry count | m.len() |
.values() | — | VecI32 / StrVec | All values as vector | m.values() |
.clear() | — | same map type | Remove all entries | m.clear() |
.or_insert(key, val) / .get_or_insert(key, val) | key, value | value type | Insert if missing; return value | m.or_insert("k", 1) |
.is_empty() / .remove(key) / .update(key, f) | key / fn | i32 / self | Empty test / remove / in-place update | m.is_empty() |
HashMap_i32_i32 | i32 key & value | — | Integer-keyed map | HashMap_i32_i32_new() |
Constructors: HashMap_str_i32_new(), HashMap_str_str_new(), HashMap_i32_i32_new(). Example: HashMap insert / get · .len() / .values() / .clear()
import "stdlib/sync/atomic.ny" — atomics stdlib
| Call | Args | Returns | Notes | Example |
|---|---|---|---|---|
atomic_load_i32(p) / atomic_store_i32(p, v) | ptr, i32 | i32 / void | Seq-cst load / store | atomic_load_i32(cell) |
atomic_add_i32(p, d) / atomic_sub_i32(p, d) / atomic_xor_i32(p, m) | ptr, i32 | i32 | Fetch-add / sub / xor | atomic_add_i32(cell, 1) |
atomic_and_i32(p, m) / atomic_or_i32(p, m) | ptr, i32 | i32 | Fetch-and / or | atomic_and_i32(cell, 3) |
atomic_cas_i32(p, exp, des) | ptr, 2 × i32 | i32 | Compare-and-swap | Atomic_i32_new(0) |
Encoding, strconv & FS stdlib
| Call | Module | Returns | Notes | Example |
|---|---|---|---|---|
hex_decode(s) | stdlib/encoding/mod.ny | string | Decode hex bytes to string | hex_decode("4869") |
hex_encode(s) / hex_encode_upper(s) | stdlib/encoding/mod.ny | string | Encode bytes to hex (lower / upper) | hex_encode("Hi") |
parse_bool(s) / str_to_bool(s) | stdlib/strconv/mod.ny | i32 | 1/0 for true/false/yes/no | parse_bool("true") |
parse_int(s, base) / parse_i64(s, base) / parse_u64(s) | string, i32 | i32 / i64 | Parse integers with radix | parse_int("ff", 16) |
format_pad(n, w) / format_hex(n) / format_bin(n) / format_oct(n) | i32, width | string | Padded decimal / hex / bin / oct | format_pad(7, 3) |
format_f64(n, prec) / format_f64_pad(n, w, prec) | f64, i32 | string | Float with precision / width | format_f64(3.14, 2) |
quote(s) / format_quote(s) | string | string | Go-style quoted string literal | quote("hi") |
format_radix(n, base) / format_u64(n) / format_bin_i64(n) | i32 / i64 | string | Radix formatting | format_radix(255, 16) |
file_mtime(path) / path_is_file(path) / file_is_symlink(path) | string | i64 / i32 | Metadata helpers (import "stdlib/fs/mod.ny") | file_mtime("Cargo.toml") |
rename_file(src, dst) | 2 × string | i32 | Rename / move file | rename_file("a.txt", "b.txt") |
Split lists no import
Result of string.split(sep) — iterable string parts.
| Syntax / method | Returns | Notes | Example |
|---|---|---|---|
.length() / .len() | i32 | Part count | parts.len() |
for s in parts | each string | Iterate parts | for p in parts { print(p) } |
Example: for s in split_list
Timing & memory no import
| Call | Description | Example |
|---|---|---|
time_start(label) / time_end(label) | Wall-clock timing | time_start("work"); …; time_end("work") |
mem_start(label) / mem_end(label) | RSS delta | mem_start("alloc"); …; mem_end("alloc") |
benchmark { ... } | Time + memory + CPU% for a block | benchmark { heavy_work() } |
Examples: time_start / time_end · mem_start / mem_end · benchmark { }
Other builtins no import
| Call | Returns / effect | Notes | Example |
|---|---|---|---|
random() / random(min, max) | generic integer | ChaCha20 CSPRNG; return type follows bounds (i32, i64, u64, …). No-arg defaults to i32. | random(1, 6) · random<i64>(50, 100) |
random_f64() / random_f64(min, max) | f64 | Unit interval [0, 1) or range [min, max) | random_f64(0.0, 1.0) |
date() | Date struct | Local clock fields | let d = date(); print(d.year) |
spawn { ... } / spawn:task { ... } | JoinHandle (expr) / none (stmt) | Lightweight task pool; needs allow_extended; not on wasm32 | spawn { print(1) } |
spawn:thread { ... } | JoinHandle (expr) | Dedicated OS thread (~MB stack) | spawn:thread { heavy() } |
h.join() | void | On JoinHandle; blocks until spawn completes; consumes handle | let h = spawn { … }; h.join() |
parallel for i in 0..n { ... } / parallel:task | parallel loop | Task pool (default); max = N, cpu = N% | parallel for · parallel:task(max = 4) · cpu = N% · mode = … |
parallel:thread(...) for ... | parallel loop | OS thread fork-join per chunk | parallel:thread(max = 4) |
progress for x in items { ... } | loop + progress bar | Optional label | progress for |
defer expr | scope-exit call (LIFO) | Extended — prefer impl Drop | defer · LIFO |
async fn … { … } | promise / future handle | Body on task pool (spawn:task); not on wasm32 | async fn |
await handle | blocks until complete | Inside async fn or at call site | await |
Examples: allow_extended · JoinHandle · random · date() · spawn · .join() · parallel for · progress · benchmark · defer · async/await
File directive: allow_extended
spawn, parallel for, async/await, defer, and related APIs live in Nyra’s Stable Extended tier. Put this line at the top of the file (before fn main or imports) when the unit intentionally uses those features:
allow_extended
| What it does | Why use it |
|---|---|
| Marks the file as an Extended-tier program | Documents intent for readers and reviewers |
Suppresses warning[W001] | Extended-feature warnings are silenced in this file (useful when CI runs with stricter flags) |
| One line per file | Not per-function — applies to the whole compilation unit |
You do not need allow_extended for Core-only code (plain print, structs, loops, etc.). All spawn and parallel examples below include it. See also Concurrency → spawn and Roadmap (Core vs Extended).
Name: allow_extended (first line of file)
Explanation: Declares that this compilation unit intentionally uses Stable Extended APIs. Does not enable features by itself — it documents intent and integrates with stability warnings.
Example:
allow_extended
fn main() {
parallel for i in 0..3 {
print(i)
}
}allow_extended
fn main() -> void {
parallel for i in 0..3 {
print(i)
}
}Output: Same as parallel for (iteration order non-deterministic). Without this line, Extended syntax still compiles in default builds; the directive is recommended in files that use spawn, parallel for, etc.
Platform: spawn is unavailable on wasm32-wasi (compile error). Native Linux, macOS, and Windows only.
JoinHandle and .join()
When spawn appears as an expression (let h = spawn { … }), the type of h is JoinHandle — an opaque handle to a background task or thread. It is not a numeric ID; you cannot print it or compare it. You either wait on it or drop it.
| Method | Signature | Effect |
|---|---|---|
.join() | h.join() -> void | Blocks the current thread until the spawned work finishes. Consumes the handle (move) — you cannot call .join() twice on the same variable. |
| Form | Syntax | Wait for completion? |
|---|---|---|
| Statement | spawn { … } | No — fire-and-forget; runtime detaches immediately |
| Expression + join | let h = spawn { … }; h.join() | Yes — main waits at h.join() |
| Drop without join | let h = spawn { … } then scope ends | No — handle dropped → detach (same as statement form) |
.join() takes no arguments. Works the same for spawn, spawn:task, and spawn:thread; the compiler calls the correct runtime (spawn_task_join vs spawn_join) based on how the handle was created. See example.
Spawn & parallel examples
Runnable gallery (name · explanation · example · output): spawn · parallel · progress · benchmark · defer · async/await. Source: examples/builtins/{spawn,parallel,benchmark,defer,async}/.
JS-style helpers import required
Ergonomic wrappers with familiar names — import when you want function-style APIs over ptr handles.
Array helpers — import "stdlib/builtins_array.ny"
| Function | Description | Example |
|---|---|---|
Array_push(v, x) | Append i32 | Array_push(v, 42) |
Array_pop(v) | Pop last i32 | Array_pop(v) |
Array_map(v, f) | Map with fn | Array_map(v, double) |
Array_filter(v, pred) | Filter (pred → 1/0) | Array_filter(v, is_even) |
Array_reduce(v, init, f) | Fold left | Array_reduce(v, 0, sum) |
Array_find(v, pred, fallback) | First match or fallback | Array_find(v, is_even, -1) |
Example: Array_push / map / filter
String helpers — import "stdlib/builtins_string.ny"
| Function | Description | Example |
|---|---|---|
String_toUpperCase(s) | Upper-case | String_toUpperCase("hi") |
String_toLowerCase(s) | Lower-case | String_toLowerCase("HI") |
String_includes(s, needle) | Substring test | String_includes(s, "ab") |
String_split(s, sep) | Split to string vector | String_split("a,b", ",") |
String_replace(s, from, to) | Replace all matches | String_replace(s, "-", "_") |
String_replacen(s, from, to, count) | Replace at most count | String_replacen(s, "a", "b", 2) |
trim(s) | Trim whitespace | trim(" x ") |
strip_prefix(s, p) / strip_suffix(s, sfx) | Prefix / suffix removal | strip_prefix("pre_x", "pre_") |
index(s, needle) / last_index | Search indices | index("aba", "a") |
pad_start / pad_end (method syntax) | Pad to width | "hi".pad_start(5, "0") |
Example: String_split
stdlib/random.ny import for shuffle only
random(), random(min, max), and random_f64() are compiler builtins — no import. Import this module for shuffle_pick.
| Function | Description | Example |
|---|---|---|
random() / random(min, max) | Generic integer random (ChaCha20, HW-seeded) — type from bounds | random(1, 6) |
random_f64() / random_f64(min, max) | Random f64 — unit or range | random_f64(0.0, 1.0) |
shuffle_pick(vec) | Random i32 from vector handle | shuffle_pick(v) |
Example: random · shuffle_pick
Math helpers — import "stdlib/builtins_math.ny"
| Function | Description | Example |
|---|---|---|
Math_max(a, b) / Math_min(a, b) | Min / max (i32) | Math_max(3, 7) |
Math_round(x) / Math_floor(x) / Math_ceil(x) | Rounding (MVP on i32) | Math_round(42) |
Math_random() | Random f64 in [0, 1) | Math_random() |
Example: Math_random
JSON helpers — import "stdlib/builtins_json.ny"
| Function | Description | Example |
|---|---|---|
JSON_stringify(key, value) | Single-field JSON object | JSON_stringify("name", "Ada") |
JSON_parse(json, key) | Read string field | JSON_parse(json, "name") |
Example: JSON_stringify / JSON_parse
Runnable examples — easy vs typed
Grouped by category. Each block is named after the method or builtin it demonstrates. Run: nyra run examples/builtins/…. Output shows what prints to stdout.
String methods
String helpers
import "stdlib/builtins_string.ny"
fn main() {
let s = " Nyra Lang "
print(String_toUpperCase(clone s))
print(String_toLowerCase(clone s))
print(String_includes(clone s, "Lang"))
let parts = "a,b,c".split(",")
print(parts.length())
print(String_replace("hello world", "world", "nyra"))
print(trim(clone s))
}import "stdlib/builtins_string.ny"
fn main() -> void {
let s: string = " Nyra Lang "
print(String_toUpperCase(clone s))
print(String_toLowerCase(clone s))
print(String_includes(clone s, "Lang"))
let parts: VecStr = "a,b,c".split(",")
print(parts.length())
print(String_replace("hello world", "world", "nyra"))
print(trim(clone s))
}Output
NYRA LANG
1
3
hello nyra
Nyra Lang
after_sep
fn main() {
print("hello".after_sep(","))
print(after_sep("hello", ","))
}fn main() -> void {
print("hello".after_sep(","))
print(after_sep("hello", ","))
}before_sep
fn main() {
print("hello".before_sep(","))
print(before_sep("hello", ","))
}fn main() -> void {
print("hello".before_sep(","))
print(before_sep("hello", ","))
}char_at
fn main() {
print("hello".char_at(1))
print(char_at("hello", 1))
}fn main() -> void {
print("hello".char_at(1))
print(char_at("hello", 1))
}clone
fn main() {
let s = "copy me"
let c = clone s
print(c)
print(s)
}fn main() -> void {
let s: string = "copy me"
let c: string = clone s
print(c)
print(s)
}Output
copy me
copy me
collapse_ws
fn main() {
print("hello".collapse_ws())
}fn main() -> void {
print("hello".collapse_ws())
}common_prefix_len
fn main() {
print("hamdy.txt".common_prefix_len("arg"))
print(common_prefix_len("hamdy.txt", "arg"))
}fn main() -> void {
print("hamdy.txt".common_prefix_len("arg"))
print(common_prefix_len("hamdy.txt", "arg"))
}compare
fn main() {
print("hello".compare("arg"))
print(compare("hello", "arg"))
}fn main() -> void {
print("hello".compare("arg"))
print(compare("hello", "arg"))
}.contains()
fn main() {
print("hello".contains("ell"))
print("hello".contains("xyz"))
}fn main() -> void {
print("hello".contains("ell"))
print("hello".contains("xyz"))
}Output
1
0
.count()
fn main() {
print("hello".count("ell"))
}fn main() -> void {
print("hello".count("ell"))
}Output
1
.ends_with()
fn main() {
print("hello".ends_with("llo"))
print("hello".ends_with("xyz"))
}fn main() -> void {
print("hello".ends_with("llo"))
print("hello".ends_with("xyz"))
}Output
1
0
equal_fold
fn main() {
print("hello".equal_fold("arg"))
print(equal_fold("hello", "arg"))
}fn main() -> void {
print("hello".equal_fold("arg"))
print(equal_fold("hello", "arg"))
}escape_json
fn main() {
print("hello".escape_json())
}fn main() -> void {
print("hello".escape_json())
}.fields()
fn main() {
let words = "a b c".fields()
print(words.len())
}fn main() -> void {
let words = "a b c".fields()
print(words.len())
}Output
3
index_byte
fn main() {
print("hello".index_byte(1))
print(index_byte("hello", 1))
}fn main() -> void {
print("hello".index_byte(1))
print(index_byte("hello", 1))
}.index()
fn main() {
print("hello".index("ell"))
print(index("hello", "ell"))
}fn main() -> void {
print("hello".index("ell"))
print(index("hello", "ell"))
}Output
1
1
is_alnum
fn main() {
print("hello".is_alnum())
}fn main() -> void {
print("hello".is_alnum())
}is_alpha
fn main() {
print("hello".is_alpha())
}fn main() -> void {
print("hello".is_alpha())
}is_ascii
fn main() {
print("hello".is_ascii())
}fn main() -> void {
print("hello".is_ascii())
}is_digit
fn main() {
print("hello".is_digit())
}fn main() -> void {
print("hello".is_digit())
}.is_empty()
fn main() {
print("hello".is_empty())
}fn main() -> void {
print("hello".is_empty())
}Output
0
last_index_byte
fn main() {
print("hello".last_index_byte(1))
print(last_index_byte("hello", 1))
}fn main() -> void {
print("hello".last_index_byte(1))
print(last_index_byte("hello", 1))
}.last_index()
fn main() {
print("hello".last_index("ell"))
print(last_index("hello", "ell"))
}fn main() -> void {
print("hello".last_index("ell"))
print(last_index("hello", "ell"))
}Output
1
1
.len()
fn main() {
print("abc".len())
}fn main() -> void {
print("abc".len())
}Output
3
.length()
fn main() {
print("abc".length())
}fn main() -> void {
print("abc".length())
}Output
3
pad_center
fn main() {
print("hello".pad_center(1, "arg"))
print(pad_center("hello", 1, "arg"))
}fn main() -> void {
print("hello".pad_center(1, "arg"))
print(pad_center("hello", 1, "arg"))
}.pad_end()
fn main() {
print("hello".pad_end(1, "arg"))
}fn main() -> void {
print("hello".pad_end(1, "arg"))
}Output
hello
.pad_start()
fn main() {
print("hello".pad_start(1, "arg"))
}fn main() -> void {
print("hello".pad_start(1, "arg"))
}Output
hello
pop
fn main() {
print("hello".pop())
}fn main() -> void {
print("hello".pop())
}push_char
fn main() {
print("hello".push_char(1))
print(push_char("hello", 1))
}fn main() -> void {
print("hello".push_char(1))
print(push_char("hello", 1))
}.repeat()
fn main() {
print("hello".repeat(1))
print(repeat("hello", 1))
}fn main() -> void {
print("hello".repeat(1))
print(repeat("hello", 1))
}Output
hello
hello
.replace()
fn main() {
print("foo-bar".replace("bar", "baz"))
}fn main() -> void {
print("foo-bar".replace("bar", "baz"))
}Output
foo-baz
.replacen()
fn main() {
print("aaa".replacen("a", "b", 2))
}fn main() -> void {
print("aaa".replacen("a", "b", 2))
}Output
bba
reverse
fn main() {
print("hello".reverse())
}fn main() -> void {
print("hello".reverse())
}split_after
fn main() {
print("hello".split_after(","))
print(split_after("hello", ","))
}fn main() -> void {
print("hello".split_after(","))
print(split_after("hello", ","))
}.split_once()
fn main() {
print("hello".split_once(","))
}fn main() -> void {
print("hello".split_once(","))
}Output
hello
.split()
fn main() {
let parts = "a,b,c".split(",")
print(parts.length())
for p in parts {
print(p)
}
}fn main() -> void {
let parts: VecStr = "a,b,c".split(",")
print(parts.length())
for p in parts {
print(p)
}
}Output
3
a
b
c
.splitn()
fn main() {
let parts = "hello".splitn(",", 1)
print(parts.len())
}fn main() -> void {
let parts = "hello".splitn(",", 1)
print(parts.len())
}Output
1
.starts_with()
fn main() {
print("hello".starts_with("hel"))
print("hello".starts_with("xyz"))
}fn main() -> void {
print("hello".starts_with("hel"))
print("hello".starts_with("xyz"))
}Output
1
0
strip_ansi
fn main() {
print("hello".strip_ansi())
}fn main() -> void {
print("hello".strip_ansi())
}.strip_prefix()
fn main() {
print("hamdy.txt".strip_prefix(".txt"))
print(strip_prefix("hamdy.txt", ".txt"))
}fn main() -> void {
print("hamdy.txt".strip_prefix(".txt"))
print(strip_prefix("hamdy.txt", ".txt"))
}Output
hamdy.txt
hamdy.txt
.strip_suffix()
fn main() {
print("hamdy.txt".strip_suffix(".txt"))
print(strip_suffix("hamdy.txt", ".txt"))
}fn main() -> void {
print("hamdy.txt".strip_suffix(".txt"))
print(strip_suffix("hamdy.txt", ".txt"))
}Output
hamdy
hamdy
substring
fn main() {
print("hello".substring(1, 1))
print(substring("hello", 1, 1))
}fn main() -> void {
print("hello".substring(1, 1))
print(substring("hello", 1, 1))
}.to_camel_case()
fn main() {
print("Hello World".to_camel_case())
}fn main() -> void {
print("Hello World".to_camel_case())
}Output
helloWorld
.to_capitalize()
fn main() {
print("hello world".to_capitalize())
}fn main() -> void {
print("hello world".to_capitalize())
}Output
Hello world
.to_dot_case()
fn main() {
print("Hello World".to_dot_case())
}fn main() -> void {
print("Hello World".to_dot_case())
}Output
hello.world
.to_kebab_case()
fn main() {
print("Hello World".to_kebab_case())
}fn main() -> void {
print("Hello World".to_kebab_case())
}Output
hello-world
.to_lower()
fn main() {
print("NYRA".to_lower())
}fn main() -> void {
print("NYRA".to_lower())
}Output
nyra
.to_lowercase()
fn main() {
print("Hello World".to_lowercase())
}fn main() -> void {
print("Hello World".to_lowercase())
}Output
hello world
.to_pascal_case()
fn main() {
print("Hello World".to_pascal_case())
}fn main() -> void {
print("Hello World".to_pascal_case())
}Output
HelloWorld
.to_screaming_snake_case()
fn main() {
print("Hello World".to_screaming_snake_case())
}fn main() -> void {
print("Hello World".to_screaming_snake_case())
}Output
HELLO_WORLD
.to_snake_case()
fn main() {
print("Hello World".to_snake_case())
}fn main() -> void {
print("Hello World".to_snake_case())
}Output
hello_world
.to_titlecase()
fn main() {
print("hello world".to_titlecase())
}fn main() -> void {
print("hello world".to_titlecase())
}Output
Hello World
.to_train_case()
fn main() {
print("hello world".to_train_case())
}fn main() -> void {
print("hello world".to_train_case())
}Output
Hello-World
.to_upper()
fn main() {
print("Nyra".to_upper())
}fn main() -> void {
print("Nyra".to_upper())
}Output
NYRA
.trim_end()
fn main() {
print("hello".trim_end())
}fn main() -> void {
print("hello".trim_end())
}Output
hello
.trim_start()
fn main() {
print("hello".trim_start())
}fn main() -> void {
print("hello".trim_start())
}Output
hello
.trim()
fn main() {
print(" hello ".trim())
}fn main() -> void {
print(" hello ".trim())
}Output
hello
truncate
fn main() {
print("hello".truncate(1))
print(truncate("hello", 1))
}fn main() -> void {
print("hello".truncate(1))
print(truncate("hello", 1))
}String builder
sb() / cat / cat3 / cat4
fn main() {
print(sb().push("hi").push(" ").push_i32(42).build())
print(cat("x", "y"))
print(cat3("a", "b", "c"))
print(cat4("w", "x", "y", "z"))
}fn main() -> void {
print(sb().push("hi").push(" ").push_i32(42).build())
print(cat("x", "y"))
print(cat3("a", "b", "c"))
print(cat4("w", "x", "y", "z"))
}Output
hi 42
xy
abc
wxyz
Array methods
Array_push / map / filter / reduce
import "stdlib/builtins_array.ny"
import "stdlib/vec.ny"
fn is_even(x: i32) -> i32 {
if x % 2 == 0 {
return 1
}
return 0
}
fn mul10(x: i32) -> i32 {
return x * 10
}
fn sum(acc: i32, x: i32) -> i32 {
return acc + x
}
fn main() {
let v = Vec_i32_new()
Array_push(v, 1)
Array_push(v, 2)
Array_push(v, 3)
Array_push(v, 4)
let mapped = Array_map(v, mul10)
let evens = Array_filter(v, is_even)
let total = Array_reduce(v, 0, sum)
let found = Array_find(v, is_even, -1)
print(Vec_i32_len(mapped))
print(Vec_i32_len(evens))
print(total)
print(found)
print(Array_pop(v))
}import "stdlib/builtins_array.ny"
import "stdlib/vec.ny"
fn is_even(x: i32) -> i32 {
if x % 2 == 0 {
return 1
}
return 0
}
fn mul10(x: i32) -> i32 {
return x * 10
}
fn sum(acc: i32, x: i32) -> i32 {
return acc + x
}
fn main() -> void {
let v: ptr = Vec_i32_new()
Array_push(v, 1)
Array_push(v, 2)
Array_push(v, 3)
Array_push(v, 4)
let mapped: ptr = Array_map(v, mul10)
let evens: ptr = Array_filter(v, is_even)
let total: i32 = Array_reduce(v, 0, sum)
let found = Array_find(v, is_even, -1)
print(Vec_i32_len(mapped))
print(Vec_i32_len(evens))
print(total)
print(found)
print(Array_pop(v))
}Output
4
2
10
2
4
for x in arr
fn main() {
let arr = [1, 2, 3]
for n in arr {
print(n)
}
}fn main() -> void {
let arr: [i32; 3] = [1, 2, 3]
for n in arr {
print(n)
}
}Output
1
2
3
.len()
fn main() {
let arr = [10, 20, 30, 40]
print(arr.len())
}fn main() -> void {
let arr: [i32; 4] = [10, 20, 30, 40]
print(arr.len())
}Output
4
.len()
fn main() {
let arr = [10, 20, 30, 40]
print(arr.length())
}fn main() -> void {
let arr: [i32; 4] = [10, 20, 30, 40]
print(arr.length())
}Output
4
sort
fn main() {
let nums = [10, 1, 2, 8, 5]
let sorted = nums.sort()
for n in sorted {
print(n)
}
print(nums[0])
}fn main() -> void {
let nums: [i32; 5] = [10, 1, 2, 8, 5]
let sorted: [i32; 5] = nums.sort()
for n in sorted {
print(n)
}
print(nums[0])
}Output
1
2
5
8
10
10
Vector methods
Vec_i32
import "stdlib/vec.ny"
fn main() {
let v = Vec_i32_new()
Vec_i32_push(v, 10)
Vec_i32_push(v, 20)
print(Vec_i32_len(v))
print(Vec_i32_get(v, 0))
print(Vec_i32_pop(v))
}import "stdlib/vec.ny"
fn main() -> void {
let v: ptr = Vec_i32_new()
Vec_i32_push(v, 10)
Vec_i32_push(v, 20)
print(Vec_i32_len(v))
print(Vec_i32_get(v, 0))
print(Vec_i32_pop(v))
}Output
2
10
20
vec_i32_capacity
// [contrib-dev:vec_i32_capacity]
import "stdlib/vec.ny"
fn main() {
print(1)
}
// [/contrib-dev:vec_i32_capacity]// [contrib-dev:vec_i32_capacity]
import "stdlib/vec.ny"
fn main() -> void {
print(1)
}
// [/contrib-dev:vec_i32_capacity]VecI32.clear()
import "stdlib/vec.ny"
fn main() {
let v = vec().push(1).clear()
print(v.len())
}import "stdlib/vec.ny"
fn main() -> void {
let v = vec().push(1).clear()
print(v.len())
}vec_i32_extend
// [contrib-dev:vec_i32_extend]
import "stdlib/vec.ny"
fn main() {
print(1)
}
// [/contrib-dev:vec_i32_extend]// [contrib-dev:vec_i32_extend]
import "stdlib/vec.ny"
fn main() -> void {
print(1)
}
// [/contrib-dev:vec_i32_extend]vec_i32_extra_methods
// [contrib-dev:vec_i32_extra_methods:vec]
import "stdlib/vec.ny"
fn main() {
let v = vec()
print(v.is_empty())
}
// [/contrib-dev:vec_i32_extra_methods:vec]// [contrib-dev:vec_i32_extra_methods:vec]
import "stdlib/vec.ny"
fn main() -> void {
let v = vec()
print(v.is_empty())
}
// [/contrib-dev:vec_i32_extra_methods:vec]vec_i32_fill
// [contrib-dev:vec_i32_fill]
import "stdlib/vec.ny"
fn main() {
print(1)
}
// [/contrib-dev:vec_i32_fill]// [contrib-dev:vec_i32_fill]
import "stdlib/vec.ny"
fn main() -> void {
print(1)
}
// [/contrib-dev:vec_i32_fill]VecI32.insert()
import "stdlib/vec.ny"
fn main() {
let v = vec().push(1).push(3).insert(1, 2)
print(v.get(1))
}import "stdlib/vec.ny"
fn main() -> void {
let v = vec().push(1).push(3).insert(1, 2)
print(v.get(1))
}VecI32.remove()
import "stdlib/vec.ny"
fn main() {
let v = vec().push(10).push(20).remove(0)
print(v.len())
}import "stdlib/vec.ny"
fn main() -> void {
let v = vec().push(10).push(20).remove(0)
print(v.len())
}vec_i32_reserve
// [contrib-dev:vec_i32_reserve]
import "stdlib/vec.ny"
fn main() {
print(1)
}
// [/contrib-dev:vec_i32_reserve]// [contrib-dev:vec_i32_reserve]
import "stdlib/vec.ny"
fn main() -> void {
print(1)
}
// [/contrib-dev:vec_i32_reserve]VecI32.reverse()
import "stdlib/vec.ny"
fn main() {
let v = vec().push(1).push(2).push(3).reverse()
print(v.get(0))
}import "stdlib/vec.ny"
fn main() -> void {
let v = vec().push(1).push(2).push(3).reverse()
print(v.get(0))
}vec_i32_slice_methods
// [contrib-dev:vec_i32_slice_methods:vec]
import "stdlib/vec.ny"
fn main() {
let v = vec().push(1).push(2).push(3).push(4)
let w = v.window(1, 2)
print(w.len())
}
// [/contrib-dev:vec_i32_slice_methods:vec]// [contrib-dev:vec_i32_slice_methods:vec]
import "stdlib/vec.ny"
fn main() -> void {
let v = vec().push(1).push(2).push(3).push(4)
let w = v.window(1, 2)
print(w.len())
}
// [/contrib-dev:vec_i32_slice_methods:vec]VecI32.sort()
import "stdlib/vec.ny"
fn main() {
let v = vec().push(3).push(1).push(2).sort()
print(v.get(0))
}import "stdlib/vec.ny"
fn main() -> void {
let v = vec().push(3).push(1).push(2).sort()
print(v.get(0))
}vec_i32_swap_extend
// [contrib-dev:vec_i32_swap_extend:vec]
import "stdlib/vec.ny"
fn main() {
let v = vec().push(1).push(2).swap(0, 1)
print(v.get(0))
}
// [/contrib-dev:vec_i32_swap_extend:vec]// [contrib-dev:vec_i32_swap_extend:vec]
import "stdlib/vec.ny"
fn main() -> void {
let v = vec().push(1).push(2).swap(0, 1)
print(v.get(0))
}
// [/contrib-dev:vec_i32_swap_extend:vec]vec_i32_swap_remove
// [contrib-dev:vec_i32_swap_remove]
import "stdlib/vec.ny"
fn main() {
print(1)
}
// [/contrib-dev:vec_i32_swap_remove]// [contrib-dev:vec_i32_swap_remove]
import "stdlib/vec.ny"
fn main() -> void {
print(1)
}
// [/contrib-dev:vec_i32_swap_remove]vec_i32_swap
// [contrib-dev:vec_i32_swap]
import "stdlib/vec.ny"
fn main() {
print(1)
}
// [/contrib-dev:vec_i32_swap]// [contrib-dev:vec_i32_swap]
import "stdlib/vec.ny"
fn main() -> void {
print(1)
}
// [/contrib-dev:vec_i32_swap]vec_i32_truncate
// [contrib-dev:vec_i32_truncate]
import "stdlib/vec.ny"
fn main() {
print(1)
}
// [/contrib-dev:vec_i32_truncate]// [contrib-dev:vec_i32_truncate]
import "stdlib/vec.ny"
fn main() -> void {
print(1)
}
// [/contrib-dev:vec_i32_truncate]vec() HOFs
vec() filter/map/reduce/contains
fn is_even(x: i32) -> i32 {
if x % 2 == 0 { return 1 }
return 0
}
fn times2(x: i32) -> i32 { return x * 2 }
fn add(a: i32, b: i32) -> i32 { return a + b }
fn main() {
let xs = vec().push(1).push(2).push(3).push(4)
print(xs.len())
print(xs.contains(3))
print(xs.filter(is_even).len())
print(xs.map(times2).get(0))
print(xs.reduce(0, add))
print(vec_range(0, 3).len())
}fn is_even(x: i32) -> i32 {
if x % 2 == 0 { return 1 }
return 0
}
fn times2(x: i32) -> i32 { return x * 2 }
fn add(a: i32, b: i32) -> i32 { return a + b }
fn main() -> void {
let xs = vec().push(1).push(2).push(3).push(4)
print(xs.len())
print(xs.contains(3))
print(xs.filter(is_even).len())
print(xs.map(times2).get(0))
print(xs.reduce(0, add))
print(vec_range(0, 3).len())
}Output
4
1
2
2
10
3
String-vector methods
StrVec
import "stdlib/vec_str.ny"
fn main() {
let mut v = StrVec_new()
v = v.push("alpha")
v = v.push("beta")
print(v.len())
print(v.get(0))
}import "stdlib/vec_str.ny"
fn main() -> void {
let mut v = StrVec_new()
v = v.push("alpha")
v = v.push("beta")
print(v.len())
print(v.get(0))
}Output
2
alpha
strs() HOFs
strs() / lines() / joined
fn longer_than_3(s: string) -> i32 {
if s.len() > 3 { return 1 }
return 0
}
fn main() {
let names = strs().push("ada").push("nyra").push("bob")
print(names.joined(","))
print(names.contains("nyra"))
print(names.filter(longer_than_3).get(0))
print(lines("a\nb\nc").len())
}fn longer_than_3(s: string) -> i32 {
if s.len() > 3 { return 1 }
return 0
}
fn main() -> void {
let names = strs().push("ada").push("nyra").push("bob")
print(names.joined(","))
print(names.contains("nyra"))
print(names.filter(longer_than_3).get(0))
print(lines("a\nb\nc").len())
}Output
ada,nyra,bob
1
nyra
3
HashMap methods
HashMap contains / remove / get
fn main() {
let mut m = HashMap_str_str_new().insert("a", "1").insert("b", "2")
print(m.contains("a"))
m = m.remove("a")
print(m.contains("a"))
print(m.get("b"))
}fn main() -> void {
let mut m = HashMap_str_str_new().insert("a", "1").insert("b", "2")
print(m.contains("a"))
m = m.remove("a")
print(m.contains("a"))
print(m.get("b"))
}Output
1
0
2
hashmap_extra_methods
// [contrib-dev:hashmap_extra_methods:map]
import "stdlib/map.ny"
fn main() {
let m = HashMap_str_i32_new()
print(m.is_empty())
let _ = m.insert("k", 1)
print(m.is_empty())
}
// [/contrib-dev:hashmap_extra_methods:map]// [contrib-dev:hashmap_extra_methods:map]
import "stdlib/map.ny"
fn main() -> void {
let m = HashMap_str_i32_new()
print(m.is_empty())
let _ = m.insert("k", 1)
print(m.is_empty())
}
// [/contrib-dev:hashmap_extra_methods:map]hashmap_i32_get_or
// [contrib-dev:hashmap_i32_get_or:map]
import "stdlib/map.ny"
fn main() {
let m = HashMap_i32_i32_new()
print(m.get_or(1, 99))
}
// [/contrib-dev:hashmap_i32_get_or:map]// [contrib-dev:hashmap_i32_get_or:map]
import "stdlib/map.ny"
fn main() -> void {
let m = HashMap_i32_i32_new()
print(m.get_or(1, 99))
}
// [/contrib-dev:hashmap_i32_get_or:map]hashmap_i32_i32
// [contrib-dev:hashmap_i32_i32:map]
import "stdlib/map.ny"
fn main() {
let m = HashMap_i32_i32_new()
let _ = m.insert(1, 42)
print(m.get(1))
}
// [/contrib-dev:hashmap_i32_i32:map]// [contrib-dev:hashmap_i32_i32:map]
import "stdlib/map.ny"
fn main() -> void {
let m = HashMap_i32_i32_new()
let _ = m.insert(1, 42)
print(m.get(1))
}
// [/contrib-dev:hashmap_i32_i32:map]hashmap_or_insert
// [contrib-dev:hashmap_or_insert:map]
import "stdlib/map.ny"
fn main() {
let m = HashMap_str_i32_new().insert("k", 10)
print(m.or_insert("k", 42))
}
// [/contrib-dev:hashmap_or_insert:map]// [contrib-dev:hashmap_or_insert:map]
import "stdlib/map.ny"
fn main() -> void {
let m = HashMap_str_i32_new().insert("k", 10)
print(m.or_insert("k", 42))
}
// [/contrib-dev:hashmap_or_insert:map]hashmap_update
// [contrib-dev:hashmap_update:map]
import "stdlib/map.ny"
fn main() {
let m = HashMap_str_i32_new().insert("k", 10)
let _ = m.insert("k", 20)
print(m.get("k"))
}
// [/contrib-dev:hashmap_update:map]// [contrib-dev:hashmap_update:map]
import "stdlib/map.ny"
fn main() -> void {
let m = HashMap_str_i32_new().insert("k", 10)
let _ = m.insert("k", 20)
print(m.get("k"))
}
// [/contrib-dev:hashmap_update:map]HashMap insert / get / contains
import "stdlib/map.ny"
fn main() {
let mut m = HashMap_str_i32_new()
m = m.insert("score", 100)
print(m.get("score"))
print(m.contains("score"))
}import "stdlib/map.ny"
fn main() -> void {
let mut m = HashMap_str_i32_new()
m = m.insert("score", 100)
print(m.get("score"))
print(m.contains("score"))
}Output
100
1
map_i32_i32_clear
// [contrib-dev:map_i32_i32_clear]
import "stdlib/map.ny"
fn main() {
print(1)
}
// [/contrib-dev:map_i32_i32_clear]// [contrib-dev:map_i32_i32_clear]
import "stdlib/map.ny"
fn main() -> void {
print(1)
}
// [/contrib-dev:map_i32_i32_clear]map_i32_i32_len
// [contrib-dev:map_i32_i32_len]
import "stdlib/map.ny"
fn main() {
print(1)
}
// [/contrib-dev:map_i32_i32_len]// [contrib-dev:map_i32_i32_len]
import "stdlib/map.ny"
fn main() -> void {
print(1)
}
// [/contrib-dev:map_i32_i32_len]map_i32_i32_remove
// [contrib-dev:map_i32_i32_remove]
import "stdlib/map.ny"
fn main() {
print(1)
}
// [/contrib-dev:map_i32_i32_remove]// [contrib-dev:map_i32_i32_remove]
import "stdlib/map.ny"
fn main() -> void {
print(1)
}
// [/contrib-dev:map_i32_i32_remove]HashMap_str_i32.clear()
import "stdlib/map.ny"
fn main() {
let m = HashMap_str_i32_new().insert("a", 1).clear()
print(m.len())
}import "stdlib/map.ny"
fn main() -> void {
let m = HashMap_str_i32_new().insert("a", 1).clear()
print(m.len())
}HashMap_str_i32.len()
import "stdlib/map.ny"
fn main() {
let m = HashMap_str_i32_new().insert("a", 1).insert("b", 2)
print(m.len())
}import "stdlib/map.ny"
fn main() -> void {
let m = HashMap_str_i32_new().insert("a", 1).insert("b", 2)
print(m.len())
}HashMap_str_i32.values()
import "stdlib/map.ny"
fn main() {
let m = HashMap_str_i32_new().insert("a", 1).insert("b", 2)
print(m.values().len())
}import "stdlib/map.ny"
fn main() -> void {
let m = HashMap_str_i32_new().insert("a", 1).insert("b", 2)
print(m.values().len())
}HashMap_str_str.clear()
import "stdlib/map.ny"
fn main() {
let m = HashMap_str_str_new().insert("a", "1").clear()
print(m.len())
}import "stdlib/map.ny"
fn main() -> void {
let m = HashMap_str_str_new().insert("a", "1").clear()
print(m.len())
}HashMap_str_str.len()
import "stdlib/map.ny"
fn main() {
let m = HashMap_str_str_new().insert("a", "1").insert("b", "2")
print(m.len())
}import "stdlib/map.ny"
fn main() -> void {
let m = HashMap_str_str_new().insert("a", "1").insert("b", "2")
print(m.len())
}HashMap_str_str.values()
import "stdlib/map.ny"
fn main() {
let m = HashMap_str_str_new().insert("a", "1").insert("b", "2")
print(m.values().len())
}import "stdlib/map.ny"
fn main() -> void {
let m = HashMap_str_str_new().insert("a", "1").insert("b", "2")
print(m.values().len())
}String split
for s in split_list
fn main() {
let parts = "a,b".split(",")
for s in parts {
print(s)
}
}fn main() -> void {
let parts: VecStr = "a,b".split(",")
for s in parts {
print(s)
}
}Output
a
b
.len() on split
fn main() {
let parts = "x,y".split(",")
print(parts.length())
}fn main() -> void {
let parts: VecStr = "x,y".split(",")
print(parts.length())
}Output
2
For-in iteration
for i in 0..n
fn main() {
for i in 0..4 {
print(i)
}
}fn main() -> void {
for i in 0..4 {
print(i)
}
}Output
0
1
2
3
for c in string
fn main() {
let word = "AB"
for c in word {
print(c)
}
}fn main() -> void {
let word: string = "AB"
for c in word {
print(c)
}
}Output
65
66
Stdlib functions
Array_filter
import "stdlib/builtins_array.ny"
import "stdlib/vec.ny"
fn is_even(x: i32) -> i32 {
if x % 2 == 0 {
return 1
}
return 0
}
fn main() {
let v = Vec_i32_new()
Array_push(v, 1)
Array_push(v, 2)
Array_push(v, 3)
let evens = Array_filter(v, is_even)
print(Vec_i32_len(evens))
print(Vec_i32_get(evens, 0))
}import "stdlib/builtins_array.ny"
import "stdlib/vec.ny"
fn is_even(x: i32) -> i32 {
if x % 2 == 0 {
return 1
}
return 0
}
fn main() -> void {
let v: ptr = Vec_i32_new()
Array_push(v, 1)
Array_push(v, 2)
Array_push(v, 3)
let evens: ptr = Array_filter(v, is_even)
print(Vec_i32_len(evens))
print(Vec_i32_get(evens, 0))
}Output
1
2
Array_find
import "stdlib/builtins_array.ny"
import "stdlib/vec.ny"
fn is_two(x: i32) -> i32 {
if x == 2 {
return 1
}
return 0
}
fn main() {
let v = Vec_i32_new()
Array_push(v, 1)
Array_push(v, 2)
print(Array_find(v, is_two, -1))
}import "stdlib/builtins_array.ny"
import "stdlib/vec.ny"
fn is_two(x: i32) -> i32 {
if x == 2 {
return 1
}
return 0
}
fn main() -> void {
let v: ptr = Vec_i32_new()
Array_push(v, 1)
Array_push(v, 2)
print(Array_find(v, is_two, -1))
}Output
2
Array_map
import "stdlib/builtins_array.ny"
import "stdlib/vec.ny"
fn double(x: i32) -> i32 {
return x * 2
}
fn main() {
let v = Vec_i32_new()
Array_push(v, 3)
Array_push(v, 4)
let out = Array_map(v, double)
print(Vec_i32_get(out, 0))
print(Vec_i32_get(out, 1))
}import "stdlib/builtins_array.ny"
import "stdlib/vec.ny"
fn double(x: i32) -> i32 {
return x * 2
}
fn main() -> void {
let v: ptr = Vec_i32_new()
Array_push(v, 3)
Array_push(v, 4)
let out: ptr = Array_map(v, double)
print(Vec_i32_get(out, 0))
print(Vec_i32_get(out, 1))
}Output
6
8
Array_pop
import "stdlib/builtins_array.ny"
import "stdlib/vec.ny"
fn main() {
let v = Vec_i32_new()
Array_push(v, 10)
Array_push(v, 20)
print(Array_pop(v))
print(Vec_i32_len(v))
}import "stdlib/builtins_array.ny"
import "stdlib/vec.ny"
fn main() -> void {
let v: ptr = Vec_i32_new()
Array_push(v, 10)
Array_push(v, 20)
print(Array_pop(v))
print(Vec_i32_len(v))
}Output
20
1
Array_push
import "stdlib/builtins_array.ny"
import "stdlib/vec.ny"
fn main() {
let v = Vec_i32_new()
Array_push(v, 1)
Array_push(v, 2)
print(Vec_i32_len(v))
}import "stdlib/builtins_array.ny"
import "stdlib/vec.ny"
fn main() -> void {
let v: ptr = Vec_i32_new()
Array_push(v, 1)
Array_push(v, 2)
print(Vec_i32_len(v))
}Output
2
Array_reduce
import "stdlib/builtins_array.ny"
import "stdlib/vec.ny"
fn add(acc: i32, x: i32) -> i32 {
return acc + x
}
fn main() {
let v = Vec_i32_new()
Array_push(v, 10)
Array_push(v, 20)
print(Array_reduce(v, 0, add))
}import "stdlib/builtins_array.ny"
import "stdlib/vec.ny"
fn add(acc: i32, x: i32) -> i32 {
return acc + x
}
fn main() -> void {
let v: ptr = Vec_i32_new()
Array_push(v, 10)
Array_push(v, 20)
print(Array_reduce(v, 0, add))
}Output
30
JSON_parse
import "stdlib/builtins_json.ny"
fn main() {
let raw = JSON_stringify("name", "hamdy")
print(JSON_parse(raw, "name"))
}import "stdlib/builtins_json.ny"
fn main() -> void {
let raw: string = JSON_stringify("name", "hamdy")
print(JSON_parse(raw, "name"))
}Output
hamdy
JSON_stringify
import "stdlib/builtins_json.ny"
fn main() {
print(JSON_stringify("name", "hamdy"))
}import "stdlib/builtins_json.ny"
fn main() -> void {
print(JSON_stringify("name", "hamdy"))
}Output
{"name":"hamdy"}
Math_ceil
import "stdlib/builtins_math.ny"
fn main() {
print(Math_ceil(7))
}import "stdlib/builtins_math.ny"
fn main() -> void {
print(Math_ceil(7))
}Output
7
Math_floor
import "stdlib/builtins_math.ny"
fn main() {
print(Math_floor(7))
}import "stdlib/builtins_math.ny"
fn main() -> void {
print(Math_floor(7))
}Output
7
Math_max
import "stdlib/builtins_math.ny"
fn main() {
print(Math_max(10, 3))
}import "stdlib/builtins_math.ny"
fn main() -> void {
print(Math_max(10, 3))
}Output
10
Math_min
import "stdlib/builtins_math.ny"
fn main() {
print(Math_min(10, 3))
}import "stdlib/builtins_math.ny"
fn main() -> void {
print(Math_min(10, 3))
}Output
3
Math_random
import "stdlib/builtins_math.ny"
fn main() {
print(Math_random())
}import "stdlib/builtins_math.ny"
fn main() -> void {
print(Math_random())
}Output
(varies each run — ChaCha20 stream)
0.415595
…
Math_round
import "stdlib/builtins_math.ny"
fn main() {
print(Math_round(7))
}import "stdlib/builtins_math.ny"
fn main() -> void {
print(Math_round(7))
}Output
7
random_builtin
// random() / random_f64() — compiler builtins (no import required).
fn main() {
print(random())
print(random(1, 6))
print(random_f64())
}// random() / random_f64() — compiler builtins (no import required).
fn main() -> void {
print(random())
print(random(1, 6))
print(random_f64())
}Output
-545542355
4
0.216195
random / random_f64
fn main() {
print(random())
print(random(1, 6))
print(random_f64())
}fn main() -> void {
print(random())
print(random(1, 6))
print(random_f64())
}Output
(varies each run — ChaCha20 stream)
-1707435656
5
0.571967
…
shuffle_pick
import "stdlib/random.ny"
import "stdlib/vec.ny"
fn main() {
let v = Vec_i32_new()
Vec_i32_push(v, 10)
Vec_i32_push(v, 20)
Vec_i32_push(v, 30)
print(shuffle_pick(v))
}import "stdlib/random.ny"
import "stdlib/vec.ny"
fn main() -> void {
let v: ptr = Vec_i32_new()
Vec_i32_push(v, 10)
Vec_i32_push(v, 20)
Vec_i32_push(v, 30)
print(shuffle_pick(v))
}Output
30
String_includes
import "stdlib/builtins_string.ny"
fn main() {
print(String_includes("hello", "ell"))
}import "stdlib/builtins_string.ny"
fn main() -> void {
print(String_includes("hello", "ell"))
}Output
1
String_replace
import "stdlib/builtins_string.ny"
fn main() {
print(String_replace("foo-bar", "bar", "baz"))
}import "stdlib/builtins_string.ny"
fn main() -> void {
print(String_replace("foo-bar", "bar", "baz"))
}Output
foo-baz
String_split
import "stdlib/builtins_string.ny"
import "stdlib/vec_str.ny"
fn main() {
let parts = String_split("a,b", ",")
print(Vec_str_len(parts))
}import "stdlib/builtins_string.ny"
import "stdlib/vec_str.ny"
fn main() -> void {
let parts = String_split("a,b", ",")
print(Vec_str_len(parts))
}Output
2
String_toLowerCase
import "stdlib/builtins_string.ny"
fn main() {
print(String_toLowerCase("NYRA"))
}import "stdlib/builtins_string.ny"
fn main() -> void {
print(String_toLowerCase("NYRA"))
}Output
nyra
String_toUpperCase
import "stdlib/builtins_string.ny"
fn main() {
print(String_toUpperCase("nyra"))
}import "stdlib/builtins_string.ny"
fn main() -> void {
print(String_toUpperCase("nyra"))
}Output
NYRA
trim
import "stdlib/builtins_string.ny"
fn main() {
print(trim(" hi "))
}import "stdlib/builtins_string.ny"
fn main() -> void {
print(trim(" hi "))
}Output
hi
Math
abs / min_i32 / max_i32 / clamp_i32
// Compiler math intrinsics: no stdlib prelude required (--no-prelude friendly).
// Build: nyra build examples/builtins/math_intrinsics.ny --release --no-prelude -o math_intrinsics
// Run: ./target/release/math_intrinsics
fn main() {
let a = abs_i32(-42)
let b = min_i32(3, 7)
let c = max_i32(3, 7)
let d = clamp_i32(15, 0, 10)
print(a)
print(b)
print(c)
print(d)
let x = abs(-5)
print(x)
}// Compiler math intrinsics: no stdlib prelude required (--no-prelude friendly).
// Build: nyra build examples/builtins/math_intrinsics.ny --release --no-prelude -o math_intrinsics
// Run: ./target/release/math_intrinsics
fn main() -> void {
let a = abs_i32(-42)
let b = min_i32(3, 7)
let c = max_i32(3, 7)
let d = clamp_i32(15, 0, 10)
print(a)
print(b)
print(c)
print(d)
let x = abs(-5)
print(x)
}Output
42
3
7
10
5
acos()
// [contrib-dev:acos_f64:math]
import "stdlib/math.ny"
fn main() {
print(acos_f64(3.0))
}
// [/contrib-dev:acos_f64:math]// [contrib-dev:acos_f64:math]
import "stdlib/math.ny"
fn main() -> void {
print(acos_f64(3.0))
}
// [/contrib-dev:acos_f64:math]asin()
// [contrib-dev:asin_f64:math]
import "stdlib/math.ny"
fn main() {
print(asin_f64(3.0))
}
// [/contrib-dev:asin_f64:math]// [contrib-dev:asin_f64:math]
import "stdlib/math.ny"
fn main() -> void {
print(asin_f64(3.0))
}
// [/contrib-dev:asin_f64:math]atan()
// [contrib-dev:atan_f64:math]
import "stdlib/math.ny"
fn main() {
print(atan_f64(3.0))
}
// [/contrib-dev:atan_f64:math]// [contrib-dev:atan_f64:math]
import "stdlib/math.ny"
fn main() -> void {
print(atan_f64(3.0))
}
// [/contrib-dev:atan_f64:math]ceil()
// [contrib-dev:ceil_f64:math]
import "stdlib/math.ny"
fn main() {
print(ceil_f64(3.0))
}
// [/contrib-dev:ceil_f64:math]// [contrib-dev:ceil_f64:math]
import "stdlib/math.ny"
fn main() -> void {
print(ceil_f64(3.0))
}
// [/contrib-dev:ceil_f64:math]ceil_i32
// [contrib-dev:ceil_i32:math]
import "stdlib/math.ny"
fn main() {
print(ceil_i32(3))
}
// [/contrib-dev:ceil_i32:math]// [contrib-dev:ceil_i32:math]
import "stdlib/math.ny"
fn main() -> void {
print(ceil_i32(3))
}
// [/contrib-dev:ceil_i32:math]clamp()
// [contrib-dev:clamp_f64:math]
import "stdlib/math.ny"
fn main() {
print(clamp_f64(3.0, 0.0, 1.0))
}
// [/contrib-dev:clamp_f64:math]// [contrib-dev:clamp_f64:math]
import "stdlib/math.ny"
fn main() -> void {
print(clamp_f64(3.0, 0.0, 1.0))
}
// [/contrib-dev:clamp_f64:math]copysign_f64
// [contrib-dev:copysign_f64:math]
import "stdlib/math.ny"
fn main() {
print(copysign_f64(1.0, 1.0))
}
// [/contrib-dev:copysign_f64:math]// [contrib-dev:copysign_f64:math]
import "stdlib/math.ny"
fn main() -> void {
print(copysign_f64(1.0, 1.0))
}
// [/contrib-dev:copysign_f64:math]count_ones_i32
// [contrib-dev:count_ones_i32:math]
import "stdlib/math.ny"
fn main() {
print(count_ones_i32(1))
}
// [/contrib-dev:count_ones_i32:math]// [contrib-dev:count_ones_i32:math]
import "stdlib/math.ny"
fn main() -> void {
print(count_ones_i32(1))
}
// [/contrib-dev:count_ones_i32:math]deg_to_rad_f64
// [contrib-dev:deg_to_rad_f64:math]
import "stdlib/math.ny"
fn main() {
print(deg_to_rad_f64(1.0))
}
// [/contrib-dev:deg_to_rad_f64:math]// [contrib-dev:deg_to_rad_f64:math]
import "stdlib/math.ny"
fn main() -> void {
print(deg_to_rad_f64(1.0))
}
// [/contrib-dev:deg_to_rad_f64:math]exp()
// [contrib-dev:exp_f64:math]
import "stdlib/math.ny"
fn main() {
print(exp_f64(3.0))
}
// [/contrib-dev:exp_f64:math]// [contrib-dev:exp_f64:math]
import "stdlib/math.ny"
fn main() -> void {
print(exp_f64(3.0))
}
// [/contrib-dev:exp_f64:math]floor()
// [contrib-dev:floor_f64:math]
import "stdlib/math.ny"
fn main() {
print(floor_f64(3.0))
}
// [/contrib-dev:floor_f64:math]// [contrib-dev:floor_f64:math]
import "stdlib/math.ny"
fn main() -> void {
print(floor_f64(3.0))
}
// [/contrib-dev:floor_f64:math]floor_i32
// [contrib-dev:floor_i32:math]
import "stdlib/math.ny"
fn main() {
print(floor_i32(3))
}
// [/contrib-dev:floor_i32:math]// [contrib-dev:floor_i32:math]
import "stdlib/math.ny"
fn main() -> void {
print(floor_i32(3))
}
// [/contrib-dev:floor_i32:math]fmod_f64
// [contrib-dev:fmod_f64:math]
import "stdlib/math.ny"
fn main() {
print(fmod_f64(5.0, 2.0))
}
// [/contrib-dev:fmod_f64:math]// [contrib-dev:fmod_f64:math]
import "stdlib/math.ny"
fn main() -> void {
print(fmod_f64(5.0, 2.0))
}
// [/contrib-dev:fmod_f64:math]fract_f64
// [contrib-dev:fract_f64:math]
import "stdlib/math.ny"
fn main() {
print(fract_f64(3.0))
}
// [/contrib-dev:fract_f64:math]// [contrib-dev:fract_f64:math]
import "stdlib/math.ny"
fn main() -> void {
print(fract_f64(3.0))
}
// [/contrib-dev:fract_f64:math]gcd_i32
// [contrib-dev:gcd_i32:math]
import "stdlib/math.ny"
fn main() {
print(gcd_i32(1, 1))
}
// [/contrib-dev:gcd_i32:math]// [contrib-dev:gcd_i32:math]
import "stdlib/math.ny"
fn main() -> void {
print(gcd_i32(1, 1))
}
// [/contrib-dev:gcd_i32:math]hypot()
// [contrib-dev:hypot_f64:math]
import "stdlib/math.ny"
fn main() {
print(hypot_f64(3.0, 4.0))
print(1)
}
}
// [/contrib-dev:hypot_f64:math]// [contrib-dev:hypot_f64:math]
import "stdlib/math.ny"
fn main() -> void {
print(hypot_f64(3.0, 4.0))
print(1)
}
}
// [/contrib-dev:hypot_f64:math]is_finite_f64
// [contrib-dev:is_finite_f64:math]
import "stdlib/math.ny"
fn main() {
print(is_finite_f64(3.0))
}
// [/contrib-dev:is_finite_f64:math]// [contrib-dev:is_finite_f64:math]
import "stdlib/math.ny"
fn main() -> void {
print(is_finite_f64(3.0))
}
// [/contrib-dev:is_finite_f64:math]is_infinite_f64
// [contrib-dev:is_infinite_f64:math]
import "stdlib/math.ny"
fn main() {
print(is_infinite_f64(3.0))
}
// [/contrib-dev:is_infinite_f64:math]// [contrib-dev:is_infinite_f64:math]
import "stdlib/math.ny"
fn main() -> void {
print(is_infinite_f64(3.0))
}
// [/contrib-dev:is_infinite_f64:math]is_nan_f64
// [contrib-dev:is_nan_f64:math]
import "stdlib/math.ny"
fn main() {
print(is_nan_f64(3.0))
}
// [/contrib-dev:is_nan_f64:math]// [contrib-dev:is_nan_f64:math]
import "stdlib/math.ny"
fn main() -> void {
print(is_nan_f64(3.0))
}
// [/contrib-dev:is_nan_f64:math]lcm_i32
// [contrib-dev:lcm_i32:math]
import "stdlib/math.ny"
fn main() {
print(lcm_i32(1, 1))
}
// [/contrib-dev:lcm_i32:math]// [contrib-dev:lcm_i32:math]
import "stdlib/math.ny"
fn main() -> void {
print(lcm_i32(1, 1))
}
// [/contrib-dev:lcm_i32:math]leading_zeros_i32
// [contrib-dev:leading_zeros_i32:math]
import "stdlib/math.ny"
fn main() {
print(leading_zeros_i32(1))
}
// [/contrib-dev:leading_zeros_i32:math]// [contrib-dev:leading_zeros_i32:math]
import "stdlib/math.ny"
fn main() -> void {
print(leading_zeros_i32(1))
}
// [/contrib-dev:leading_zeros_i32:math]lerp_f64
// [contrib-dev:lerp_f64:math]
import "stdlib/math.ny"
fn main() {
print(lerp_f64(0.0, 10.0, 0.5))
}
// [/contrib-dev:lerp_f64:math]// [contrib-dev:lerp_f64:math]
import "stdlib/math.ny"
fn main() -> void {
print(lerp_f64(0.0, 10.0, 0.5))
}
// [/contrib-dev:lerp_f64:math]log()
// [contrib-dev:log_f64:math]
import "stdlib/math.ny"
fn main() {
print(log_f64(3.0))
}
// [/contrib-dev:log_f64:math]// [contrib-dev:log_f64:math]
import "stdlib/math.ny"
fn main() -> void {
print(log_f64(3.0))
}
// [/contrib-dev:log_f64:math]log10()
// [contrib-dev:log10_f64:math]
import "stdlib/math.ny"
fn main() {
print(log10_f64(3.0))
}
// [/contrib-dev:log10_f64:math]// [contrib-dev:log10_f64:math]
import "stdlib/math.ny"
fn main() -> void {
print(log10_f64(3.0))
}
// [/contrib-dev:log10_f64:math]log2()
// [contrib-dev:log2_f64:math]
import "stdlib/math.ny"
fn main() {
print(log2_f64(3.0))
}
// [/contrib-dev:log2_f64:math]// [contrib-dev:log2_f64:math]
import "stdlib/math.ny"
fn main() -> void {
print(log2_f64(3.0))
}
// [/contrib-dev:log2_f64:math]Math_max / min / round / random
import "stdlib/builtins_math.ny"
fn main() {
print(Math_round(7))
print(Math_floor(7))
print(Math_ceil(7))
print(Math_max(10, 3))
print(Math_min(10, 3))
print(Math_random())
}import "stdlib/builtins_math.ny"
fn main() -> void {
print(Math_round(7))
print(Math_floor(7))
print(Math_ceil(7))
print(Math_max(10, 3))
print(Math_min(10, 3))
print(Math_random())
}Output
7
7
7
10
3
0.169792
mod_i32
// [contrib-dev:mod_i32:math]
import "stdlib/math.ny"
fn main() {
print(mod_i32(1, 1))
}
// [/contrib-dev:mod_i32:math]// [contrib-dev:mod_i32:math]
import "stdlib/math.ny"
fn main() -> void {
print(mod_i32(1, 1))
}
// [/contrib-dev:mod_i32:math]pow()
// [contrib-dev:pow_f64:math]
import "stdlib/math.ny"
fn main() {
print(pow_f64(2.0, 3.0))
}
// [/contrib-dev:pow_f64:math]// [contrib-dev:pow_f64:math]
import "stdlib/math.ny"
fn main() -> void {
print(pow_f64(2.0, 3.0))
}
// [/contrib-dev:pow_f64:math]pow_i32
// [contrib-dev:pow_i32:math]
import "stdlib/math.ny"
fn main() {
print(pow_i32(2, 3))
}
// [/contrib-dev:pow_i32:math]// [contrib-dev:pow_i32:math]
import "stdlib/math.ny"
fn main() -> void {
print(pow_i32(2, 3))
}
// [/contrib-dev:pow_i32:math]rad_to_deg_f64
// [contrib-dev:rad_to_deg_f64:math]
import "stdlib/math.ny"
fn main() {
print(rad_to_deg_f64(1.0))
}
// [/contrib-dev:rad_to_deg_f64:math]// [contrib-dev:rad_to_deg_f64:math]
import "stdlib/math.ny"
fn main() -> void {
print(rad_to_deg_f64(1.0))
}
// [/contrib-dev:rad_to_deg_f64:math]rem_euclid_i32
// [contrib-dev:rem_euclid_i32:math]
import "stdlib/math.ny"
fn main() {
print(rem_euclid_i32(1, 1))
}
// [/contrib-dev:rem_euclid_i32:math]// [contrib-dev:rem_euclid_i32:math]
import "stdlib/math.ny"
fn main() -> void {
print(rem_euclid_i32(1, 1))
}
// [/contrib-dev:rem_euclid_i32:math]rotate_left_i32
// [contrib-dev:rotate_left_i32:math]
import "stdlib/math.ny"
fn main() {
print(rotate_left_i32(1, 1))
}
// [/contrib-dev:rotate_left_i32:math]// [contrib-dev:rotate_left_i32:math]
import "stdlib/math.ny"
fn main() -> void {
print(rotate_left_i32(1, 1))
}
// [/contrib-dev:rotate_left_i32:math]rotate_right_i32
// [contrib-dev:rotate_right_i32:math]
import "stdlib/math.ny"
fn main() {
print(rotate_right_i32(1, 1))
}
// [/contrib-dev:rotate_right_i32:math]// [contrib-dev:rotate_right_i32:math]
import "stdlib/math.ny"
fn main() -> void {
print(rotate_right_i32(1, 1))
}
// [/contrib-dev:rotate_right_i32:math]round()
// [contrib-dev:round_f64:math]
import "stdlib/math.ny"
fn main() {
print(round_f64(3.0))
}
// [/contrib-dev:round_f64:math]// [contrib-dev:round_f64:math]
import "stdlib/math.ny"
fn main() -> void {
print(round_f64(3.0))
}
// [/contrib-dev:round_f64:math]round_i32
// [contrib-dev:round_i32:math]
import "stdlib/math.ny"
fn main() {
print(round_i32(4))
}
// [/contrib-dev:round_i32:math]// [contrib-dev:round_i32:math]
import "stdlib/math.ny"
fn main() -> void {
print(round_i32(4))
}
// [/contrib-dev:round_i32:math]saturating_add_i32
// [contrib-dev:saturating_add_i32:math]
import "stdlib/math.ny"
fn main() {
print(saturating_add_i32(1, 1))
}
// [/contrib-dev:saturating_add_i32:math]// [contrib-dev:saturating_add_i32:math]
import "stdlib/math.ny"
fn main() -> void {
print(saturating_add_i32(1, 1))
}
// [/contrib-dev:saturating_add_i32:math]saturating_sub_i32
// [contrib-dev:saturating_sub_i32:math]
import "stdlib/math.ny"
fn main() {
print(saturating_sub_i32(1, 1))
}
// [/contrib-dev:saturating_sub_i32:math]// [contrib-dev:saturating_sub_i32:math]
import "stdlib/math.ny"
fn main() -> void {
print(saturating_sub_i32(1, 1))
}
// [/contrib-dev:saturating_sub_i32:math]signum_f64
// [contrib-dev:signum_f64:math]
import "stdlib/math.ny"
fn main() {
print(is_nan(signum_f64(0.0 / 0.0)))
}
// [/contrib-dev:signum_f64:math]// [contrib-dev:signum_f64:math]
import "stdlib/math.ny"
fn main() -> void {
print(is_nan(signum_f64(0.0 / 0.0)))
}
// [/contrib-dev:signum_f64:math]signum_i32
// [contrib-dev:signum_i32:math]
import "stdlib/math.ny"
fn main() {
print(signum_i32(5))
print(signum_i32(-3))
print(signum_i32(0))
}
// [/contrib-dev:signum_i32:math]// [contrib-dev:signum_i32:math]
import "stdlib/math.ny"
fn main() -> void {
print(signum_i32(5))
print(signum_i32(-3))
print(signum_i32(0))
}
// [/contrib-dev:signum_i32:math]sin_cos
fn main() {
print(sin(0.0))
print(cos(0.0))
print(max_f64(1.0, 2.0))
}fn main() -> void {
print(sin(0.0))
print(cos(0.0))
print(max_f64(1.0, 2.0))
}Output
0
1
2
sqrt()
// [contrib-dev:sqrt_f64:math]
import "stdlib/math.ny"
fn main() {
print(sqrt_f64(3.0))
}
// [/contrib-dev:sqrt_f64:math]// [contrib-dev:sqrt_f64:math]
import "stdlib/math.ny"
fn main() -> void {
print(sqrt_f64(3.0))
}
// [/contrib-dev:sqrt_f64:math]trailing_zeros_i32
// [contrib-dev:trailing_zeros_i32:math]
import "stdlib/math.ny"
fn main() {
print(trailing_zeros_i32(1))
}
// [/contrib-dev:trailing_zeros_i32:math]// [contrib-dev:trailing_zeros_i32:math]
import "stdlib/math.ny"
fn main() -> void {
print(trailing_zeros_i32(1))
}
// [/contrib-dev:trailing_zeros_i32:math]trunc()
// [contrib-dev:trunc_f64:math]
import "stdlib/math.ny"
fn main() {
print(trunc_f64(1.9))
}
// [/contrib-dev:trunc_f64:math]// [contrib-dev:trunc_f64:math]
import "stdlib/math.ny"
fn main() -> void {
print(trunc_f64(1.9))
}
// [/contrib-dev:trunc_f64:math]trunc_i32
// [contrib-dev:trunc_i32:math]
import "stdlib/math.ny"
fn main() {
print(trunc_i32(7))
}
// [/contrib-dev:trunc_i32:math]// [contrib-dev:trunc_i32:math]
import "stdlib/math.ny"
fn main() -> void {
print(trunc_i32(7))
}
// [/contrib-dev:trunc_i32:math]wrapping_add_i32
// [contrib-dev:wrapping_add_i32:math]
import "stdlib/math.ny"
fn main() {
print(wrapping_add_i32(1, 1))
}
// [/contrib-dev:wrapping_add_i32:math]// [contrib-dev:wrapping_add_i32:math]
import "stdlib/math.ny"
fn main() -> void {
print(wrapping_add_i32(1, 1))
}
// [/contrib-dev:wrapping_add_i32:math]JSON
JSON_stringify / JSON_parse
import "stdlib/builtins_json.ny"
fn main() {
let raw = JSON_stringify("name", "hamdy")
print(raw)
print(JSON_parse(raw, "name"))
}import "stdlib/builtins_json.ny"
fn main() -> void {
let raw: string = JSON_stringify("name", "hamdy")
print(raw)
print(JSON_parse(raw, "name"))
}Output
{"name":"hamdy"}
hamdy
JSON sugar
dict_i32()
fn main() {
let m = dict_i32().insert("score", 100)
print(m.get("score"))
}fn main() -> void {
let m = dict_i32().insert("score", 100)
print(m.get("score"))
}Output
100
jfield
fn main() {
print(jfield("name", "Nyra"))
}fn main() -> void {
print(jfield("name", "Nyra"))
}Output
{"name":"Nyra"}
jobj
fn main() {
let o = jparse("{\"user\":{\"id\":1}}")
let u = jobj(o, "user")
print(jnum(u, "id"))
}fn main() -> void {
let o = jparse("{\"user\":{\"id\":1}}")
let u = jobj(o, "user")
print(jnum(u, "id"))
}Output
1
jparse / jstr / jnum / jbool
fn main() {
let o = jparse("{\"name\":\"Nyra\",\"n\":7,\"ok\":true}")
print(jstr(o, "name"))
print(jnum(o, "n"))
print(jbool(o, "ok"))
}fn main() -> void {
let o = jparse("{\"name\":\"Nyra\",\"n\":7,\"ok\":true}")
print(jstr(o, "name"))
print(jnum(o, "n"))
print(jbool(o, "ok"))
}Output
Nyra
7
1
obj / dict / jstringify / jraw
fn main() {
let m = obj().insert("a", "1").insert("b", "two")
print(jstr(m, "a"))
print(jraw(m, "b"))
print(jstringify(m))
}fn main() -> void {
let m = obj().insert("a", "1").insert("b", "two")
print(jstr(m, "a"))
print(jraw(m, "b"))
print(jstringify(m))
}Output
1
two
{"a":1,"b":"two"}
Files (slurp/spit)
create_dir / remove_dir
fn main() {
print(create_dir("/tmp/nyra_docs_cd"))
print(remove_dir("/tmp/nyra_docs_cd"))
}fn main() -> void {
print(create_dir("/tmp/nyra_docs_cd"))
print(remove_dir("/tmp/nyra_docs_cd"))
}Output
0
0
ls / rm
fn main() {
spit("/tmp/nyra_docs_marker.txt", "x")
print(ls("/tmp").len() > 0)
print(rm("/tmp/nyra_docs_marker.txt"))
}fn main() -> void {
spit("/tmp/nyra_docs_marker.txt", "x")
print(ls("/tmp").len() > 0)
print(rm("/tmp/nyra_docs_marker.txt"))
}Output
(directory entry count / rm status)
1
0
slurp / spit / spit_append / rm
fn main() {
spit("/tmp/nyra_docs_slurp.txt", "hello")
print(slurp("/tmp/nyra_docs_slurp.txt"))
spit_append("/tmp/nyra_docs_slurp.txt", "!")
print(slurp("/tmp/nyra_docs_slurp.txt"))
rm("/tmp/nyra_docs_slurp.txt")
}fn main() -> void {
spit("/tmp/nyra_docs_slurp.txt", "hello")
print(slurp("/tmp/nyra_docs_slurp.txt"))
spit_append("/tmp/nyra_docs_slurp.txt", "!")
print(slurp("/tmp/nyra_docs_slurp.txt"))
rm("/tmp/nyra_docs_slurp.txt")
}Output
hello
hello!
Time sugar
now() / ms().sleep()
fn main() {
let t0 = now()
ms(1).sleep()
print(if t0.elapsed_ms() >= 0 { 1 } else { 0 })
}fn main() -> void {
let t0 = now()
ms(1).sleep()
print(if t0.elapsed_ms() >= 0 { 1 } else { 0 })
}Output
(elapsed ≥ 0 after ms(1).sleep())
1
Env
env / env_or / env_set / env_has
fn main() {
print(env_or("__NYRA_DOCS_MISSING__", "fallback"))
env_set("__NYRA_DOCS_TMP__", "ok")
print(env("__NYRA_DOCS_TMP__"))
print(env_has("__NYRA_DOCS_TMP__"))
}fn main() -> void {
print(env_or("__NYRA_DOCS_MISSING__", "fallback"))
env_set("__NYRA_DOCS_TMP__", "ok")
print(env("__NYRA_DOCS_TMP__"))
print(env_has("__NYRA_DOCS_TMP__"))
}Output
fallback
ok
1
Process
cmd().arg().run() / .output()
fn main() {
print(cmd("true").run())
let out = cmd("echo").arg("hi").output()
print(out.code)
print(out.stdout.len())
}fn main() -> void {
print(cmd("true").run())
let out = cmd("echo").arg("hi").output()
print(out.code)
print(out.stdout.len())
}Output
0
0
4
UUID
uuid()
fn main() {
print(uuid().len())
}fn main() -> void {
print(uuid().len())
}Output
(UUID string — length is always 36)
36
Encoding
b64 / b64d / url_encode
fn main() {
print(b64("hi"))
print(b64d("aGk="))
print(url_encode("a b"))
}fn main() -> void {
print(b64("hi"))
print(b64d("aGk="))
print(url_encode("a b"))
}Output
aGk=
hi
a%20b
hex_decode()
import "stdlib/encoding/mod.ny"
fn main() {
print(hex_decode("4869"))
}import "stdlib/encoding/mod.ny"
fn main() -> void {
print(hex_decode("4869"))
}Output
Hi
hex_encode_upper
// [contrib-dev:hex_encode_upper:encoding_mod]
import "stdlib/encoding/mod.ny"
fn main() {
print("x")
}
// [/contrib-dev:hex_encode_upper:encoding_mod]// [contrib-dev:hex_encode_upper:encoding_mod]
import "stdlib/encoding/mod.ny"
fn main() -> void {
print("x")
}
// [/contrib-dev:hex_encode_upper:encoding_mod]hex_encode
// [contrib-dev:hex_encode:encoding_mod]
import "stdlib/encoding/mod.ny"
fn main() {
print("x")
}
// [/contrib-dev:hex_encode:encoding_mod]// [contrib-dev:hex_encode:encoding_mod]
import "stdlib/encoding/mod.ny"
fn main() -> void {
print("x")
}
// [/contrib-dev:hex_encode:encoding_mod]Strconv
f64_to_string_prec
// [contrib-dev:f64_to_string_prec:strconv_mod]
import "stdlib/strconv/mod.ny"
fn main() {
print(1.0, 1)
}
// [/contrib-dev:f64_to_string_prec:strconv_mod]// [contrib-dev:f64_to_string_prec:strconv_mod]
import "stdlib/strconv/mod.ny"
fn main() -> void {
print(1.0, 1)
}
// [/contrib-dev:f64_to_string_prec:strconv_mod]format_bool
// [contrib-dev:format_bool:strconv_mod]
import "stdlib/strconv/mod.ny"
fn main() {
print(1)
}
// [/contrib-dev:format_bool:strconv_mod]// [contrib-dev:format_bool:strconv_mod]
import "stdlib/strconv/mod.ny"
fn main() -> void {
print(1)
}
// [/contrib-dev:format_bool:strconv_mod]format_f64_pad
// [contrib-dev:format_f64_pad:strconv_mod]
import "stdlib/strconv/mod.ny"
fn main() {
print(1.0, 1, 1)
}
// [/contrib-dev:format_f64_pad:strconv_mod]// [contrib-dev:format_f64_pad:strconv_mod]
import "stdlib/strconv/mod.ny"
fn main() -> void {
print(1.0, 1, 1)
}
// [/contrib-dev:format_f64_pad:strconv_mod]format_i32_bin
// [contrib-dev:format_i32_bin:strconv_mod]
import "stdlib/strconv/mod.ny"
fn main() {
print(1)
}
// [/contrib-dev:format_i32_bin:strconv_mod]// [contrib-dev:format_i32_bin:strconv_mod]
import "stdlib/strconv/mod.ny"
fn main() -> void {
print(1)
}
// [/contrib-dev:format_i32_bin:strconv_mod]format_i32_hex_pad
// [contrib-dev:format_i32_hex_pad:strconv_mod]
import "stdlib/strconv/mod.ny"
fn main() {
print(1, 1)
}
// [/contrib-dev:format_i32_hex_pad:strconv_mod]// [contrib-dev:format_i32_hex_pad:strconv_mod]
import "stdlib/strconv/mod.ny"
fn main() -> void {
print(1, 1)
}
// [/contrib-dev:format_i32_hex_pad:strconv_mod]format_i32_hex
// [contrib-dev:format_i32_hex:strconv_mod]
import "stdlib/strconv/mod.ny"
fn main() {
print(1)
}
// [/contrib-dev:format_i32_hex:strconv_mod]// [contrib-dev:format_i32_hex:strconv_mod]
import "stdlib/strconv/mod.ny"
fn main() -> void {
print(1)
}
// [/contrib-dev:format_i32_hex:strconv_mod]format_i32_oct
// [contrib-dev:format_i32_oct:strconv_mod]
import "stdlib/strconv/mod.ny"
fn main() {
print(1)
}
// [/contrib-dev:format_i32_oct:strconv_mod]// [contrib-dev:format_i32_oct:strconv_mod]
import "stdlib/strconv/mod.ny"
fn main() -> void {
print(1)
}
// [/contrib-dev:format_i32_oct:strconv_mod]format_i32_pad
// [contrib-dev:format_i32_pad:strconv_mod]
import "stdlib/strconv/mod.ny"
fn main() {
print(1, 1)
}
// [/contrib-dev:format_i32_pad:strconv_mod]// [contrib-dev:format_i32_pad:strconv_mod]
import "stdlib/strconv/mod.ny"
fn main() -> void {
print(1, 1)
}
// [/contrib-dev:format_i32_pad:strconv_mod]format_i64_bin
// [contrib-dev:format_i64_bin:strconv_mod]
import "stdlib/strconv/mod.ny"
fn main() {
print(0)
}
// [/contrib-dev:format_i64_bin:strconv_mod]// [contrib-dev:format_i64_bin:strconv_mod]
import "stdlib/strconv/mod.ny"
fn main() -> void {
print(0)
}
// [/contrib-dev:format_i64_bin:strconv_mod]format_i64_hex
// [contrib-dev:format_i64_hex:strconv_mod]
import "stdlib/strconv/mod.ny"
fn main() {
print(0)
}
// [/contrib-dev:format_i64_hex:strconv_mod]// [contrib-dev:format_i64_hex:strconv_mod]
import "stdlib/strconv/mod.ny"
fn main() -> void {
print(0)
}
// [/contrib-dev:format_i64_hex:strconv_mod]format_i64_pad
// [contrib-dev:format_i64_pad:strconv_mod]
import "stdlib/strconv/mod.ny"
fn main() {
print(0, 1)
}
// [/contrib-dev:format_i64_pad:strconv_mod]// [contrib-dev:format_i64_pad:strconv_mod]
import "stdlib/strconv/mod.ny"
fn main() -> void {
print(0, 1)
}
// [/contrib-dev:format_i64_pad:strconv_mod]format_quote
// [contrib-dev:format_quote:strconv_mod]
import "stdlib/strconv/mod.ny"
fn main() {
print("x")
}
// [/contrib-dev:format_quote:strconv_mod]// [contrib-dev:format_quote:strconv_mod]
import "stdlib/strconv/mod.ny"
fn main() -> void {
print("x")
}
// [/contrib-dev:format_quote:strconv_mod]format_u64_pad
// [contrib-dev:format_u64_pad:strconv_mod]
import "stdlib/strconv/mod.ny"
fn main() {
print(0, 1)
}
// [/contrib-dev:format_u64_pad:strconv_mod]// [contrib-dev:format_u64_pad:strconv_mod]
import "stdlib/strconv/mod.ny"
fn main() -> void {
print(0, 1)
}
// [/contrib-dev:format_u64_pad:strconv_mod]i32_to_string_radix
// [contrib-dev:i32_to_string_radix:strconv_mod]
import "stdlib/strconv/mod.ny"
fn main() {
print(1, 1)
}
// [/contrib-dev:i32_to_string_radix:strconv_mod]// [contrib-dev:i32_to_string_radix:strconv_mod]
import "stdlib/strconv/mod.ny"
fn main() -> void {
print(1, 1)
}
// [/contrib-dev:i32_to_string_radix:strconv_mod]i64_to_string
// [contrib-dev:i64_to_string:strconv_mod]
import "stdlib/strconv/mod.ny"
fn main() {
print(0)
}
// [/contrib-dev:i64_to_string:strconv_mod]// [contrib-dev:i64_to_string:strconv_mod]
import "stdlib/strconv/mod.ny"
fn main() -> void {
print(0)
}
// [/contrib-dev:i64_to_string:strconv_mod]parse_i64_base
// [contrib-dev:parse_i64_base:strconv_mod]
import "stdlib/strconv/mod.ny"
fn main() {
print("x", 1)
}
// [/contrib-dev:parse_i64_base:strconv_mod]// [contrib-dev:parse_i64_base:strconv_mod]
import "stdlib/strconv/mod.ny"
fn main() -> void {
print("x", 1)
}
// [/contrib-dev:parse_i64_base:strconv_mod]parse_int_base
// [contrib-dev:parse_int_base:strconv_mod]
import "stdlib/strconv/mod.ny"
fn main() {
print("x", 1)
}
// [/contrib-dev:parse_int_base:strconv_mod]// [contrib-dev:parse_int_base:strconv_mod]
import "stdlib/strconv/mod.ny"
fn main() -> void {
print("x", 1)
}
// [/contrib-dev:parse_int_base:strconv_mod]parse_uint_base
// [contrib-dev:parse_uint_base:strconv_mod]
import "stdlib/strconv/mod.ny"
fn main() {
print("x", 1)
}
// [/contrib-dev:parse_uint_base:strconv_mod]// [contrib-dev:parse_uint_base:strconv_mod]
import "stdlib/strconv/mod.ny"
fn main() -> void {
print("x", 1)
}
// [/contrib-dev:parse_uint_base:strconv_mod]parse_bool()
import "stdlib/strconv/mod.ny"
fn main() {
print(parse_bool("true"))
print(parse_bool("false"))
}import "stdlib/strconv/mod.ny"
fn main() -> void {
print(parse_bool("true"))
print(parse_bool("false"))
}Output
1
0
str_to_f32
// [contrib-dev:str_to_f32:strconv_mod]
import "stdlib/strconv/mod.ny"
fn main() {
print("x")
}
// [/contrib-dev:str_to_f32:strconv_mod]// [contrib-dev:str_to_f32:strconv_mod]
import "stdlib/strconv/mod.ny"
fn main() -> void {
print("x")
}
// [/contrib-dev:str_to_f32:strconv_mod]str_to_f64
// [contrib-dev:str_to_f64:strconv_mod]
import "stdlib/strconv/mod.ny"
fn main() {
print("x")
}
// [/contrib-dev:str_to_f64:strconv_mod]// [contrib-dev:str_to_f64:strconv_mod]
import "stdlib/strconv/mod.ny"
fn main() -> void {
print("x")
}
// [/contrib-dev:str_to_f64:strconv_mod]str_to_i64
// [contrib-dev:str_to_i64:strconv_mod]
import "stdlib/strconv/mod.ny"
fn main() {
print("x")
}
// [/contrib-dev:str_to_i64:strconv_mod]// [contrib-dev:str_to_i64:strconv_mod]
import "stdlib/strconv/mod.ny"
fn main() -> void {
print("x")
}
// [/contrib-dev:str_to_i64:strconv_mod]str_to_u64
// [contrib-dev:str_to_u64:strconv_mod]
import "stdlib/strconv/mod.ny"
fn main() {
print("x")
}
// [/contrib-dev:str_to_u64:strconv_mod]// [contrib-dev:str_to_u64:strconv_mod]
import "stdlib/strconv/mod.ny"
fn main() -> void {
print("x")
}
// [/contrib-dev:str_to_u64:strconv_mod]u64_to_string
// [contrib-dev:u64_to_string:strconv_mod]
import "stdlib/strconv/mod.ny"
fn main() {
print(0)
}
// [/contrib-dev:u64_to_string:strconv_mod]// [contrib-dev:u64_to_string:strconv_mod]
import "stdlib/strconv/mod.ny"
fn main() -> void {
print(0)
}
// [/contrib-dev:u64_to_string:strconv_mod]Errors
err_json / err_invalid
fn main() {
print(err_json("bad").kind)
print(err_invalid("x").kind)
}fn main() -> void {
print(err_json("bad").kind)
print(err_invalid("x").kind)
}Output
json
invalid
err_io().context()
fn main() {
let e = err_io("boom").context("open")
print(e.kind)
print(e.message)
}fn main() -> void {
let e = err_io("boom").context("open")
print(e.kind)
print(e.message)
}Output
io
open: boom
HTTP sugar
cookies() / headers()
fn main() {
let jar = cookies()
let j2 = CookieJar_set(jar, "sid", "abc")
print(CookieJar_get(j2, "sid"))
print(CookieJar_header(j2))
let h = headers().insert("X-Test", "1")
print(h.get("X-Test"))
}fn main() -> void {
let jar = cookies()
let j2 = CookieJar_set(jar, "sid", "abc")
print(CookieJar_get(j2, "sid"))
print(CookieJar_header(j2))
let h = headers().insert("X-Test", "1")
print(h.get("X-Test"))
}Output
abc
sid=abc
1
form() / params()
fn main() {
print(form().append("a", "1").append("b", "2").urlencoded())
print(params().append("q", "nyra").to_string())
}fn main() -> void {
print(form().append("a", "1").append("b", "2").urlencoded())
print(params().append("q", "nyra").to_string())
}Output
a=1&b=2
q=nyra
req().timeout().header()
fn main() {
let init = req().timeout(1000).header("X-Test", "1")
print(init.timeout_ms)
}fn main() -> void {
let init = req().timeout(1000).header("X-Test", "1")
print(init.timeout_ms)
}Output
1000
SQL qb()
qb().select().from().where().to_sql()
fn main() {
let sql = qb()
.select("id, name")
.from("users")
.where("active", "=", "1")
.order("name")
.limit(10)
.to_sql()
print(sql)
}fn main() -> void {
let sql = qb()
.select("id, name")
.from("users")
.where("active", "=", "1")
.order("name")
.limit(10)
.to_sql()
print(sql)
}Output
SELECT id, name FROM users WHERE active = '1' ORDER BY name LIMIT 10
Input / Output
flush
fn main() {
write("ok")
flush()
print("done")
}fn main() -> void {
write("ok")
flush()
print("done")
}Output
okdone
input
// Interactive — run: nyra run examples/builtins/io/input.ny
fn main() {
let name = input("Name: ")
print(name.length())
print(name)
}// Interactive — run: nyra run examples/builtins/io/input.ny
fn main() -> void {
let name: string = input("Name: ")
print(name.length())
print(name)
}Output
Name: 3
Ada
print_array
fn main() {
let nums = [20, 1, 4, 3, 5, 2]
print(nums)
print([1.5, 2.5])
print(["hello", "Nyra"])
}fn main() -> void {
let nums: [i32; 6] = [20, 1, 4, 3, 5, 2]
print(nums)
print([1.5, 2.5])
print(["hello", "Nyra"])
}Output
[20, 1, 4, 3, 5, 2]
[1.5, 2.5]
["hello", "Nyra"]
print(..., color:)
fn main() {
print("ok", color: green)
}fn main() -> void {
print("ok", color: green)
}Output
(ANSI green on supporting terminals)
ok
print
fn main() {
print(42)
print("Nyra")
}fn main() -> void {
print(42)
print("Nyra")
}Output
42
Nyra
println
fn main() {
println("line")
flush()
}fn main() -> void {
println("line")
flush()
}Output
line
write
fn main() {
write("ok")
flush()
}fn main() -> void {
write("ok")
flush()
}Output
ok
Timing & memory
mem_start / mem_end
fn main() {
mem_start("work")
let mut sum = 0
for i in 0..1000 {
sum = sum + i
}
mem_end("work")
print(sum)
}fn main() -> void {
mem_start("work")
let mut sum: i32 = 0
for i in 0..1000 {
sum = sum + i
}
mem_end("work")
print(sum)
}Output
(timing / RSS vary by machine)
work: RSS +0.000 B
499500
time_start / time_end
fn main() {
time_start("work")
let mut sum = 0
for i in 0..1000 {
sum = sum + i
}
time_end("work")
print(sum)
}fn main() -> void {
time_start("work")
let mut sum: i32 = 0
for i in 0..1000 {
sum = sum + i
}
time_end("work")
print(sum)
}Output
(timing / RSS vary by machine)
work: 875.000000 ns
499500
Date & time
date()
fn main() {
let d = date()
print(d.year)
print(d.month)
print(d.day)
print(d.hour)
print(d.minute)
print(d.second)
print(d.week)
print(d.millisecond)
print(d.minutes)
print(d.seconds)
print(d.weekday)
}fn main() -> void {
let d: Date = date()
print(d.year)
print(d.month)
print(d.day)
print(d.hour)
print(d.minute)
print(d.second)
print(d.week)
print(d.millisecond)
print(d.minutes)
print(d.seconds)
print(d.weekday)
}Output
(local clock — values change)
2026
7
8
22
11
34
…
Async
async_future_string
// Future<string> — typed async with Executor_sleep_ms.
allow_extended
import "stdlib/async/future.ny"
async fn greet() -> string {
let h = Executor_sleep_ms(10)
await h
return "Nyra async v2"
}
fn main() {
let f = greet()
print(await f)
}// Future<string> — typed async with Executor_sleep_ms.
allow_extended
import "stdlib/async/future.ny"
async fn greet() -> string {
let h = Executor_sleep_ms(10)
await h
return "Nyra async v2"
}
fn main() -> void {
let f = greet()
print(await f)
}Output
Nyra async v2
async_spawn
// async fn + await — call site gets handle immediately; body runs on spawn:task.
allow_extended
import "stdlib/async_v1.ny"
async fn compute() -> i32 {
return 42
}
fn main() {
let h = compute()
print(await h)
}// async fn + await — call site gets handle immediately; body runs on spawn:task.
allow_extended
import "stdlib/async_v1.ny"
async fn compute() -> i32 {
return 42
}
fn main() -> void {
let h = compute()
print(await h)
}Output
42
note: prebuilt runtime missing required symbols; compiling rt modules
async_state_machine
// async state machine — multiple await in one async fn (cooperative poll loop).
allow_extended
import "stdlib/async_v1.ny"
async fn chain() -> i32 {
let _ = await Executor_sleep_ms(5)
let _ = await Executor_sleep_ms(5)
return 100
}
fn main() {
let h = chain()
print(await h)
}// async state machine — multiple await in one async fn (cooperative poll loop).
allow_extended
import "stdlib/async_v1.ny"
async fn chain() -> i32 {
let _ = await Executor_sleep_ms(5)
let _ = await Executor_sleep_ms(5)
return 100
}
fn main() -> void {
let h = chain()
print(await h)
}Output
100
Parallel
cpu_count
// cpu_count() — compiler builtin logical CPU count.
fn main() {
print(cpu_count())
}// cpu_count() — compiler builtin logical CPU count.
fn main() -> void {
print(cpu_count())
}Output
8
parallel_array
// parallel for over a fixed array.
allow_extended
fn main() {
let nums = [10, 20, 30]
parallel for n in nums {
print(n)
}
print(999)
}// parallel for over a fixed array.
allow_extended
fn main() -> void {
let nums: [i32; 3] = [10, 20, 30]
parallel for n in nums {
print(n)
}
print(999)
}Output
20
10
30
999
parallel_cpu
// parallel(cpu = P%) — use P percent of logical CPUs as worker count.
allow_extended
fn main() {
parallel(cpu = 50%) for i in 0..4 {
print(i)
}
print(999)
}// parallel(cpu = P%) — use P percent of logical CPUs as worker count.
allow_extended
fn main() -> void {
parallel(cpu = 50%) for i in 0..4 {
print(i)
}
print(999)
}Output
0
1
2
3
999
parallel_exact
// parallel(threads = N) — exactly N workers (backend still task pool by default).
allow_extended
fn main() {
parallel(threads = 2) for i in 0..4 {
print(i)
}
print(999)
}// parallel(threads = N) — exactly N workers (backend still task pool by default).
allow_extended
fn main() -> void {
parallel(threads = 2) for i in 0..4 {
print(i)
}
print(999)
}Output
0
1
2
3
999
parallel_mode
// parallel(mode = balanced) — leave one CPU for responsiveness.
allow_extended
fn main() {
parallel(mode = balanced) for i in 0..4 {
print(i)
}
print(999)
}// parallel(mode = balanced) — leave one CPU for responsiveness.
allow_extended
fn main() -> void {
parallel(mode = balanced) for i in 0..4 {
print(i)
}
print(999)
}Output
0
1
3
2
999
parallel_search
// parallel any / find / all — early-exit parallel search (fork-join + atomic cancel).
allow_extended
fn main() {
let any_hit = parallel any for i in 0..1000 {
i == 42
}
print(any_hit)
let idx = parallel find for i in 0..1000 {
i == 42
}
print(idx)
let all_pos = parallel all for i in 1..10 {
i > 0
}
print(all_pos)
}// parallel any / find / all — early-exit parallel search (fork-join + atomic cancel).
allow_extended
fn main() -> void {
let any_hit = parallel any for i in 0..1000 {
i == 42
}
print(any_hit)
let idx = parallel find for i in 0..1000 {
i == 42
}
print(idx)
let all_pos = parallel all for i in 1..10 {
i > 0
}
print(all_pos)
}Output
1
42
1
parallel_task_max
// parallel:task(max = N) — cap task-pool workers (alias of bare parallel).
allow_extended
fn main() {
parallel:task(max = 2) for i in 0..4 {
print(i)
}
print(999)
}// parallel:task(max = N) — cap task-pool workers (alias of bare parallel).
allow_extended
fn main() -> void {
parallel:task(max = 2) for i in 0..4 {
print(i)
}
print(999)
}Output
0
1
2
3
999
parallel_task
// parallel for — default task-pool backend (same workers as spawn).
allow_extended
fn main() {
parallel for i in 0..4 {
print(i)
}
print(999)
}// parallel for — default task-pool backend (same workers as spawn).
allow_extended
fn main() -> void {
parallel for i in 0..4 {
print(i)
}
print(999)
}Output
1
2
0
3
999
parallel_thread
// parallel:thread(max = N) — fork-join OS threads per chunk.
allow_extended
fn main() {
parallel:thread(max = 2) for i in 0..4 {
print(i)
}
print(999)
}// parallel:thread(max = N) — fork-join OS threads per chunk.
allow_extended
fn main() -> void {
parallel:thread(max = 2) for i in 0..4 {
print(i)
}
print(999)
}Output
0
1
2
3
999
progress
// progress for — sequential loop with built-in progress bar.
allow_extended
fn main() {
progress(label = "demo") for i in 0..3 {
print(i)
}
}// progress for — sequential loop with built-in progress bar.
allow_extended
fn main() -> void {
progress(label = "demo") for i in 0..3 {
print(i)
}
}Output
[#####--------] 33%
Running demo...
[#########----] 66%
Running demo...
[#############] 100%
Running demo...
0
1
2
Spawn / threads
spawn
allow_extended
fn main() {
let h = spawn {
print(99)
}
h.join()
print(0)
}allow_extended
fn main() -> void {
let h = spawn {
print(99)
}
h.join()
print(0)
}Output
99
0
spawn
allow_extended
fn main() {
spawn:thread {
print(88)
}
}allow_extended
fn main() -> void {
spawn:thread {
print(88)
}
}spawn
allow_extended
fn main() {
let n = 42
spawn {
print(n)
}
print(0)
}allow_extended
fn main() -> void {
let n: i32 = 42
spawn {
print(n)
}
print(0)
}Output
0
Benchmark
benchmark
// benchmark { } — wall time, RSS delta, and CPU% for a block.
allow_extended
extern fn blackbox_i32(x: i32) -> i32
fn run() {
let mut acc = 0
for i in 0..10000 {
acc = blackbox_i32(acc + i)
}
blackbox_i32(acc)
}
fn main() {
benchmark {
run()
}
}// benchmark { } — wall time, RSS delta, and CPU% for a block.
allow_extended
extern fn blackbox_i32(x: i32) -> i32
fn run() {
let mut acc: i32 = 0
for i in 0..10000 {
acc = blackbox_i32(acc + i)
}
blackbox_i32(acc)
}
fn main() -> void {
benchmark {
run()
}
}Output
Time: 0.1 ms
Memory: 0.0 B
CPU: 97%
Defer
defer_lifo
// defer runs LIFO (last deferred, first executed).
allow_extended
fn a() {
print("a")
}
fn b() {
print("b")
}
fn main() {
defer b()
defer a()
print("body")
}// defer runs LIFO (last deferred, first executed).
allow_extended
fn a() {
print("a")
}
fn b() {
print("b")
}
fn main() -> void {
defer b()
defer a()
print("body")
}Output
body
a
b
defer_return
// defer on return — runs cleanup before function exits.
allow_extended
fn cleanup() {
print(1)
}
fn main() {
defer cleanup()
return
}// defer on return — runs cleanup before function exits.
allow_extended
fn cleanup() {
print(1)
}
fn main() -> void {
defer cleanup()
return
}Output
1
Other
file_is_symlink
// [contrib-dev:file_is_symlink:fs_file]
import "stdlib/fs/file.ny"
fn main() {
print("x")
}
// [/contrib-dev:file_is_symlink:fs_file]// [contrib-dev:file_is_symlink:fs_file]
import "stdlib/fs/file.ny"
fn main() -> void {
print("x")
}
// [/contrib-dev:file_is_symlink:fs_file]file_mtime
// [contrib-dev:file_mtime:fs_file]
import "stdlib/fs/file.ny"
fn main() {
print("x")
}
// [/contrib-dev:file_mtime:fs_file]// [contrib-dev:file_mtime:fs_file]
import "stdlib/fs/file.ny"
fn main() -> void {
print("x")
}
// [/contrib-dev:file_mtime:fs_file]path_is_file
// [contrib-dev:path_is_file:fs_file]
import "stdlib/fs/file.ny"
fn main() {
print("x")
}
// [/contrib-dev:path_is_file:fs_file]// [contrib-dev:path_is_file:fs_file]
import "stdlib/fs/file.ny"
fn main() -> void {
print("x")
}
// [/contrib-dev:path_is_file:fs_file]rename_file
// [contrib-dev:rename_file:fs_file]
import "stdlib/fs/file.ny"
fn main() {
print("x", "x")
}
// [/contrib-dev:rename_file:fs_file]// [contrib-dev:rename_file:fs_file]
import "stdlib/fs/file.ny"
fn main() -> void {
print("x", "x")
}
// [/contrib-dev:rename_file:fs_file]option_combinators
// [contrib-dev:option_combinators:option_combinators]
import "stdlib/option/combinators.ny"
fn main() {
let o = Option_i32_some(5)
print(Option_i32_unwrap_or(o, 0))
}
// [/contrib-dev:option_combinators:option_combinators]// [contrib-dev:option_combinators:option_combinators]
import "stdlib/option/combinators.ny"
fn main() -> void {
let o = Option_i32_some(5)
print(Option_i32_unwrap_or(o, 0))
}
// [/contrib-dev:option_combinators:option_combinators]atomic_and_i32
// [contrib-dev:atomic_and_i32:sync_atomic]
import "stdlib/sync/atomic.ny"
fn main() {
let a = Atomic_i32_new(7)
print(atomic_and_i32(a.cell, 3))
}
// [/contrib-dev:atomic_and_i32:sync_atomic]// [contrib-dev:atomic_and_i32:sync_atomic]
import "stdlib/sync/atomic.ny"
fn main() -> void {
let a = Atomic_i32_new(7)
print(atomic_and_i32(a.cell, 3))
}
// [/contrib-dev:atomic_and_i32:sync_atomic]atomic_or_i32
// [contrib-dev:atomic_or_i32:sync_atomic]
import "stdlib/sync/atomic.ny"
fn main() {
let a = Atomic_i32_new(1)
print(atomic_or_i32(a.cell, 2))
}
// [/contrib-dev:atomic_or_i32:sync_atomic]// [contrib-dev:atomic_or_i32:sync_atomic]
import "stdlib/sync/atomic.ny"
fn main() -> void {
let a = Atomic_i32_new(1)
print(atomic_or_i32(a.cell, 2))
}
// [/contrib-dev:atomic_or_i32:sync_atomic]atomic_sub_i32
// [contrib-dev:atomic_sub_i32:sync_atomic]
import "stdlib/sync/atomic.ny"
fn main() {
let a = Atomic_i32_new(10)
print(atomic_sub_i32(a.cell, 3))
}
// [/contrib-dev:atomic_sub_i32:sync_atomic]// [contrib-dev:atomic_sub_i32:sync_atomic]
import "stdlib/sync/atomic.ny"
fn main() -> void {
let a = Atomic_i32_new(10)
print(atomic_sub_i32(a.cell, 3))
}
// [/contrib-dev:atomic_sub_i32:sync_atomic]atomic_xor_i32
// [contrib-dev:atomic_xor_i32:sync_atomic]
import "stdlib/sync/atomic.ny"
fn main() {
let a = Atomic_i32_new(5)
print(atomic_xor_i32(a.cell, 3))
}
// [/contrib-dev:atomic_xor_i32:sync_atomic]// [contrib-dev:atomic_xor_i32:sync_atomic]
import "stdlib/sync/atomic.ny"
fn main() -> void {
let a = Atomic_i32_new(5)
print(atomic_xor_i32(a.cell, 3))
}
// [/contrib-dev:atomic_xor_i32:sync_atomic]strvec_insert_extend
// [contrib-dev:strvec_insert_extend:vec_str]
import "stdlib/vec_str.ny"
fn main() {
let v = strs().push("b").insert(0, "a")
print(v.get(0))
print(v.remove_at(1))
}
// [/contrib-dev:strvec_insert_extend:vec_str]// [contrib-dev:strvec_insert_extend:vec_str]
import "stdlib/vec_str.ny"
fn main() -> void {
let v = strs().push("b").insert(0, "a")
print(v.get(0))
print(v.remove_at(1))
}
// [/contrib-dev:strvec_insert_extend:vec_str]strvec_methods
// [contrib-dev:strvec_methods:vec_str]
import "stdlib/vec_str.ny"
fn main() {
let v = strs().push("x")
print(v.is_empty())
print(v.pop())
}
// [/contrib-dev:strvec_methods:vec_str]// [contrib-dev:strvec_methods:vec_str]
import "stdlib/vec_str.ny"
fn main() -> void {
let v = strs().push("x")
print(v.is_empty())
print(v.pop())
}
// [/contrib-dev:strvec_methods:vec_str]strvec_set_method
// [contrib-dev:strvec_set_method:vec_str]
import "stdlib/vec_str.ny"
fn main() {
let v = strs().push("a")
let _ = v.set(0, "z")
print(v.get(0))
}
// [/contrib-dev:strvec_set_method:vec_str]// [contrib-dev:strvec_set_method:vec_str]
import "stdlib/vec_str.ny"
fn main() -> void {
let v = strs().push("a")
let _ = v.set(0, "z")
print(v.get(0))
}
// [/contrib-dev:strvec_set_method:vec_str]vec_str_clear
// [contrib-dev:vec_str_clear:vec_str]
import "stdlib/vec_str.ny"
fn main() {
let v = strs().push("a").clear()
print(v.len())
}
// [/contrib-dev:vec_str_clear:vec_str]// [contrib-dev:vec_str_clear:vec_str]
import "stdlib/vec_str.ny"
fn main() -> void {
let v = strs().push("a").clear()
print(v.len())
}
// [/contrib-dev:vec_str_clear:vec_str]vec_str_extend
// [contrib-dev:vec_str_extend:vec_str]
import "stdlib/vec_str.ny"
fn main() {
let a = strs().push("x")
let b = strs().push("y")
vec_str_extend(a.handle, b.handle)
print(a.len())
}
// [/contrib-dev:vec_str_extend:vec_str]// [contrib-dev:vec_str_extend:vec_str]
import "stdlib/vec_str.ny"
fn main() -> void {
let a = strs().push("x")
let b = strs().push("y")
vec_str_extend(a.handle, b.handle)
print(a.len())
}
// [/contrib-dev:vec_str_extend:vec_str]vec_str_insert
// [contrib-dev:vec_str_insert:vec_str]
import "stdlib/vec_str.ny"
fn main() {
let v = strs().push("b").insert(0, "a")
print(v.get(0))
}
// [/contrib-dev:vec_str_insert:vec_str]// [contrib-dev:vec_str_insert:vec_str]
import "stdlib/vec_str.ny"
fn main() -> void {
let v = strs().push("b").insert(0, "a")
print(v.get(0))
}
// [/contrib-dev:vec_str_insert:vec_str]vec_str_pop
// [contrib-dev:vec_str_pop:vec_str]
import "stdlib/vec_str.ny"
fn main() {
let v = strs().push("a").push("b")
print(v.pop())
}
// [/contrib-dev:vec_str_pop:vec_str]// [contrib-dev:vec_str_pop:vec_str]
import "stdlib/vec_str.ny"
fn main() -> void {
let v = strs().push("a").push("b")
print(v.pop())
}
// [/contrib-dev:vec_str_pop:vec_str]vec_str_remove_at
// [contrib-dev:vec_str_remove_at:vec_str]
import "stdlib/vec_str.ny"
fn main() {
let v = strs().push("a").push("b")
print(v.remove_at(0))
}
// [/contrib-dev:vec_str_remove_at:vec_str]// [contrib-dev:vec_str_remove_at:vec_str]
import "stdlib/vec_str.ny"
fn main() -> void {
let v = strs().push("a").push("b")
print(v.remove_at(0))
}
// [/contrib-dev:vec_str_remove_at:vec_str]vec_str_reverse
// [contrib-dev:vec_str_reverse:vec_str]
import "stdlib/vec_str.ny"
fn main() {
let v = strs().push("a").push("b").reverse()
print(v.get(0))
}
// [/contrib-dev:vec_str_reverse:vec_str]// [contrib-dev:vec_str_reverse:vec_str]
import "stdlib/vec_str.ny"
fn main() -> void {
let v = strs().push("a").push("b").reverse()
print(v.get(0))
}
// [/contrib-dev:vec_str_reverse:vec_str]vec_str_set
// [contrib-dev:vec_str_set]
import "stdlib/vec_str.ny"
fn main() {
let v = strs().push("a")
vec_str_set(v.handle, 0, "z")
print(v.get(0))
}
// [/contrib-dev:vec_str_set]// [contrib-dev:vec_str_set]
import "stdlib/vec_str.ny"
fn main() -> void {
let v = strs().push("a")
vec_str_set(v.handle, 0, "z")
print(v.get(0))
}
// [/contrib-dev:vec_str_set]vec_str_swap
// [contrib-dev:vec_str_swap:vec_str]
import "stdlib/vec_str.ny"
fn main() {
let v = strs().push("a").push("b").swap(0, 1)
print(v.get(0))
}
// [/contrib-dev:vec_str_swap:vec_str]// [contrib-dev:vec_str_swap:vec_str]
import "stdlib/vec_str.ny"
fn main() -> void {
let v = strs().push("a").push("b").swap(0, 1)
print(v.get(0))
}
// [/contrib-dev:vec_str_swap:vec_str]Module reference: Standard library · Concurrency: Concurrency