Комментарии 6
.map(|meta| EndpointAttrs::from_nested_meta(&&meta))
А тут точно двойной референс нужен?
многие вполне обоснованно побаиваются пользоваться этим инструментом, в основном из-за того, что разбор синтаксического дерева и атрибутов макроса зачастую превращается в «закат солнца вручную», так как задачу приходится решать на очень низком уровне.
Нужен автоматизированный мощный тулс для разборки макросов, иначе есть риск получить такой же ПЕСЕЦ размером с белого медведя как и в C++.
Ну так, собственно, инфраструктура развивается, те же самые darling
/syn
/quote
тому доказательством. Уже вот даже watt
появился, который это добро в WASM тащит.
Мне кажется, преимущество процедурных макросов по отношению к шаблонной магии плюсов в том, что макросы просто дают низкоуровневый доступ к абстракциям языка (при этом ничего нового, по сути, не появляется, мы просто вмешиваемся в работу компилятора), а шаблоны со всякой сфинаёй — это наслоение поверх существующих правил.
Поэтому, имхо, появление инфраструктуры, которая позволит писать процедурные макросы с тем же удобством, что и обычный код — вопрос времени.
Еще строгая проверка типов с понятными ошибками. В плюсах же придется писать огромную кучу бойлерплейта только чтобы типы стали строже. Не говоря уже про ограниченность трейтов C++.
Еще конечно есть проблемы с поддержкой макросов в IDE, но кажется, что watt и тут бы значительно помог бы, можно было бы просто подгружать wasm модули в ide и по сути напрямую исполнять оригинальные макросы.
Хотя сейчас есть костыли в виде cargo expand, но они не очень удобны.
Пишем API на Rust с помощью процедурных макросов