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

Файлы и ресурсы

Открытие, чтение, запись и надёжное закрытие файлов в Topaz.

File I/O — явная host boundary с Result-returning acquisition/operations, opaque resource value и намеренно малым portable contract.

Канонический контракт

open(path) возвращает Result<File,string>. File имеет read() -> Result<string,string>, write(string) -> Result<(),string> и close() -> (). File opaque и non-comparable. Cleanup выражается lexical defer или точным File-only using; общего resource protocol они не создают.

Публичная поверхность

Расширенный host inventory содержит input, FS.readText/writeText/readBytes/writeBytes/list, Path helpers и virtual std.fs/std.io. Bytes предоставляет явные UTF-8, hex, Base64, slice, length и array conversion. Каждый host effect ограничен объявленной host/profile surface.

Наблюдаемое поведение

Acquisition/read/write failures — значения Result. using приобретает один раз, регистрирует close после успеха, создаёт одно immutable child-scope File, выполняет поздние body defers раньше close и закрывает при обычном lexical control exit. Capture не продлевает using scope; позднее замыкание видит значение после implicit close boundary.

Текущая поддержка

File, FS, std.fs и std.io доступны в средах, которые предоставляют файловую систему. Они не дают доступ к остальным API операционной системы, переменным окружения, процессам, сети или базам данных.

Ограничения и исключения

Не специфицированы append modes, binary File overloads, buffering, permissions, async I/O, user disposables, multi-resource using, cancellation cleanup, module lifetime, ordinary-fault finalization и portable post-close/repeated-close. Ошибки обрабатываются Result, не exception.

Пример

TOPAZ
function append(path: string, text: string) -> Result<(), string> {
    let file = open(path)?
    defer { file.close() }
    file.write(text)?
    return Ok(())
}

Связанные правила