Syn 3.0: крупное обновление парсера Rust
Спустя три года после Syn 2.0 библиотека обновила синтаксическое дерево под новые и экспериментальные возможности Rust: generator blocks,
Изменения
*
* добавлены структуры
*
* атрибуты сохраняются во всех выражениях;
* изменены API для паттернов, generics, указателей и
https://github.com/dtolnay/syn/releases/tag/3.0.0
Спустя три года после Syn 2.0 библиотека обновила синтаксическое дерево под новые и экспериментальные возможности Rust: generator blocks,
for await, function delegation, pattern types, function contracts, super let, postfix keywords и другие конструкции.Изменения
*
Type::BareFn переименован в Type::FnPtr;* добавлены структуры
*Modifiers для будущего расширения синтаксиса;*
unsafe теперь представлен enum Safety;* атрибуты сохраняются во всех выражениях;
* изменены API для паттернов, generics, указателей и
Punctuated.https://github.com/dtolnay/syn/releases/tag/3.0.0
👍13🔥5❤4
«Никогда не используйте unsafe в Rust»
Есть решение проще: писать C прямо внутри Rust, ведь там unsafe включён по умолчанию.
Библиотека c_macro позволяет вставлять C-код через макрос c!, компилировать его вместе с проектом и вызывать как обычную функцию:
В примере массив создаётся в Rust, указатель передаётся в C, а сумма возвращается обратно.
Без unsafe-блока в коде. Технически безопаснее от этого, конечно, не стало.
Есть решение проще: писать C прямо внутри Rust, ведь там unsafe включён по умолчанию.
Библиотека c_macro позволяет вставлять C-код через макрос c!, компилировать его вместе с проектом и вызывать как обычную функцию:
let sum = sum_array(array.as_ptr() as *mut c_int, array.len() as c_int);
В примере массив создаётся в Rust, указатель передаётся в C, а сумма возвращается обратно.
Без unsafe-блока в коде. Технически безопаснее от этого, конечно, не стало.
💊35😁17🔥5❤3🥰1🙈1