Topazdocs
Начало

Обзор языка

Каноническая грамматика, семантика, ограничения и отложенные границы: Обзор языка.

Topaz — статически проверяемый язык, ориентированный на выражения и намеренно замкнутую поверхность. Этот обзор связывает значения, типы, управление, коллекции, ошибки, ресурсы, конкурентность, шаблоны и модули в единый контракт.

Политика

Программа состоит из объявлений и инструкций, разрешённых спецификацией и профилем public-docs. Выражения создают значения; присваивание и defer явно остаются инструкциями. Интерпретатор служит семантическим эталоном, а согласие бэкендов утверждается только для именованной измеренной поверхности.

Определённое поведение

Связывания записываются через const, let и let mut. Функции объявляют типы параметров и результата, лямбды используют =>. if, match, собирающий значения for и контекстный loop могут давать значение. Отсутствие выражают nullable-union или Option, восстанавливаемую ошибку — Result и постфиксный ?, очистку — defer либо ограниченный File-using. Коллекции — Array<T>, Map<K,V> и Set<T> с определённым порядком вычисления.

Ограничения и явный отказ

Проверяющий не угадывает выдуманный диалект. В языке нет async/await, выражения try, индексации строк, JavaScript-spread записей, Rust-получателей и сокращённого типа коллекции. Модули используют только зафиксированную грамматику import/export. Неподдерживаемая бэкендом принятая форма должна завершаться явным отказом или оставаться вне его заявления.

Отложенная граница

Расширенный async, перехват fault, пользовательские теги шаблонов, API графем, spread произвольных iterable, полиморфизм высших рангов, расширенная диспетчеризация протоколов и реэкспорт модулей пока не каноничны. Roadmap может их обсуждать, но текущие примеры не представляют их принятыми.

Пример

TOPAZ
type TrafficLight = "red" | "yellow" | "green"

function instruction(light: TrafficLight) -> string {
    match light {
        case "red" => "stop"
        case "yellow" => "slow"
        case "green" => "go"
    }
}

let values: Array<int> = [1, 2, 3]
let doubled = for value in values { value * 2 }
print("{instruction("green")}: {doubled}")

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