Язык программирования Топаз создан специально для вёрстки текста. На нём пишут программы, которые готовят к печати документы от книг до отчётов и счетов, а также утилиты командной строки, обработку данных и логику приложений. Он подходит, если вам нужны компактный единообразный синтаксис, имена на родном языке и запуск на компьютере или в браузере.
Напишите первую программу, пройдите учебный маршрут или откройте песочницу, чтобы попробовать язык без установки. Держите Краткий обзор синтаксиса под рукой для поиска нужной записи.
Называйте данные привычными словами
В одной программе можно использовать корейские, русские и английские имена.
function приветствовать(имя: string, язык: string) -> string {
return match язык {
case "한국어" => "안녕하세요, {имя}님!"
case "Русский" => "Привет, {имя}!"
case _ => "Hello, {имя}!"
}
}
let пользователь = "김토파즈"
print(приветствовать(пользователь, "한국어"))
print(приветствовать("Topaz", "Русский"))안녕하세요, 김토파즈님!
Привет, Topaz!пользователь служит именем переменной, как и имя. Топаз сохраняет введённые символы. Имена совпадают, когда совпадают их символы. Компилятор отклоняет имена, которые можно перепутать при поиске модулей.
Обрабатывайте ошибки и освобождайте ресурсы
Этот пример возвращает номер порта или ошибку и выполняет очистку в обоих случаях.
function разобратьПорт(исходное: string) -> Result<int, string> {
let число = toInt(исходное) ?? -1
if число < 1 {
return Err("not a port: {исходное}")
}
return Ok(число)
}
function запустить(исходное: string) -> Result<string, string> {
defer print("config closed")
let порт = разобратьПорт(исходное)?
return Ok("listening on {порт}")
}
print("{запустить("8080")}")
print("{запустить("http")}")config closed
Ok(listening on 8080)
config closed
Err(not a port: http)Result представляет успех как Ok, а обрабатываемую ошибку как Err. Оператор ? возвращает Err вызывающей функции. defer выполняет очистку при выходе из области видимости, включая ранний возврат, поэтому оба вызова печатают config closed. Для значения, которое может отсутствовать, используйте Option с вариантами Some и None. Разработчики и генераторы кода следуют этим же правилам.
Храните текст SQL отдельно от значений
Этот пример создаёт шаблон SQL с текстом и двумя подставляемыми значениями.
let таблица = "users"
let запрос = sql"select * from {таблица} where active = {true}"
print("{запрос}")<sql template, 3 part(s), 2 interpolation(s)>Вывод сообщает о трёх текстовых частях и двух подставляемых значениях. Шаблон хранит их раздельно для дальнейшего использования. В Топазе также есть шаблоны p для путей, r для регулярных выражений и sh для команд оболочки. Создание шаблона само по себе не выполняет запрос или команду.
Находите ошибки до запуска
Функция принимает один из трёх цветов светофора и возвращает следующий.
type Светофор = "red" | "yellow" | "green"
function следующий(сигнал: Светофор) -> Светофор {
return match сигнал {
case "red" => "green"
case "green" => "yellow"
case _ => "red"
}
}Перед запуском компилятор проверяет типы, находит объявления имён и сообщает о пропущенных вариантах match. Это статические проверки. Они не определяют, соответствует ли логика программы вашему замыслу. Тип в примере допускает все три цвета, поэтому правильность переходов нужно проверять тестами. Само определение функции ничего не выводит.
Выберите способ запуска программы
topaz run проверяет файл и выполняет его. topaz build создаёт из того же исходного кода нативный исполняемый файл или пакет для браузера. Нативная сборка требует дополнительных инструментов. Файлы, подготовка и ожидаемый результат приведены в разделе Первое приложение.
Установленный компилятор написан на Топазе. Он компилирует собственные исходники, и повторная компиляция даёт одинаковый сгенерированный код. Этапы компиляции, поддерживаемые платформы и сведения об установке описаны в разделе Состояние инструментария.
Для прямого управления владением памятью, временем жизни или встроенным оборудованием рассмотрите системный язык, например Rust, C или Zig. Для утилит командной строки и логики приложений продолжайте учебный маршрут.
Причины проектных решений изложены в разделе Философия языка. Исходный код Топаза доступен на topaz.ooo/dl.