Standard library
Short stdlib/ reference — builtins on methods; modules below.
نظرة عامة
الاستيراد الكسول: تُدمج الوحدات التي تستخدمها فقط. للدوال مثل print و.split راجع الدوال المدمجة.
fn main() {
print("stdlib ready")
}
Output
stdlib ready
أسلوب قصير شائع
كل اسم له مثال + Output في المعرض أسفل الصفحة (وفي فهرس methods): jparse/jstr · sb() · slurp/spit · now/ms · env · cmd · uuid · b64 · vec()/strs() · qb() · form/params. شبكة: fetch/req.
fn main() {
let o = jparse("{\"n\":1}")
print(jnum(o, "n"))
print(sb().push("hi").build())
}
Output
1
hi
حالة التنفيذ
معظم الوحدات الأساسية مستقرة. الجداول التفصيلية وأمثلة الـ builtins أسفل الصفحة؛ المصدر: stdlib/README.md.
import "stdlib/fs.ny"
fn main() {
spit("hi.txt", "ok")
print(slurp("hi.txt"))
}
Output
ok
Collections
| Import | Types / API |
|---|---|
stdlib/vec.ny | vec() / VecI32 — push, filter, map, find, contains, reduce |
stdlib/vec_str.ny | strs() / StrVec — joined, filter, map, find, contains, argv() |
stdlib/map.ny | HashMap_str_i32, HashMap_str_str — insert/remove return self (refcounted; safe store = store.insert(...) and TtlCache_put chains) |
stdlib/parser/ | SourceLoc, ParseCursor, Comb_take_while, Comb_or_literal, Comb_many, AstRow — parser building blocks |
stdlib/collections/vec_pod.ny | Vec<T> POD vectors — synthesized Vec_{Struct}_* for Copy structs |
stdlib/collections/vec_pod.ny + reloc expand | Vec<MoveStruct> — parallel columns for string + scalar (+ nested) fields |
stdlib/collections/nested_vec.ny | Vec<Vec<i32>> — synthesized Vec_Vec_i32_* (2D dynamic grid MVP) |
stdlib/map.ny | HashMap<K,V> generic syntax aliases HashMap_str_i32 / HashMap_str_str |
stdlib/strings/split.ny | String_split_safe, String_split_quoted |
stdlib/collections/kv_vec.ny | KvVec — parallel key/value vectors for object rows |
stdlib/unicode/iter.ny | utf8_codepoint_at, utf8_codepoint_count |
stdlib/collections/set.ny | HashSet_str |
stdlib/collections/stack.ny | Stack_i32 |
stdlib/collections/queue.ny | Queue_i32 — front, advance |
stdlib/collections/list.ny | LinkedList_i32 (Vec-backed MVP) |
stdlib/collections/advanced.ny | BTreeMap_str_i32, BTreeSet_str, Deque_i32, PriorityQueue_i32 |
stdlib/gui/ | TextBuffer, ScrollState, FilePicker, Syntax_line_kind — raylib UI helpers |
stdlib/games/ | Grid2D_i32, EcsWorld, VoxelChunk_i32, Gfx3D_orbit_position, GameAudioSession — game grids, ECS, voxels, 3D math, audio paths; optional raylib_audio / raylib_gfx |
stdlib/strings/builder.ny | sb(), .push/.build, cat/cat3/cat4, StringBuilder_* |
fn is_even(x: i32) -> i32 {
if x % 2 == 0 { return 1 }
return 0
}
fn main() {
let xs = vec().push(1).push(2).push(3).push(4)
let evens = xs.filter(is_even)
print(evens.len(), xs.contains(3))
let names = strs().push("ada").push("nyra")
print(names.joined(","), names.includes("nyra"))
let map = dict().insert("age", "20")
print(map.get("age"))
}
Strings & regex
| Import | Functions |
|---|---|
stdlib/strings.ny | strlen, strcat, strcmp, char_from_code, … |
stdlib/strings/ops.ny | str_len, str_contains, str_trim, str_to_upper, str_replace |
stdlib/strings/regex.ny | Regex_new, regex_matches, regex_replace |
import "stdlib/strings/regex.ny"
fn main() {
let re = Regex_new(".+@.+")
if regex_matches(re, "user@example.com") != 0 {
print("valid email pattern")
}
}
FS & path
| Import | API |
|---|---|
stdlib/fs.ny / stdlib/fs/mod.ny | slurp/spit/mkdir/rm/ls, read_file, write_file, exists |
stdlib/path.ny | Path_new, join, extension, file_name, parent |
stdlib/url/mod.ny | Url_parse, url_host, url_path |
Time & date
| Import | API |
|---|---|
stdlib/time/instant.ny | Instant_now, elapsed_ms, sleep(ms) |
stdlib/time/date.ny | CalendarDate, DateTime, date_add_days, date_format (import) |
| builtins | date() — local clock fields (no import); time_start / time_end, mem_start / mem_end |
Net, HTTP, WebSocket
| Import | API |
|---|---|
stdlib/net/http/mod.ny | Primary. fetch(url) → HttpResponse; req().header(…).json(…).post(url); get body-only; headers, FormData, cookies, abort, redirects, Router |
stdlib/net/tcp.ny | TcpListener, TcpStream, tcp_connect, tcp_connect_timeout, tcp_accept_wait |
stdlib/net/dns.ny | dns_lookup → StrVec of IP addresses |
stdlib/net/icmp.ny | ping_tcp, ping_icmp, ping_icmp_system, ping_icmp_capable, ping_auto, ping_auto_verbose (ICMP → system ping → TCP) |
stdlib/net/poll.ny | poll_wait, tcp_relay_poll |
stdlib/net/ftp.ny | Ftp_login, Ftp_list, Ftp_retr, Ftp_stor |
stdlib/net/http/router.ny | HttpRouter — slots/tags; parametric /users/:id; HttpRouter_match / RequestContext_param |
stdlib/net/http/handler.ny | Http_dispatch_slot, serve_handlers |
stdlib/net/http/pool.ny | HttpPool, HttpPool_get — HTTP/HTTPS keep-alive reuse |
stdlib/net/cache.ny | TtlCache — TTL eviction + optional disk tier |
stdlib/net/hub.ny | TcpHub (Send) — broadcast to connected TCP fds |
stdlib/sync/channel.ny | Channel_i32, Channel_str |
stdlib/net/udp.ny | UdpSocket_bind, send, recv, close |
stdlib/net/websocket.ny | WebSocket_connect, ws_listen_on, ws_listen_tls_on, ws_listen_dev_on, ws_listen_prod_on, ws_accept/ws_accept_tls, send/send_server, recv |
stdlib/net/smtp.ny | Smtp_send, Smtp_send_tls, Smtp_send_starttls |
stdlib/net/mail.ny | Mail_send, Mail_message |
stdlib/net/rpc.ny | rpc_encode, JSON-RPC 2.0 helpers |
stdlib/net.ny | Re-exports TCP + net/http |
stdlib/http/mod.ny | Legacy re-export of net/http + HttpServer |
stdlib/tls.ny | tls_connect, tls_connect_verify, tls_connect_ca, tls_upgrade_fd (STARTTLS), tls_listen, tls_validate_pem, tls_last_error, tls_require — client backends via tls in nyra.mod: rustls (default), native (Secure Transport / SChannel), openssl |
stdlib/net/tls_dev.ny | tls_dev_ensure, tls_listen_dev — local self-signed cert/key (tls openssl) |
stdlib/net/tls_prod.ny | tls_listen_prod, tls_connect_prod, tls_upgrade_prod — production cert paths via NYRA_TLS_CERT / NYRA_TLS_KEY |
stdlib/mime/mod.ny | mime_write_multipart, mime_content_type_multipart |
stdlib/text/template | template_execute — {{key}} substitution |
stdlib/html/template | html_template_execute — HTML-escaped templates |
Full reference: net/http
JSON & serialization
| Import | API |
|---|---|
stdlib/json/mod.ny | parse_json/stringify_json (document validate+compact), jparse/jstr/jnum/obj/dict, JSON_parse_object, encode_field |
stdlib/serialize/mod.ny | encode_object, toml_encode_object, yaml_encode_object; serialize/deserialize by SerializeFormat |
stdlib/serde/mod.ny | Serialize/Deserialize traits + compiler schema encode/decode |
Examples: examples/json/decode_i32.ny · examples/serialize/toml.ny · examples/serde_json_pkg.ny (document JSON via stdlib). For full TOML beyond the serialize MVP, see nyrapkg (ny-toml).
Crypto, random & encoding
| Import | API |
|---|---|
stdlib/crypto/mod.ny | random_bytes, sha256, sha512, hmac_sha256, aes_encrypt/aes_decrypt — portable, no external deps |
stdlib/crypto/rsa.ny | rsa_encrypt_pem, rsa_sign_sha256_pem (OpenSSL when linked) |
stdlib/crypto/x509.ny | x509_subject, x509_valid_now (OpenSSL) |
stdlib/random.ny | random, random(min, max), random_f64, shuffle_pick — ChaCha20 CSPRNG |
stdlib/uuid/mod.ny | UUID_v4() (MVP formatting) |
stdlib/encoding/mod.ny | hex_encode, hex_encode_upper, hex_decode, hex_encode_byte, url_encode |
stdlib/encoding/base64.ny | base64_encode, base64_decode — pure Nyra |
stdlib/encoding/csv.ny | csv_parse_line, csv_format_row (quoted fields) |
stdlib/encoding/xml.ny | xml_element, xml_decode_tag_text |
stdlib/unicode/utf8.ny | utf8_valid |
stdlib/compress/mod.ny | gzip_compress/gzip_decompress (zlib), rle_*, zip_* |
stdlib/compress/flate.ny | flate_compress, flate_decompress |
stdlib/archive/zip.ny | zip_pack, zip_unpack (store method) |
stdlib/archive/tar.ny | tar archive helpers |
stdlib/embed/mod.ny | EmbedFs, embed_from_manifest — runtime embed FS |
stdlib/slog/mod.ny | slog_info_kv, slog_error_kv — JSON log lines |
Examples: examples/crypto/sha256.ny · examples/compress/gzip_roundtrip.ny · examples/stdlib_medium_smoke.ny · examples/builtins/stdlib/random.ny
Random (ChaCha20, hardware-seeded)
random(), random(min, max), random_f64(), and random_f64(min, max) are compiler builtins (ChaCha20, hardware-seeded). Integer random is generic — return type follows the bounds (Rust gen_range style): i32, i64, u64, etc. No-arg random() defaults to i32; use random<i64>() for other widths. import "stdlib/random.ny" for shuffle_pick.
| Call | Description |
|---|---|
random() | Random i32 — full 32-bit stream |
random(min, max) | Inclusive integer range; type inferred from bounds (rejection sampling, no modulo bias) |
random<T>() / random<T>(min, max) | Explicit integer type (i64, u64, …) |
random_f64() | Random f64 in [0, 1) — 53-bit precision |
random_f64(min, max) | Random f64 in [min, max) |
shuffle_pick(vec) | Random element from an i32 vector handle (import required) |
Math_random() from stdlib/builtins_math.ny delegates to the same rand_f64() backend. For raw OS TRNG bytes (tokens, keys), use hw_random_bytes or stdlib/crypto/random.ny → random_bytes.
import "stdlib/random.ny"
fn main() {
let dice = random(1, 6)
let unit = random_f64()
print(random())
print(dice)
print(unit)
print(random_f64(0.0, 1.0))
}import "stdlib/random.ny"
fn main() {
let dice = random(1, 6)
let unit = random_f64()
print(random())
print(dice)
print(unit)
print(random_f64(0.0, 1.0))
}Example: examples/builtins/stdlib/random.ny · tests: tests/nyra/random_test.ny
Env & config
| Import | API |
|---|---|
stdlib/env/mod.ny | env/env_or, env_get, env_has, env_set |
stdlib/os/env.ny | os_getenv (low-level) |
stdlib/config/mod.ny | config_load, config_get_env_or_file |
CLI parsing
Build command-line tools with argv parsing, flags, and line scanners. Used by apps under Apps/ and examples/zero_types_cli.ny.
| Import | API |
|---|---|
stdlib/strconv/mod.ny | atoi, itoa, parse_i32, parse_int, parse_i64, parse_u64, parse_f64, parse_bool, format_i32, format_pad, format_hex, format_bin, format_oct, format_f64, format_quote, format_radix, format_u64 |
stdlib/flag/mod.ny | FlagSet_new, FlagSet_parse, Flag_has — -v/--verbose, -h/--help, subcommands |
stdlib/bufio/mod.ny | Scanner_new, Scanner_scan, Scanner_token — line/token scanner over strings |
stdlib/vec_str.ny | StrVec_from_argv(1) — CLI args after program name |
import "stdlib/flag/mod.ny"
fn main() {
let set = FlagSet_new("mytool", "Usage: mytool [flags] args…")
let parsed = FlagSet_parse(set)
if parsed.help_requested != 0 {
Flag_print_usage(parsed)
return
}
let paths = parsed.positional
print(paths.len())
}
Database
SQLite is native when you add link sqlite3 in nyra.mod. Postgres and MySQL expose stable import paths with stub drivers today.
| Import | API |
|---|---|
stdlib/db/sqlite.ny | Sqlite_open, .exec, .query_rows, .find(q), .prepare — requires link sqlite3 |
stdlib/db/query.ny | Preferred. qb().select().from().where().include().lookup().unwind().order().limit().to_sql(); run with db.find(q) |
stdlib/db/resp.ny | Resp_decode_array, Resp_encode_bulk, Resp_cmd_name |
stdlib/db/sstable.ny | SsTable_write_sorted, SsTable_get, sstable_merge_files, SsTable_fsync |
stdlib/db/lsm.ny | LsmTree_put, LsmTree_lookup, LsmTree_get, LsmTree_delete, LsmTree_recover — WAL + leveled compaction |
stdlib/db/sql_parse.ny | SqlParse_parse, SqlParse_format — subset SELECT/INSERT/UPDATE/DELETE |
stdlib/collections/btree_map.ny | BTreeMap_str_str_* sorted key map |
stdlib/collections/btree_pages.ny | BTreePaged_* — internal descent, BTreePaged_range, BTreePaged_keys |
stdlib/db/sql.ny | Sql_open, .query_rows, .find(q) — unified entry (sqlite, postgres, mysql) |
stdlib/db/postgres.ny | Stub — native driver in progress |
stdlib/db/mysql.ny | Stub — native driver in progress |
fn main() {
// Build SQL without a live DB
print(qb()
.select("u.name, p.title")
.from("users u")
.include("posts p", "p.user_id = u.id")
.where("u.active", "=", "1")
.limit(10)
.to_sql())
// With SQLite (add `link sqlite3` in nyra.mod):
// let db = Sqlite_open("app.db")
// let rows = db.find(qb_from("kv").select("*").where("k", "=", "hello"))
}
NyraPkg bindings: examples/packages/ny-sqlite/ · nyrapkg
Terminal & console
Preferred: use built-in print(msg, color: red) and input("prompt") — see I/O built-ins.
| Import | API |
|---|---|
stdlib/terminal/mod.ny | stdout_write, stderr_write, stdin_read (line-based) |
stdlib/terminal/console.ny | console_red, console_green, … (ANSI via \033[…m) |
stdlib/terminal/pty.ny | PtySession_spawn, PtySession_write, PtySession_read — interactive shell; see Subprocess |
stdlib/log.ny | log_info, log_warn, log_error |
stdlib/color.ny | Rgba, rgba(r,g,b,a) — color values for UI/graphics |
Helpers: color_ansi(spec), ansi_reset().
Subprocess & commands
Run external programs from Nyra — similar to Rust’s std::process::Command. Symbols from stdlib/process.ny resolve via auto-prelude (no import required) or explicit import "stdlib/process.ny".
The child inherits stdin/stdout/stderr from the parent — output appears on your terminal. .run() blocks until the child exits and returns its exit code (i32). Returns -1 on failure (including Windows today).
| API | Description |
|---|---|
Command_new(program) | Builder — program path or name on PATH |
cmd.arg(value) | Append one argument (returns new Command) |
cmd.run() | Spawn, wait, return exit code |
cmd.output() | Capture stdout/stderr into ExecResult |
exec(program, args) | Top-level capture — { code, stdout, stderr } |
run_command(program) | Shorthand — program with no extra args |
command_run_args(program, args) | Run with a StrVec of arguments |
stdlib/compiler.ny | check(path), diag_json(path) — run nyra from NYRA_HOME or PATH |
fn main() {
// Exit code only — stdout goes to the terminal
let code = Command_new("true").run()
print(code)
let ls = Command_new("ls").arg("-la").arg("/tmp").run()
print(ls)
// Shell one-liner (pipes, globs) — not a built-in shell parser
let sh = Command_new("/bin/sh").arg("-c").arg("echo hello from sh").run()
print(sh)
}fn main() -> void {
let code = Command_new("true").run()
print(code)
let ls = Command_new("ls").arg("-la").arg("/tmp").run()
print(ls)
let sh = Command_new("/bin/sh").arg("-c").arg("echo hello from sh").run()
print(sh)
}أي API تستخدم؟
Command.run لكود الخروج مع الـ I/O · exec / Command.output() لالتقاط stdout · check/diag_json للتحقق · bridge_exec لعمال JSON · pty.ny لتيرمنال تفاعلي. حد أقصى 30 وسيطًا.
nyra run examples/process_command.ny
nyra run examples/process_exec.ny
Sync, context & async channels
| Import | API |
|---|---|
stdlib/sync/mod.ny | Channel_i32, Mutex, RwLock, WaitGroup, Atomic_i32 |
stdlib/sync/async_channel.ny | AsyncChannel_i32 (Extended + channel) |
stdlib/context/mod.ny | Context_background, Context_with_timeout, context_done, context_cancel, context_sleep_or_done |
stdlib/async.ny | Promise/async helpers (Extended) — see Async |
spawn { } | Language keyword — Concurrency |
Context uses monotonic deadlines from time/instant.ny — poll with context_done in loops or before blocking I/O. See Concurrency.
Iterators (Vec_i32 MVP)
import "stdlib/iter/mod.ny" — chain via separate calls (no closures yet):
import "stdlib/iter/mod.ny"
import "stdlib/vec.ny"
fn main() {
let mut nums = Vec_i32_new()
nums = nums.push(1)
nums = nums.push(5)
nums = nums.push(3)
let big = vec_filter_gt(nums, 2)
print(vec_reduce_sum(big))
}
vec_map_add, vec_take, vec_skip, vec_find
Reflect, result & memory utils
| Import | API |
|---|---|
stdlib/reflect/mod.ny | typeof_i32, type_name_i32, type_name_string — no runtime RTTI |
stdlib/result.ny | option_is_some, result_is_ok |
| compiler intrinsic | size_of<T>(), align_of<T>() — type layout in bytes (no import) |
stdlib/mem/layout.ny | size_of_i32, size_of_ptr, align_of_i32, align_of_ptr — wrappers over the intrinsics |
stdlib/mem/util.ny | MVP scalars (size_of_i32, align_of_ptr, swap_i32) — prefer layout.ny / intrinsics |
stdlib/arc.ny | Arc_i32, Arc_from_i32, Arc_from_string — refcounted shared ownership; see Memory |
stdlib/option.ny | Option helpers — see Match |
stdlib/box.ny | Heap box — see Memory |
stdlib/math.ny | abs_i32, pow_i32, sqrt_i32, sin, cos, floor, gcd_i32, saturating_add, leading_zeros, is_finite, … |
stdlib/random.ny | shuffle_pick; builtins random, random_f64 |
stdlib/terminal/raw.ny | terminal_raw_on, terminal_read_key |
stdlib/time/fixed_step.ny | FixedStep_new, FixedStep_tick |
stdlib/testing.ny | assert_eq, assert_ne, assert_true, assert, assert_bool — see testing |
stdlib/process.ny | Command_new, .run — see Subprocess & commands |
stdlib/bridge/mod.ny | bridge_exec, bridge_result — see examples/bridge/ |
size_of / align_of
Ask the compiler for a type’s layout size and alignment in bytes. Multiply by 8 for bits (i32 → 4 bytes → 32 bits). Works on scalars, repr(C) structs, and unions — no import required for the intrinsics.
struct Packet repr(C) align(8) {
kind: i32
port: i32
}
fn main() {
print(size_of<i32>()) // 4 bytes
print(size_of<i32>() * 8) // 32 bits
print(size_of<i64>()) // 8 bytes
print(align_of<i64>()) // 8
print(size_of<Packet>()) // 8
print(align_of<Packet>()) // 8
}struct Packet repr(C) align(8) {
kind: i32
port: i32
}
fn main() -> void {
print(size_of<i32>()) // 4 bytes
print(size_of<i32>() * 8) // 32 bits
print(size_of<i64>()) // 8 bytes
print(align_of<i64>()) // 8
print(size_of<Packet>()) // 8
print(align_of<Packet>()) // 8
}Output
4
32
8
8
8
8
Named helpers (same values) via import "stdlib/mem/layout.ny":
import "stdlib/mem/layout.ny"
fn main() {
print(size_of_i32())
print(align_of_ptr())
}import "stdlib/mem/layout.ny"
fn main() -> void {
print(size_of_i32())
print(align_of_ptr())
}Output (64-bit target)
4
8
Also see Memory → Type layout and Learn → Data types → Type sizes.
Reflect — type names
Compile-time helpers only — Nyra has no runtime RTTI. Useful for tests and debug labels. typeof_i32(x) returns TypeKind.I32 (and siblings for bool / string).
import "stdlib/reflect/mod.ny"
fn main() {
print(type_name_i32())
print(type_name_string())
print(type_name_bool())
}import "stdlib/reflect/mod.ny"
fn main() -> void {
print(type_name_i32())
print(type_name_string())
print(type_name_bool())
}Output
i32
string
bool
Fixed-step clock
Game-loop helper: accumulate frame time and return how many fixed simulation steps to run.
import "stdlib/time/fixed_step.ny"
fn main() {
let mut clock = FixedStep_new(60) // 60 Hz → ~16.67 ms/step
let steps = FixedStep_tick(clock, 33.0)
print(steps) // 1 (33 ms covers one step)
print(FixedStep_hz(clock))
}import "stdlib/time/fixed_step.ny"
fn main() -> void {
let mut clock: FixedStep = FixedStep_new(60)
let steps: i32 = FixedStep_tick(clock, 33.0)
print(steps)
print(FixedStep_hz(clock))
}Output
1
60
Terminal raw mode
Disable line buffering to read single key codes (TUI / games). Always restore cooked mode afterward.
import "stdlib/terminal/raw.ny"
fn main() {
terminal_raw_on()
let key = terminal_read_key() // blocks until a key is pressed
terminal_raw_off()
print(key)
}import "stdlib/terminal/raw.ny"
fn main() -> void {
terminal_raw_on()
let key: i32 = terminal_read_key()
terminal_raw_off()
print(key)
}Testing helpers
Import for nyra test and the CONF-LANG suite (tests/conformance/pass/). Full CLI walkthrough (COMPILE → LINK → PASS, --filter, --list-json): Toolchain → nyra test.
| Import | API |
|---|---|
stdlib/testing.ny | assert_eq, assert_ne, assert_true, assert_bool |
stdlib/testing/fstest.ny | assert_file_contains, assert_file_exists |
stdlib/testing/quick.ny | quick_check_range_i32 — property-style checks |
import "stdlib/testing.ny"
test fn adds() {
assert_eq(2 + 3, 5)
assert_bool(true)
}import "stdlib/testing.ny"
test fn adds() {
assert_eq(2 + 3, 5)
assert_bool(true)
}nyra test . # run all test fn in the project
nyra test . --filter adds # only matching names
nyra test . --list-json # IDE discovery
| Function | Job |
|---|---|
assert_eq(actual, expected) | i32 equality — exits 1 on mismatch |
assert_ne(actual, expected) | i32 inequality |
assert_true(cond) / assert(cond) | Non-zero i32 condition |
assert_bool(cond) | bool must be true |
Run conformance: bash scripts/conformance-tests.sh · Toolchain → CONF-LANG
Benchmark & profile
| Import | API |
|---|---|
stdlib/bench/mod.ny | bench_loop(label, iterations), bench_once(label); uses blackbox_i32. For block timing use the benchmark { } statement (no import). |
stdlib/profile/mod.ny | profile_start, ProfileSession.stop |
Built-in functions & methods (no import)
الأنواع اختيارية: المترجم يستنتجها. المعرض أدناه: تبويب بدون أنواع (افتراضي) ومع أنواع. الأمثلة في examples/builtins/.
Runnable examples — easy vs typed
Same program, two styles. Default tab is Without types — switch to With types when you want explicit annotations.
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
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
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
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
I/O
| Call | Signature | Description | Example |
|---|---|---|---|
print(expr) | 1 arg → void | Stdout + newline (string, i32, bool, char, f64). | examples/builtins/io/print.ny |
print(expr, color: spec) | value + named color → void | Colored stdout + newline. spec: name (red), "#RGB" / "#RRGGBB", "rgb(r,g,b)", or string expr. Resets style after each line. | — |
write(expr) | 1 arg → void | Buffered stdout (no newline). | examples/builtins/io/write.ny |
println(expr) | 1 arg → void | Buffered stdout + newline. | examples/builtins/io/println.ny |
flush() | none → void | Flush stdout buffer. | examples/builtins/io/flush.ny |
input() | none → string | Read one line from stdin. | examples/builtins/io/input.ny |
input(prompt) | string → string | Print prompt, then read line. | examples/builtins/io/input.ny |
Math intrinsics
Compiler builtins — call like normal functions; the backend lowers them to LLVM intrinsics (no function-call overhead). Available with or without stdlib prelude (--no-prelude / embedded builds).
| Call | LLVM | Example |
|---|---|---|
abs_i32(x) / abs(x) on i32 | @llvm.abs.i32 | examples/builtins/math_intrinsics.ny |
abs_f64(x) / abs(x) on f64 | @llvm.fabs.f64 | — |
min_i32(a, b) / max_i32(a, b) | @llvm.smin.i32 / @llvm.smax.i32 | examples/builtins/math_intrinsics.ny |
min_f64(a, b) / max_f64(a, b) | @llvm.minnum.f64 / @llvm.maxnum.f64 | — |
clamp_i32(x, lo, hi) | smax + smin | examples/builtins/math_intrinsics.ny |
sin(x), cos(x), atan2(y, x), tan(x) on f64 | via stdlib/math.ny | examples/games/trig_raycast.ny |
stdlib/math.ny keeps reference stubs for type discovery via auto-prelude; pow_i32 and sqrt_i32 remain ordinary Nyra code (no libm). Trig calls are compiler intrinsics (direct @sin_f64 etc.) so Nyra’s sin wrapper does not collide with libc sin at link time.
date() — local date & time
Returns a Date struct (fields, not methods). Month is 1–12 (calendar month).
| Field / alias | Type | Range | Example |
|---|---|---|---|
year | i32 | e.g. 2026 | examples/builtins/date/date.ny |
month | i32 | 1–12 | |
day | i32 | 1–31 | |
hour, minute, second | i32 | clock time | |
week / weekday | i32 | 0=Sun … 6=Sat | |
millisecond | i32 | 0–999 | |
minutes | alias → minute | ||
seconds | alias → second | ||
Call: date() → date_now (local timezone).
String methods
Method syntax on string — borrows the receiver (does not move). Copy with the clone keyword: let c = clone s (not .clone()).
| Method | Args | Returns | Description | Example |
|---|---|---|---|---|
.length() | none | i32 | Byte length | examples/builtins/strings/length.ny |
.len() | none | i32 | Alias of .length() | examples/builtins/strings/len.ny |
.split(sep) | string | split list | Split on separator | examples/builtins/strings/split.ny |
.trim() | none | string | Strip whitespace | examples/builtins/strings/trim.ny |
.contains(needle) | string | i32 | 1 / 0 | examples/builtins/strings/contains.ny |
.starts_with(prefix) | string | i32 | Prefix test | examples/builtins/strings/starts_with.ny |
.ends_with(suffix) | string | i32 | Suffix test | examples/builtins/strings/ends_with.ny |
.replace(from, to) | 2 × string | string | First occurrence only | examples/builtins/strings/replace.ny |
.to_upper() | none | string | ASCII upper-case | examples/builtins/strings/to_upper.ny |
.to_lower() | none | string | ASCII lower-case | examples/builtins/strings/to_lower.ny |
clone s | — | string | Heap copy (keyword) | examples/builtins/strings/clone.ny |
Fixed arrays & for … in
| Syntax / method | On | Returns | Example |
|---|---|---|---|
for i in 0..n | range | — | examples/builtins/for_in/range.ny |
for x in arr | fixed array | — | examples/builtins/arrays/for_in.ny |
for c in str | string | char per byte | examples/builtins/for_in/string_chars.ny |
.length() / .len() | fixed array | i32 | examples/builtins/arrays/length.ny |
.sort() | i32 / f64 array | new sorted array (numeric; original unchanged) | examples/builtins/arrays/sort.ny |
.sort_by(cmp) | fn(T, T) -> i32 | new sorted array (comparator; original unchanged) | examples/syntax/array_sort_by.ny |
Split lists (.split result)
| Method / syntax | Returns | Example |
|---|---|---|
.length() / .len() | i32 part count | examples/builtins/split_list/length.ny |
for s in parts | each string part | examples/builtins/split_list/for_in.ny |
Timing & memory
| Call | Lowers to | Example |
|---|---|---|
time_start(label) / time_end(label) | time_start / time_end | examples/builtins/timing/time.ny |
mem_start(label) / mem_end(label) | mem_start / mem_end | examples/builtins/timing/mem.ny |
Terminal output uses colored timing / RSS deltas (platform-dependent).
spawn { ... }
Runs a block on a new thread. Captures must be Send; active borrows are rejected.
| Runtime | Example |
|---|---|
spawn_capture | examples/builtins/spawn/spawn.ny |
Channels: examples/syntax/spawn_channel.ny · Rules: Concurrency
Stdlib JS-style helpers (import)
Ergonomic wrappers in stdlib/builtins_*.ny — import when you need dynamic Vec helpers or naming familiar from JavaScript.
stdlib/builtins_array.ny
| Function | Description | Example |
|---|---|---|
Array_push(v, x) | Append i32 | examples/builtins/stdlib/array_push.ny |
Array_pop(v) | Pop last i32 | examples/builtins/stdlib/array_pop.ny |
Array_map(v, f) | Map with fn(i32) -> i32 | examples/builtins/stdlib/array_map.ny |
Array_filter(v, pred) | Filter (pred returns 1/0) | examples/builtins/stdlib/array_filter.ny |
Array_reduce(v, init, f) | Fold left | examples/builtins/stdlib/array_reduce.ny |
Array_find(v, pred, fallback) | First match or fallback | examples/builtins/stdlib/array_find.ny |
Combined: examples/builtins/array/main.ny
stdlib/builtins_string.ny
| Function | Description | Example |
|---|---|---|
String_toUpperCase(s) | Upper-case | examples/builtins/stdlib/string_to_upper.ny |
String_toLowerCase(s) | Lower-case | examples/builtins/stdlib/string_to_lower.ny |
String_includes(s, needle) | Substring test | examples/builtins/stdlib/string_includes.ny |
String_split(s, sep) | Split to string vector (ptr) | examples/builtins/stdlib/string_split.ny |
String_replace(s, from, to) | Replace all matches | examples/builtins/stdlib/string_replace.ny |
String_replacen(s, from, to, count) | Replace at most count matches | examples/syntax/string_replace.ny |
trim(s) | Trim whitespace | examples/builtins/stdlib/trim.ny |
Combined: examples/builtins/string/main.ny
stdlib/builtins_math.ny
| Function | Description | Example |
|---|---|---|
Math_max(a, b) | Maximum | examples/builtins/stdlib/math_max.ny |
Math_min(a, b) | Minimum | examples/builtins/stdlib/math_min.ny |
Math_round(x) | Round (MVP: identity on i32) | examples/builtins/stdlib/math_round.ny |
Math_floor(x) | Floor (MVP) | examples/builtins/stdlib/math_floor.ny |
Math_ceil(x) | Ceil (MVP) | examples/builtins/stdlib/math_ceil.ny |
Math_random() | Random f64 in [0, 1) — ChaCha20 via rand_f64() | examples/builtins/stdlib/math_random.ny |
Combined: examples/builtins/math/main.ny
stdlib/random.ny
| Function | Description | Example |
|---|---|---|
random() / random(min, max) | Generic integer random (ChaCha20, HW-seeded) | examples/builtins/stdlib/random.ny |
random_f64() / random_f64(min, max) | Unit or range f64 | examples/builtins/stdlib/random.ny |
shuffle_pick(vec) | Random i32 from vector (import required) | — |
See also Random (ChaCha20) · Hardware TRNG
stdlib/builtins_json.ny
| Function | Description | Example |
|---|---|---|
JSON_stringify(key, value) | Single-field JSON object | examples/builtins/stdlib/json_stringify.ny |
JSON_parse(json, key) | Read string field | examples/builtins/stdlib/json_parse.ny |
Combined: examples/builtins/json/main.ny
core/mem, alloc & os
import "stdlib/alloc.ny" — free (FFI only; normal code auto-drops).
import "stdlib/core/mem.ny" — malloc, memcpy, volatile MMIO for unsafe / no_std. See Memory → unsafe.
import "stdlib/os.ny" — platform, battery, os_getenv, syscalls, asm. See OS module table below and the OS, files & hardware guide.
alloc.ny
import "stdlib/alloc.ny"
| Function | Signature | Notes |
|---|---|---|
free | (p: string) -> void | FFI / advanced only. Normal Nyra code auto-drops owned strings. Compiler warns if you call this on a live owned binding. |
fs.ny — files (extended)
import "stdlib/fs.ny" or declare extern in your file. Tutorial: OS, files & hardware → Filesystem.
| Function | Signature | Ownership | Description |
|---|---|---|---|
read_file | (path: string) -> string | Move | Read entire file |
write_file | (path, content) -> i32 | Borrows | Write file |
read_file / wrappers | via stdlib/fs/mod.ny | — | Also append_file, exists, create_dir, remove_file, copy_file, list_dir, list_dir_entries, read_file_limit, is_dir |
read_file_limit | (path, max_bytes: i32) -> string | Move | Read at most max_bytes (editors / previews) |
list_dir_entries | (path: string) -> StrVec | Move | Directory listing without manual line split |
os_arg_count | () -> i32 | — | CLI argc (set at program entry; see Apps/cat) |
os_arg_at | (index: i32) -> string | Move | Argv entry (0 = program name) |
StrVec_from_argv | (skip: i32) -> StrVec | Move | CLI args from index (use 1 to skip program name) |
argv() | () -> StrVec | Move | Shorthand for StrVec_from_argv(1) |
exit | (code: i32) -> void | — | Terminate process with status code |
bytes_read_file | via stdlib/fs/bytes.ny | — | Binary-safe file read (ptr handle + bytes_len) |
stdin_read_bytes | (max: i32) -> ptr | Move | Read stdin (0 = up to 64 MiB) |
basename_str | stdlib/path.ny | Borrows | Last path segment |
Regex_new | stdlib/strings/regex.ny | — | POSIX extended regex (use -E in Apps/grep) |
tar_pack / tar_unpack | stdlib/archive/tar.ny | — | POSIX ustar archives |
gzip_compress_file | stdlib/compress/gzip.ny | — | zlib gzip (requires -lz at link) |
import "stdlib/fs.ny"
fn main() {
let msg = "hello\n"
write_file("/tmp/out.txt", msg)
let content = read_file("/tmp/out.txt")
print(content)
}
strings.ny — low-level C API
import "stdlib/strings.ny"
| Function | Signature | Ownership | Description |
|---|---|---|---|
strlen | (s: string) -> i32 | Borrows s | Byte length (C string, excludes NUL). |
strcat | (a: string, b: string) -> string | Move — new owned heap string | Concatenate; result auto-dropped. |
strcmp | (a: string, b: string) -> i32 | Borrows both | C-style strcmp (0 if equal). |
i32_to_string | (n: i32) -> string | Move — new owned heap string | Format signed 32-bit integer. |
i64_to_string | (n: i64) -> string | Move — new owned heap string | Format signed 64-bit integer (timestamps, offsets). |
time.ny — timing (extern aliases)
Optional import when you want explicit extern names in scope:
import "stdlib/time.ny"
fn main() {
time_start("bench")
// ...
time_end("bench")
}
Equivalent to builtins time_start / time_end without import.
mem.ny — memory stats (extern aliases)
import "stdlib/mem.ny"
fn main() {
mem_start("phase")
// ...
mem_end("phase")
}
Equivalent to builtins mem_start / mem_end without import.
core/mem.ny — unsafe primitives
import "stdlib/core/mem.ny" — for no_std, embedded, or unsafe code. Link with libc or provide your own symbols when using --freestanding.
| Function | Signature | Role |
|---|---|---|
malloc | (size: i64) -> ptr | Heap allocation |
free | (p: ptr) -> void | Heap free |
memcpy | (dst: ptr, src: ptr, nbytes: i64) -> ptr | Bulk copy |
memset | (dst: ptr, byte: i32, nbytes: i64) -> ptr | Bulk fill |
volatile_load_i32 | (addr: ptr) -> i32 | MMIO register read |
volatile_store_i32 | (addr: ptr, value: i32) -> void | MMIO register write |
volatile_load_u32 | (addr: ptr) -> u32 | MMIO (unsigned) |
volatile_store_u32 | (addr: ptr, value: u32) -> void | MMIO (unsigned) |
Volatile symbols are experimental in the ABI manifest. See Memory → unsafe and FFI & ABI.
os.ny — OS APIs
import "stdlib/os.ny" — ready OS, hardware, and syscall wrappers (macOS, Linux, Windows).
import "stdlib/os.ny"
fn main() {
print(platform_name())
print(battery_percent())
print(os_getenv("HOME"))
print(os_getpid())
unsafe { asm "nop" }
}
| Module | Functions | Notes |
|---|---|---|
platform.ny | platform_name(), is_linux(), page_size() | Platform detection |
env.ny | os_getenv(name) | Use os_getenv — not getenv (libc collision) |
battery.ny | battery_percent() | 0–100 or -1 |
unistd.ny | os_read, os_write, os_syscall6, … | POSIX-style + raw syscalls |
syscall_linux.ny / syscall_darwin.ny | SYS_* constants | For os_syscall6 |
syscall_windows.ny | WIN_NT_*, WIN_PAGE_*, VirtualAlloc flags | Windows constants (Win32 preferred over raw syscall) |
cpu.ny | cpu_brand(), cpu_*_cores(), cpu_has_avx2(), … | CPU info |
memory.ny | mem_map_anonymous, mem_unmap, dma_available() | mmap / VirtualAlloc |
storage.ny | disk_total_bytes, disk_free_bytes, disk_fs_type | Path mount point |
netif.ny | net_interface_* | MAC, name, link up (not TCP — see stdlib/net) |
display.ny | display_width, display_refresh_hz, … | CoreGraphics / Win32 / Linux env fallback |
power.ny | power_on_ac(), power_cpu_temp_centi_c() | Extends battery.ny |
affinity.ny | affinity_set_thread_cpu, affinity_get_thread_cpu | Thread affinity |
clocks.ny | clock_rdtsc, clock_monotonic_ns | i64 timestamps |
usb.ny / serial.ny | USB VID/PID, serial open/read/write | Linux sysfs + termios/COM |
signals.ny / mqueue.ny | signal_install, mqueue_* | Poll-based signals; mqueue: Linux POSIX, macOS in-memory, Windows mailslots |
hw_crypto.ny / permissions.ny | hw_random_bytes, perm_chroot | TRNG + priv drop |
asm.ny | cpu_nop(), cpu_pause() | Plus Nyra asm "..." in unsafe |
Channels (runtime C API)
Thread-safe channels built on the Nyra runtime. Declare extern in your code or wrap in a project module.
| Symbol | Role |
|---|---|
channel_new() | Create channel; returns handle (i32 in MVP) |
channel_send(ch, value) | Send i32 value |
channel_recv(ch) | Blocking receive |
channel_free(ch) | Release channel memory |
Spawn: spawn_capture (with captures) and spawn (empty). Async stubs: await, async_run (evolving).
Built-in enums
Registered in the typechecker — no import required:
| Type | Variants |
|---|---|
option / Option | None, Some |
result / Result | Ok, Err |
let x = Option.Some(42)
let r = Result.Ok("ok")
Where stdlib lives
- Short imports:
import "stdlib/vec.ny"orimport "std/json/mod"— resolves from install tree or repostdlib/ - Prelude:
import "stdlib/prelude.ny"— vec, map, strings/ops, log - Packages:
nyrapkg install ny-sqlite@^0.1.0thenimport "pkg/ny-sqlite" - Demos:
examples/stdlib/demo/main.ny,examples/stdlib/extended/main.ny - Installed Nyra:
$NYRA_HOME/share/stdlib/— run./scripts/updateLang.shafter pulling new runtime symbols - WASI:
nyra build --for wasm— limited subset
أمثلة stdlib
شغّل العروض الجاهزة:
NYRA_HOME= nyra run examples/stdlib/demo/main.ny
NYRA_HOME= nyra run examples/stdlib/extended/main.ny