Size: a a a

2020 November 13

K

Kitsu in Rust Beginners
Adatan
Макросы и атрибуты - разве это одно и то же?
атрибуты это и есть макросы, просто процедурные
источник

r

red75prime in Rust Beginners
Adatan
Макросы и атрибуты - разве это одно и то же?
Атрибуты - один из видов процедурных макросов
источник

A

Adatan in Rust Beginners
Не совсем понял, то есть и атрибуты и macro_rules! - это макросы, но разные макросы, так?
источник

A

Adatan in Rust Beginners
Если атрибут - это процедурный макрос, то macro_rules - это?
источник

K

Kitsu in Rust Beginners
Adatan
Не совсем понял, то есть и атрибуты и macro_rules! - это макросы, но разные макросы, так?
да
источник

K

Kitsu in Rust Beginners
Adatan
Если атрибут - это процедурный макрос, то macro_rules - это?
декларативный макрос
источник

A

Adatan in Rust Beginners
red75prime
1. cargo install cargo-expand - cargo-expand показывает раскрытые макросы
2. https://tinkering.xyz/introduction-to-proc-macros/
3. Там всего два значения "abort" и "unwind". Abort сразу убивает программу при возникновении паники. Unwind при возникновении паники начинает разматывать стек и это можно перехватить. Если не перехватывать, то прибивается только поток в котором возникла паника. Если непонятно зачем нужно, то оставить "unwind"
Для dev, без unwind, я не смогу узнать, где ошибка?
источник

r

red75prime in Rust Beginners
Adatan
Для dev, без unwind, я не смогу узнать, где ошибка?
Да, можно получить stack trace. Переменная окружения RUST_BACKTRACE=1
источник

A

Adatan in Rust Beginners
Тогда где обычно abort применяют, кроме написания кода под голяк?
источник

А⚙

Антон ⚙️ in Rust Beginners
Adatan
Тогда где обычно abort применяют, кроме написания кода под голяк?
Там, где очень нужно сделать размер бинарника маленьким
источник

MB

Mikail Bagishov in Rust Beginners
Adatan
Тогда где обычно abort применяют, кроме написания кода под голяк?
Я слышал мнение, что наоборот abort это разумный дефолт, и ставить unwind надо только если это реально нужно
источник

A

Adatan in Rust Beginners
Ну типо да, но вот легло че-то на релизе, и ты не знаешь, что легло:((
источник

A

Adatan in Rust Beginners
Я буду ставить abort на релизе
источник

MB

Mikail Bagishov in Rust Beginners
Бэктрейс ты все равно получишь
источник

A

Adatan in Rust Beginners
Тогда что red75prime подразумевал под "перехватить unwind"?
источник

MB

Mikail Bagishov in Rust Beginners
catch_unwind, вызов деструкторов и подобное
источник

MB

Mikail Bagishov in Rust Beginners
А еще с panic = unwind неперехваченная паника убивает только паникующий поток, а panic=abort убивает процесс целиком, что по-моему более правильное поведение обычно.
источник

A

Adatan in Rust Beginners
Mikail Bagishov
А еще с panic = unwind неперехваченная паника убивает только паникующий поток, а panic=abort убивает процесс целиком, что по-моему более правильное поведение обычно.
Можно пример с реальным кейсом? Не совсем понимаю...
источник

r

red75prime in Rust Beginners
Adatan
Можно пример с реальным кейсом? Не совсем понимаю...
thread::spawn(|| panic!()); С абортом убьёт процесс. С unwind только поток
источник

A

Adatan in Rust Beginners
Во, теперь понял, спасибо!
источник