Язык программирования Топаз создан специально для вёрстки текста. На нём пишут программы, которые готовят к печати документы от книг до отчётов и счетов, а также утилиты командной строки и логику приложений. Один исходный код можно запустить на компьютере или собрать в пакет для браузера.
Запустите программу сейчас и получите показанный результат.
function привет(имя: string) -> string {
return "Привет, {имя}!"
}
print(привет("Топаз"))Привет, Топаз!
ATLAS
ATLAS превращает рукопись в готовые к печати страницы книги. Ниже показаны страница, свёрстанная в ATLAS, и фрагмент его правил разбиения на строки на Топазе. В ATLAS эти функции названы корейскими терминами вёрстки, здесь они переведены на русский.

function неЛатинскийПробел(следующий: Option<string>) -> bool {
match следующий {
case Some(текст) => !латинскийПробел(текст)
case None => true
}
}
function безЗапретаВНачале(следующий: Option<string>) -> bool {
match следующий {
case Some(текст) => !запрещёнВНачале(текст)
case None => true
}
}Фрагмент правил разбиения на строки в ATLAS
Называйте функции и переменные терминами вёрстки на корейском, русском или английском. Топаз хранит символы рукописи ровно в том виде, в каком их ввели.
Строки и шаблоны →Напишите правило вёрстки один раз и соберите тот же исходный код в исполняемый файл для компьютера и в пакет для браузера. Обе цели следуют одним правилам языка, поэтому правило, проверенное на экране, работает и при выводе.
Интерпретатор и бэкенды →Тип int представляет знаковое 64-разрядное целое число. При переполнении программа останавливается на этом месте и не продолжает работу с неверным значением. Если считать ширину строк и стоимость раскладки в целых числах, переполнение не останется в результате незамеченным.
Поведение среды выполнения →Задайте фиксированный набор случаев, например классы разрыва строки, перечислением, и компилятор проверит, что каждое сопоставление match обрабатывает все варианты. Если позже добавить вариант, сборка покажет каждое сопоставление, которое его ещё не обрабатывает.
Шаблоны и управление потоком →Лиспекс
Топаз выполняет расчёты, которые разбивают текст на строки и собирают страницы. Решения, которые меняются от издательства к издательству и от книги к книге, например с какой страницы начинать главу или сколько висячих строк допустимо, записываются отдельно в правилах Лиспекса. Вычислитель Лиспекса 1.21, встроенный в Топаз 5.21, выполняет эти правила в заданных лимитах. Замените файл правил и заново создайте файл блокировки, и та же рукопись получит другой стиль без изменений в коде приложения.
(let ((минимум-строк 2))
(if (< input минимум-строк) "перенести" "оставить"))Файл rules/висячие-строки.lspx целиком
import src.значения { однаЦифра, текстИз }
import std.lispex { defaultLimits, evaluate }
import std.lispex.rules as rules
export function main(args: Array<string>, stdin: string) -> Result<int, string> {
let правило = rules.висячие_строки()
for осталосьСтрок in [1, 2] {
match evaluate(правило, однаЦифра(осталосьСтрок)?, defaultLimits(правило)) {
case Ok(Complete(итог)) => print("осталось строк {осталосьСтрок}: {текстИз(итог)}")
case _ => return Err("правило не завершилось")
}
}
Ok(0)
}осталось строк 1: перенести осталось строк 2: оставить
Файл src/main.tpz целиком. однаЦифра и текстИз преобразуют значения Лиспекса.
Правила Лиспекса выполняются в интерпретаторе и в нативных сборках. Полная настройка, включая манифест и файлы лимитов, описана в разделе Запуск правил Лиспекса.
function скидка(клиент: { уровень: string, стаж: int }) -> float {
return match клиент {
case { уровень: "премиум", стаж } if стаж > 5 => 0.3
case { уровень: "премиум" } => 0.2
case { стаж } if стаж > 1 => 0.1
case _ => 0.0
}
}
print("{скидка({ уровень: "премиум", стаж: 7 })}")
print("{скидка({ уровень: "новый", стаж: 0 })}")0.3 0.0
function очистить(слова: Array<string>) -> Array<string> {
return filter(слова, (слово: string) => слово != "")
}
function воскликнуть(слова: Array<string>) -> Array<string> {
return map(слова, (слово: string) => слово + "!")
}
let фраза = ["один", "", "способ", "", "сказать"]
|> очистить
|> воскликнуть
print("{фраза}")[один!, способ!, сказать!]
Примеры конкурентности и освобождения ресурсов приведены в разделах Конкурентность и Defer и ресурсы.
Обзор Топаза
Узнайте, для каких задач создан Топаз. Пройдите пошаговое руководство, сверьтесь с картой синтаксиса и выберите нужные инструменты. Устанавливаемый компилятор тоже написан на Топазе. Как компилятор проверяет собственную сборку →
Узнайте, для каких задач подходит Топаз и как выглядит его код перед написанием первой программы.
Познакомиться с Топазом →02Пройдите путь от небольшой первой программы до проверенного приложения из двух модулей.
Начать обучение →03Быстро найдите нужную форму записи и перейдите к соответствующему разделу руководства.
Открыть карту синтаксиса →04Запускайте файлы, управляйте пакетами и собирайте программы для компьютера или браузера.
Изучить инструментарий →