Начинайте с задачи, а не с перечня API. Стандартная библиотека предоставляет небольшой проверяемый набор средств для значений, коллекций, файлов и взаимодействия со средой. Неизвестное имя или метод отклоняется при проверке, а не ищется динамически в языке целевой платформы.
Выберите нужную возможность
| Задача | С чего начать | Вид неудачи |
|---|---|---|
| Вывести текст, преобразовать значение, разобрать Unicode или применить функцию к значениям | Базовая библиотека | Значение, Option или объявленный функцией Result |
| Хранить упорядоченные элементы, искать ключи или убирать повторы | Операции с коллекциями | Обычно значение, bool или Option |
| Прочитать или записать файл целиком | FS.readText, FS.writeText, FS.readBytes или FS.writeBytes | Result |
| Держать файл открытым для нескольких операций | open вместе с using или defer | Result и лексическое освобождение ресурса |
| Понять вывод, числа, порядок или аварийную остановку | Поведение среды выполнения | Определённое значение или явная ошибка выполнения |
Для упорядоченных элементов выбирайте Array, для поиска значения по ключу —
Map, а для набора уникальных значений — Set.
Используйте Option, когда отсутствие значения — нормальный ответ, например
при поиске ключа. Используйте Result, когда внешние данные или операция среды
могут завершиться содержательной ошибкой. Fault означает нарушение контракта
во время исполнения, а неверный вызов или тип даёт статическую диагностику.
Повседневный пример
Программа разбирает текст и преобразует массив. toInt возвращает Option,
потому что в тексте может не оказаться целого числа. map создаёт новый
массив в порядке исходных элементов.
let parsed: Option<int> = toInt("42")
let values: Array<int> = Array.of(1, 2, 3)
let doubled = map(values, value => value * 2)
print("{parsed}:{doubled}")Some(42):[2, 4, 6]Some(42) явно показывает успешное преобразование. Для текста без целого
числа первая часть была бы None: библиотека не подставляет ноль и не бросает
перехватываемое исключение.
Как устроена библиотека
Функции и конструкторы print, toInt, Some, None, Ok, Err, map,
filter и reduce доступны без импорта. Встроенные пространства имён
объединяют узкие семейства, например Math, Bytes, Hash, FS и Path.
В пакетах также доступны фиксированные модули std.* текущего инструментария.
Это проверяемые экспорты, а не динамические пространства имён платформы.
Более широкая поверхность включает кодировки, хеши, пути, аргументы командной строки, регулярные выражения, CSV, TOML, JSON, URL, даты, большие целые и десятичные числа, генераторы, парсеры и ограниченные возможности среды. Точную сигнатуру и ограничения цели смотрите на соответствующей странице, не предполагайте наличие похожего API платформы.
Частая ошибка: импорт стандартного модуля сам по себе не даёт доступ к файловой системе, сети, часам, переменным окружения, процессам или базе данных. Операции среды работают только в профиле и окружении с нужной возможностью.
Точные границы
- Позиции в строке считаются в скалярах Unicode, если API явно не говорит о байтах.
- Обход коллекций и снимки сохраняют документированный порядок.
- Разбор и декодирование сохраняют объявленный способ ошибки
OptionилиResult. - Неверная арифметика и нарушения контрактов не превращаются молча в другое значение.
Test.*, свободная функцияassertиstd.testдоступны только в тестовом профиле.- Неизвестные имена, виртуальные модули и методы дают статическую диагностику.