Описание тега rust-compiler-plugin
Плагины компилятора Rust - это предоставляемые пользователем библиотеки, которые расширяют поведение компилятора за счет новых расширений синтаксиса, времени компиляции, проверки линта и т. Д. Здесь можно найти вопросы, касающиеся создания и проектирования плагинов компилятора Rust.
1
ответ
Как написать плагин компилятора Rust, который генерирует модуль?
Я пишу плагин компилятора Rust, который расширяет choose! { test_a test_b } в #[cfg(feature = "a")] mod test_a; #[cfg(feature = "b")] mod test_b; Это почти сделано, но модуль не содержит ничего в окончательно расширенном коде. Я думаю, причина в том…
23 авг '16 в 07:20
2
ответа
Атрибут получения только для определенных полей, как в serde
С помощью derive синтаксис, я могу реализовать такие черты, как Hash или же PartialEq используя конкретные поля, а не все? Это может выглядеть так: #[derive(Debug, Hash, Eq, PartialEq)] struct MyStruct { id: i32, name: String, #[derive(hash_skip, eq…
11 апр '16 в 15:37
1
ответ
Могу ли я при поиске расширения синтаксиса искать информацию о типах, отличных от аннотированного типа?
Я хотел бы написать расширение синтаксиса, которое объединяет информацию из связанного типа при создании новой функции. В качестве глупого примера представьте, что у меня есть этот код: struct Monster { health: u8, } impl Monster { fn health(&se…
17 сен '15 в 23:20
1
ответ
Как мне интерпретировать или иначе оценить Rust во время выполнения?
Я искал, и хотя это, кажется, очень востребованная функция, все результаты поиска, по крайней мере, один год. Каково текущее состояние этого? Есть ли хорошее решение для оценки произвольного кода Rust во время выполнения (как подсказка Хаскелла)? Мо…
28 янв '19 в 23:33
1
ответ
Как получить структурные поля и тип полей в плагине компилятора?
Я хочу создать HashMap которые используют структурные поля в качестве ключа, и используют usize целое число как значение. pub struct Article { title: String, content: String, category: String, comments: Vec<Comment> } pub struct Comment { cont…
16 сен '16 в 08:33
0
ответов
Могу ли я создать плагин компилятора с постпроцессором для генерации кода из предыдущих собранных производных структур?
Насколько я знаю, текущее использование плагина компилятора состоит в том, чтобы определить атрибут для распознавания компилятором, а затем компилятор вызовет код, определенный и зарегистрированный в плагине. Я думаю, возможно ли создать плагин комп…
05 ноя '17 в 06:05
1
ответ
Почему `regex!` Не является оболочкой для `Regex::new`, предлагающей такую же скорость соответствия регулярному выражению?
Rust Regex crate предлагает regex! расширение синтаксиса, которое позволяет компилировать регулярное выражение в течение стандартного времени компиляции. Это хорошо двумя способами: нам не нужно делать эту работу во время выполнения (лучшая произво…
06 янв '17 в 10:40
1
ответ
Запуск плагинов компилятора на стабильной
То, что я пытаюсь сделать, требует компилятора плагинов, потому что мне нужны отчеты об ошибках во время компиляции, однако я бы хотел, чтобы он работал на стабильной Rust, а не только по ночам. Есть ли способ запустить плагины компилятора на стабил…
17 сен '15 в 09:37
1
ответ
Как изменить все элементы ящика в плагине компилятора?
Я пытаюсь создать расширение синтаксиса, которое расширяет атрибут в вызовах. До: #[flame] fn flamed() { .. } После: fn flamed() { flame::start_guard("flamed"); .. } Это уже работает. Тем не менее, я также хотел бы, чтобы это работало, если у меня е…
11 май '16 в 22:32
1
ответ
В чем разница между макросом и плагином компилятора?
Что может сделать макрос, что плагин компилятора не может, и наоборот? Под "не могу" я подразумеваю, что невозможно достичь той же цели, а не то, что ее можно достичь другим способом. Например, макрос может impl некоторая черта для структуры, плагин…
17 сен '16 в 18:00
1
ответ
Документирование предметов не видны
Я заметил, что плагины компилятора часто предоставляют макросы, которые в документации даже не упоминаются. Они зарегистрированы и созданы программно, а не определены в синтаксисе, который распознает rustdoc. Естественно, никакая документация не мож…
18 янв '16 в 00:59
1
ответ
Не могу скомпилировать простую программу ржавчины
Сегодня я решил выучить и начать программировать на ржавчине, так как это очень многообещающий язык. Тем не менее, я попытался скомпилировать и запустить простую программу Hello world в ржавчине, но по какой-то причине я получаю эту ошибку. Может кт…
11 ноя '18 в 21:37
0
ответов
Как правильно создать Span при вставке нового поля с плагином компилятора Rust?
Я хочу, чтобы плагин компилятора аннотировал структуру некоторой информацией. Например, исходная структура имеет только одно поле: struct X { x: i32 } И я хочу добавить еще одно поле: struct X { x: i32, y: MARKTYPE } Когда я изучил плагины компилято…
02 фев '17 в 00:30
0
ответов
Есть ли способ внедрить вызов пользовательской функции до и после каждого вызова функции в Rust?
Как мы можем сказать компилятору Rust встроить специальную функцию до и после ввода функции? Я пытаюсь реализовать метод отслеживания вызовов функций и, возможно, использовать этот метод для отслеживания использования заимствованных ссылок (почти ка…
07 авг '19 в 08:31
1
ответ
Как использовать флаг gcc в rustc
Я пытаюсь запустить программу Rust на арке powerpc. Когда я создаю свой код в C, я использую флаг -mlongcall. Я пытаюсь понять, как использовать флаг "-mlongcall" в моей сборке ржавчины. В общем, было бы неплохо узнать, могу ли я использовать флаги,…
12 окт '19 в 20:17
0
ответов
после изобретения микропроцессоров, почему мы все не сделали шестнадцатеричный по умолчанию без системы
Как мы знаем, шестнадцатеричное число намного эффективнее десятичного основания. не следует использовать Thumb только для биометрической подписи или счетчика, а пальцы - как счетные, так что 8+8=10=4X4 . не надо ли нам создать ветку ржавчины rust810…
28 ноя '20 в 11:32
1
ответ
Есть ли согласованный контекст компиляции внутри функции proc_macro_attribute?
Вот пример: static COUNT: AtomicUsize = AtomicUsize::new(0); #[proc_macro_attribute] pub fn count_usages(_attr: TokenStream, item: TokenStream) -> TokenStream { let c = COUNT.fetch_add(1, Ordering::AcqRel); println!("Do stuff with c: {}", c); ite…
10 июл '21 в 19:58
0
ответов
Как убрать безопасные операции в небезопасном блоке?
У меня вопрос, как получить наиболее точный небезопасный блок в Rust. В настоящее время Rust позволяет выполнять безопасные операции внутри небезопасного блока. Например, следующий код взят из библиотеки rust stdlib Vec: pub fn push(&mut self, v…
26 авг '21 в 23:15
0
ответов
Почему rustc моделирует AST и HIR, используя два разных представления в памяти?
Рассмотрим эти 2 реализации ExprKind в rustc: В коде AST используются упакованные типы с широким использованием векторов. Код HIR использует заимствованные типы с массивами. Я предполагаю, что они используют арену для распределения. Что движет этими…
22 дек '21 в 02:31
0
ответов
Ошибка установки routersploit помогите пожалуйста
Что я сделал: После успешной установки всех запросов я получил сообщение об ошибке: Не знаю правильную цель ржавчины для типа системы aarch64-unknown-linux-android. Установите переменную среды CARGO_BUILD_TARGET. Так же в ошибках было написано, что …
30 май '22 в 13:58