Реестр запретов — часть контракта: знакомый синтаксис JavaScript, Python, Rust и ранних черновиков Topaz не должен молча становиться вторым диалектом.
Политика
Канонический код использует let mut, Array<T>, (T) -> U, ...args: T, list rest ..rest, лямбды, registry-tagged двойные шаблоны, постфиксный Result ?, зафиксированные import/inline export и явный concurrent. Форма вне SPEC или запрещённая профилем не принимается лишь потому, что существует в целевом языке.
Определённое поведение
Shared checker должен отклонять forbidden shape до выбора backend. Если функция есть в SPEC, но исключена профилем, как composition в public docs, активную поверхность задаёт профиль. Если backend не имеет evidence для принятой формы, он явно отказывает или оставляет её вне claim, а не переосмысливает source.
Ограничения и явный отказ
Запрещённые семейства включают альтернативные binding/operator spellings, string indexing/slicing, legacy collection/function/variadic types, неверный pattern rest, JavaScript spread, Rust ownership/receiver/interop tokens, anonymous function expressions, backticks и ${...}, user template tags, assert/try/panic, re-export, неверные explicit generics/bounds, расширенные nominal/protocol, loop/comprehension/resource формы, bitwise, async/await и catchable faults.
Отложенная граница
Отложенная возможность не считается частично поддерживаемой. API графем, HTML- и пользовательские шаблоны, обобщения высших рангов, широкий протокольный вызов, повторный экспорт пакетов, общий синтаксис итерации и расширения, асинхронность, отмена и перехват ошибок выполнения останутся недоступны, пока будущая версия языка не примет и не опишет их.
Пример
let mut count = 0
let values: Array<int> = []
let transform: (int) -> int = value => value + 1
match values {
case [head, ..tail] => { count = transform(head) }
case [] => { count = 0 }
}