OxL Справочник OxL
РусскийEnglish

15.1 comptime

  • comptime fn выполняется только при компиляции; comptime { … } — блок, вычисляемый при компиляции; const — его результат.
  • comptime-код детерминирован: эффекты io, net, db, time, rand запрещены. Исключения — comptime.readFile(path), comptime.embedDir(path) и comptime.template(path) (путь внутри пакета; файл учитывается в инкрементальной сборке).
  • comptime.embedDir("dir") — список List<(str, str, str, bytes, i64)>: для каждого файла каталога (путь ниже каталога с разделителем /, тип содержимого по расширению из фиксированной таблицы, ETag — кавычечная хеш-строка содержимого (FNV-1a 64), сжатое gzip содержимое, размер до сжатия). Файлы отсортированы по пути (воспроизводимость), скрытые файлы и каталоги (.имя) пропускаются. Каталог ищется относительно исходного файла, затем от ближайшего каталога с oxl.toml; отсутствующий каталог или нечитаемый файл — comptime-error (D-8054; D-7883).

Определяется реализацией. Файловые операции comptime (D-8054; D-7883). Из исключений этого раздела эта реализация содержит только comptime.embedDir; comptime.readFile и comptime.template не реализованы (необязательные). Учёт встроенных файлов в инкрементальной сборке не выполняется: у драйвера пока нет кэша сборки (изменение файла требует повторной сборки пакета).

  • Типы — значения comptime типа type: comptime fn sizeOf(T: type) -> usize.
  • inline for x in comptimeIterable { … } разворачивается при компиляции.

comptime-error, not-comptime

См. также

Исходник: docs/spec/oxl-standard.md