enums - 变体中没有数据的枚举的二进制代码序列化是否与引用静态值一样优化?

标签 enums rust static compiler-optimization serde

我有时使用 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.");
}

每当我序列化这些变体之一时,我想

hey.. the actual content of message is statically known, maybe I should make it const or at least lazy_static, so I would not rely on a useless dynamic call to serialize.



然后我想

well.. I guess I could also do the same for every variant in PlainDryEnum. Try it with a macro.



最后我想

wait a minute.. is this not a job for the compiler?



我应该担心这种级别的优化吗?编译器是否优化了对 serialize 的调用?在这种情况下,只需用常量替换(在精神上)这段代码?

let message = &1;

最佳答案

bincode::serialize 不是 const fn所以不能保证在编译时执行。这意味着不能保证编译器会替换调用。

关于enums - 变体中没有数据的枚举的二进制代码序列化是否与引用静态值一样优化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60198198/

相关文章:

arrays - 为什么在具有 240 个或更多元素的数组上循环时会产生很大的性能影响?

C++全局数组分配

node.js - 如何将静态文件动态服务?

javascript - 如何在导入的 typescript 类上调用静态方法?

swift - 创建枚举实例

c - 在 C 中将枚举映射到字符串的好方法

ruby-on-rails - Rails i18n - 如何翻译模型的枚举

rust - Rust 如何从 From::<>::from() 推断结果类型?

c# - 就地清除的枚举扩展方法

rust - 找不到指定的过程。 (操作系统错误 127) - #![plu​​gin(rocket_codegen)]