kw comptime
Зарезервированное слово
Список слов: §1.4
Синтаксис
Fn = [ "comptime" [ "literal" ] | "unsafe" ] "fn" Ident [ Generics ] "(" [ Params ] ")"
[ "->" Type ] [ Effects ] [ Where ] { Contract } ( Block | "=>" Expr ) ;Primary = Literal | Path | "it" | "self" | "(" Expr { "," Expr } ")" | ListLit | MapLit
| StructLit | Lambda | Block | If | Match | For | While | Loop | Scope | Select | Query
| "spawn" ( Postfix | Block ) | "await" Unary | "atomic" [ "(" Args ")" ] Block
| "return" [ Expr ] | "fail" Expr | "yield" Expr | "respond" Expr | "break" [ Label ] [ Expr ]
| "continue" [ Label ] | "emit" Path "(" Expr ")" | "unsafe" Block | "blocking" Block
| "comptime" Block | "." Ident [ "(" [ Args ] ")" ] ;Грамматика: Прил. A
Определяется в
- 15.1 comptime — comptime fn выполняется только при компиляции; comptime { …
- 15.4 Пользовательские атрибуты и генерация кода — attr Имя { поля } объявляет атрибут; comptime fn Имя.apply(d
- 1.4 Ключевые слова — Зарезервированные (нельзя использовать как имена)
- 4.5 impl и методы — Внутри метода доступны self и Self.
- 15.2 Рефлексия — reflect(T) -> TypeInfo (только comptime)
- 15.3 Префиксные литералы — comptime literal fn re(s
Примеры
attr Audit { level: Level = Level.Info }
comptime fn Audit.apply(d: Decl, a: Audit) -> Decl | CompileError {
d.wrapBody(body => quote { log.at($a.level, "call {$d.name}"); $body })
}— 15.4 Пользовательские атрибуты и генерация кода
comptime fn toCsvRow<T>(x: &T) -> String {
var out = String.new()
inline for f in reflect(T).fields where f.visible {
out.push("{x.[f]},")
}
out
}Связанные диагностики
comptime-error, not-comptime, impl-foreign-type, unknown-method, prefix-literal