/
nv-lang
/
nova
Обзор
Документация
Войти
/
nv-lang
/
nova
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
main
std/src/text.nv
49 строк
2 KB
Evgeniy Golovin
docs(endocs): text/checksums/concurrency/crypto — translate /// docs to English
01 авг 2026, 02:10
01 авг 2026, 02:10
ed257c2
Код
Авторство
О чём код?
// std/text.nv — text utilities supplementing std.runtime.string (Plan 91 Ф.2). // // Этот module добавляет high-level text utilities, которые не входят в // runtime_registry (бывшие extern "nova" fn в std.runtime.string), но // необходимы для realistic CLI/data-utility use-cases в 0.1 release. // // MVP surface (Plan 91 §Scope): // - `[]str @join(sep str) -> str` — concat array of strings с разделителем. // // Базовые str методы (split/trim/pad/parse/repeat/replace/to_upper/to_lower/ // len/byte_at/chars/bytes/find/rfind/contains/starts_with/ends_with) живут // в `std/runtime/string.nv` (auto-gen из runtime_registry). // // Stability: 0.1 поверхность стабильна — добавление новых утилит не breaking. module std.text import std.runtime.string_builder.{StringBuilder} /// Concatenate `[]str` with `sep`. Empty array → empty string. /// /// O(total_len) — single pass: pre-compute exact capacity, then one StringBuilder /// fill (no intermediate allocations). Fixes the O(n²) concat-loop from V1. /// /// # Examples /// ```nova /// let parts []str = ["a", "b", "c"] /// assert(parts.join(", ") == "a, b, c") /// assert([].join(",") == "") /// assert(["x"].join(",") == "x") /// ``` #stable(since = "0.1") export fn []str @join(sep str) -> str { ro n = @len() if n == 0 { return "" } mut total = @[0].byte_len() mut i = 1 while i < n { total += sep.byte_len() + @[i].byte_len() i += 1 } consume sb = StringBuilder.new(cap: total).append(@[0]) i = 1 while i < n { sb.append(sep).append(@[i]) i += 1 } sb }