Стандартная библиотека и среда

Обзор стандартной библиотеки

Выбор возможностей стандартной библиотеки по задаче и способу обработки ошибок.

Начинайте с задачи, а не с перечня API. Стандартная библиотека предоставляет небольшой проверяемый набор средств для значений, коллекций, файлов и взаимодействия со средой. Неизвестное имя или метод отклоняется при проверке, а не ищется динамически в языке целевой платформы.

Выберите нужную возможность

ЗадачаС чего начатьВид неудачи
Вывести текст, преобразовать значение, разобрать Unicode или применить функцию к значениямБазовая библиотекаЗначение, Option или объявленный функцией Result
Хранить упорядоченные элементы, искать ключи или убирать повторыОперации с коллекциямиОбычно значение, bool или Option
Прочитать или записать файл целикомFS.readText, FS.writeText, FS.readBytes или FS.writeBytesResult
Держать файл открытым для нескольких операцийopen вместе с using или deferResult и лексическое освобождение ресурса
Понять вывод, числа, порядок или аварийную остановкуПоведение среды выполненияОпределённое значение или явная ошибка выполнения

Для упорядоченных элементов выбирайте Array, для поиска значения по ключу — Map, а для набора уникальных значений — Set.

Используйте Option, когда отсутствие значения — нормальный ответ, например при поиске ключа. Используйте Result, когда внешние данные или операция среды могут завершиться содержательной ошибкой. Fault означает нарушение контракта во время исполнения, а неверный вызов или тип даёт статическую диагностику.

Повседневный пример

Программа разбирает текст и преобразует массив. toInt возвращает Option, потому что в тексте может не оказаться целого числа. map создаёт новый массив в порядке исходных элементов.

TOPAZ
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 доступны только в тестовом профиле.
  • Неизвестные имена, виртуальные модули и методы дают статическую диагностику.

Куда перейти дальше