Обратитесь сюда, если topaz check отклоняет синтаксис, знакомый по
JavaScript, Python, Rust или раннему проекту Топаза. Знакомая запись не
становится вторым диалектом. Обычно у неё есть прямая текущая замена; если
замены нет, возможность недоступна, а не поддерживается частично.
Проверьте программу в текущей записи
Сохраните код в forbidden-deferred.tpz:
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}")Проверьте и запустите файл:
topaz check forbidden-deferred.tpz
topaz run forbidden-deferred.tpz
Результат:
3Здесь показаны текущий порядок let mut, именованный тип коллекции, тип
вызываемого значения, лямбда и шаблон остатка списка.
Замените запись, сохранив смысл
| Если вы написали | Используйте |
|---|---|
mut let count = 0 | let 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 также не становятся синтаксисом Топаза лишь
потому, что их умеет выразить одна целевая платформа.
Текущие формы собраны в Кратком обзоре синтаксиса. Исправления операторов смотрите в Операторы и выражения, а структуру программы — в Модули и видимость.