Подтвердить что ты не робот

Какие плагины/расширения синтаксиса Rust могут быть записаны и где они задокументированы?

Этот сайт содержит шесть типов расширений синтаксиса в Rust с 1.0. Decorator, Modifier, MultiModifier, NormalTT, IdentTT и MacroRulesTT.

К сожалению, все его ссылки на документацию для этих (и связанных с ними расширений для компилятора) выглядят несуществующими. Действительно, даже вручную поиск документации Rust для SyntaxExtension или даже syntax ничего не дает. Он все еще, по-видимому, находится в основном хранилище ржавчины в главной ветке, поэтому это явно не вопрос о том, чтобы быть где-то в детской.

Следует отметить, что на этой странице упоминается, что в какой-то момент "скоро" (начиная с 1.0) MultiModifier и Modifier могут быть объединены, но из-за исчезающей документации я не могу подтвердить это как текущую ночную.

book содержит только базовые символы и "процедурные макросы", которые, по-видимому, довольно ограничены по охвату.

Итак, на данный момент существуют ли еще 6 типов расширения синтаксиса? Была ли обновлена ​​их документация в новом месте? Выполняет ли каждый из них примерно ту же функцию, что и около 1.0?

4b9b3361

Ответ 1

Этот сайт довольно устарел - до стабилизации Rust. Единственные "плагины/расширения синтаксиса", поддерживаемые в Rust 1.20, - это макросы в качестве примера и пользовательские производные, оба из которых написаны на языке программирования Rust. Unstable Rust также имеет пользовательские атрибуты и процедурные макросы, но оба они, вероятно, изменятся до того, как стабилизируются.

Примерное сопоставление типов расширений, перечисленных на этом сайте, с текущими типами макросов будет выглядеть примерно так:

  • Декоратор → Произвольный вывод
  • Модификатор, MultiModifier → Пользовательский атрибут
  • NormalTT → Процедурные макросы
  • IdentTT → процедурные макросы (хотя я не совсем понимаю, что это такое, поэтому я не уверен)
  • MacroRulesTT → Макросы на примере (иначе декларативные макросы)

Примеры макросов на примере легко найти (например, std и корзина log широко их используют). serde_derive вероятно, является лучшим примером использования пользовательского производного.

ОБНОВИТЬ:

Процедурные макросы (включая пользовательские атрибуты) были стабилизированы в Rust 1.30. См. Https://doc.rust-lang.org/stable/book/ch19-06-macros.html.