Структура программы

Запрещённые и отложенные формы

Замените привычную, но неподдерживаемую запись канонической формой текущего Топаза.

Обратитесь сюда, если topaz check отклоняет синтаксис, знакомый по JavaScript, Python, Rust или раннему проекту Топаза. Знакомая запись не становится вторым диалектом. Обычно у неё есть прямая текущая замена; если замены нет, возможность недоступна, а не поддерживается частично.

Проверьте программу в текущей записи

Сохраните код в forbidden-deferred.tpz:

TOPAZ
let mut count = 0
let values: Array<int> = [1, 2]
let transform: (int) -> int = value => value + 1

match values {
    case [head, ..tail] => {
        count = transform(head) + tail.length
    }
    case [] => {
        count = 0
    }
}

print("{count}")

Проверьте и запустите файл:

BASH
topaz check forbidden-deferred.tpz
topaz run forbidden-deferred.tpz

Результат:

Вывод
3

Здесь показаны текущий порядок let mut, именованный тип коллекции, тип вызываемого значения, лямбда и шаблон остатка списка.

Замените запись, сохранив смысл

Если вы написалиИспользуйте
mut let count = 0let mut count = 0
count++ или count--count = count + 1 или count = count - 1
[T] в позиции типаArray<T>
function(T) -> U в позиции типа(T) -> U
args: ...T...args: T
[head, ...tail][head, ..tail]
Анонимную function (...) { ... }Лямбду, например value => value + 1
Обратные кавычки или ${value}Двойные кавычки и интерполяцию {value}
Индекс или .length у строкиtext.scalars(), затем операции Array
async или awaitЯвный ограниченный concurrent, если подходит его модель

Для модулей действуют отдельные зафиксированные формы. Используйте выборочный import и export перед объявлением из раздела Модули и видимость. Формы use, строковые и шаблонные пути, списки export, wildcard-export, повторный export и переименование при export недоступны.

Ошибочные записи выше показаны как текст, а не как действительные примеры Топаза. Запускайте topaz check до выбора генерации: общая проверка отклонит их на границе языка, и целевой код не будет угадывать смысл.

Отложенное не означает обещанное

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

Сейчас недоступны, среди прочего, кластеры графем и прямые срезы строк, HTML- и пользовательские теги шаблонов, более широкие и высокоранговые ограничения обобщений, рекурсивные псевдонимы типов, широкий вызов протоколов, повторный экспорт пакетов, общее разворачивание итерируемых значений, асинхронная очистка, async/await, перехват ошибок выполнения, panic/throw/catch и сокращение опционального поля в конвейере.

Токены владения и получателя Rust — &self, &mut self, Vec<T>, use crate:: — допустимы только в явно обозначенном материале о взаимодействии, но не в обычном Топазе. Разворачивание записи в стиле JavaScript и блоки методов Rust также не становятся синтаксисом Топаза лишь потому, что их умеет выразить одна целевая платформа.

Текущие формы собраны в Кратком обзоре синтаксиса. Исправления операторов смотрите в Операторы и выражения, а структуру программы — в Модули и видимость.