Size: a a a

2020 October 25

PP

Pavel Perestoronin in Rust Beginners
Emmanuel Goldstein
В моём [вероятно неверном] микробенчмарке доступ к статику получился даже медленнее, чем к бокседу
а, возможно, это связано с проверкой индексов в случае со статической переменной..
источник

ИЛ

Иван Лещенко... in Rust Beginners
Можете помочь с лайфтаймами? Есть вот такой enum, где лайфтайм задействован только в одном из вариантов, и есть метод storage.push(event), который принимает на вход строго Event<'static>. Можно ли как то доказать компилятору, что благодаря match event я гарантирую, что в enum будут только те значения, для которых валиден 'static?
источник

ИЛ

Иван Лещенко... in Rust Beginners
источник

ИЛ

Иван Лещенко... in Rust Beginners
Иван Лещенко
Можете помочь с лайфтаймами? Есть вот такой enum, где лайфтайм задействован только в одном из вариантов, и есть метод storage.push(event), который принимает на вход строго Event<'static>. Можно ли как то доказать компилятору, что благодаря match event я гарантирую, что в enum будут только те значения, для которых валиден 'static?
Пока-что вышло доказать только таким вариантом, но выглядит так себе
источник

MB

Mikail Bagishov in Rust Beginners
Dollar Føølish
Единственный момент статики внутри функции в крестах инициализируются под мутексом
В расте статик инициализируется где-то при компиляции
источник

MB

Mikail Bagishov in Rust Beginners
Ну в том плане, что в бинарнике уже лежит инициализированное значение, и в рантайме конструктор не вызывается
источник

DF

Dollar Føølish in Rust Beginners
ну да уже не могу отвыкнуть от плюсового сахарка видимо )
источник

АГ

Алексей Герасимов... in Rust Beginners
Иван Лещенко
Пока-что вышло доказать только таким вариантом, но выглядит так себе
match event {
 event::Push(…) => …,
 a => a
}

так не канает?
источник

MB

Mikail Bagishov in Rust Beginners
Dollar Føølish
ну да уже не могу отвыкнуть от плюсового сахарка видимо )
Там такой себе сахар.
Ядовитый.
источник

ИЛ

Иван Лещенко... in Rust Beginners
Алексей Герасимов
match event {
 event::Push(…) => …,
 a => a
}

так не канает?
Не-а
источник

АГ

Алексей Герасимов... in Rust Beginners
а, ну да, мы же тут то же самое значение возвращаем, а не новое собираем
источник

ИЛ

Иван Лещенко... in Rust Beginners
Иван Лещенко
Можете помочь с лайфтаймами? Есть вот такой enum, где лайфтайм задействован только в одном из вариантов, и есть метод storage.push(event), который принимает на вход строго Event<'static>. Можно ли как то доказать компилятору, что благодаря match event я гарантирую, что в enum будут только те значения, для которых валиден 'static?
Попробовал составить минимальный пример - https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=31d95b48e502928a4e77707db1a7dbbf
источник

EG

Emmanuel Goldstein in Rust Beginners
Я боюсь, компилятор недостаточно умный для этого
источник

ИЛ

Иван Лещенко... in Rust Beginners
Emmanuel Goldstein
Я боюсь, компилятор недостаточно умный для этого
:(
источник

EG

Emmanuel Goldstein in Rust Beginners
Ну, всегда можно сделать unsafe { std::mem::transmute(val) }, но лучше не надо
источник

ИЛ

Иван Лещенко... in Rust Beginners
Emmanuel Goldstein
Ну, всегда можно сделать unsafe { std::mem::transmute(val) }, но лучше не надо
Тогда будет ложная компиляция если я вдруг добавлю ещё какое-то значение с 'a и забуду поменять в match
источник

EG

Emmanuel Goldstein in Rust Beginners
Иван Лещенко
Тогда будет ложная компиляция если я вдруг добавлю ещё какое-то значение с 'a и забуду поменять в match
Да, именно поэтому и не надо
источник

ИЛ

Иван Лещенко... in Rust Beginners
Иван Лещенко
Пока-что вышло доказать только таким вариантом, но выглядит так себе
Ладно, думаю здесь такая каша будет простительна
источник

ИЛ

Иван Лещенко... in Rust Beginners
Спасибо за ответ!
источник

EG

Emmanuel Goldstein in Rust Beginners
Иван Лещенко
Ладно, думаю здесь такая каша будет простительна
Можно сделать вложенный энум: внешний делит варианты на «с лайфтаймом» и «без лайфтайма», а во внутренних уже сами варианты
источник