Является ли сериализация bincode для enum без данных в вариантах такой же оптимизированной, как обращение к значению stati c? - PullRequest
4 голосов
/ 13 февраля 2020

Я иногда использую serde и bincode таким образом:

use serde::{Deserialize, Serialize};
use bincode;

#[derive(Serialize, Deserialize)]
pub enum PlainDryEnum {
    FirstVariant,
    Second,
    Third,
}

fn example() {
    let message = bincode::serialize(&PlainDryEnum::Second)
        .expect("Could not serialize variant.");
}

Всякий раз, когда я сериализую один из этих вариантов, я думаю

эй .. фактическое содержание message статически известно, может быть, я должен сделать это const или хотя бы lazy_static, поэтому я бы не стал полагаться на бесполезную динамику c вызов serialize.

Тогда я думаю,

хорошо ... Я думаю, я мог бы сделать то же самое для каждого варианта в PlainDryEnum. Попробуйте это с помощью макроса.

Наконец-то я думаю

подождите минутку .. разве это не работа для компилятора?

Стоит ли беспокоиться об этом уровне оптимизации? Оптимизирует ли компилятор вызов serialize в этом случае и просто заменяет (по духу) этот код константой?

let message = &1;

1 Ответ

1 голос
/ 13 февраля 2020

bincode::serialize не является const fn , поэтому не может быть гарантированно выполнено во время компиляции. Это означает, что нет никакой гарантии, что компилятор заменит вызов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...