【发布时间】:2019-09-11 03:16:13
【问题描述】:
我有一个结构Game,我希望能够构建一个对象,但可以在编译时删除功能,以优化内存或处理器周期。
struct Game {
history: Vec<SomeType>,
}
impl Game {
fn new() {}
fn new_opti() {}
}
例如,在这种结构中,优化后的版本将没有历史记录。在这里,我用Option<Vec<SomeType>> 替换了history,并在优化版本中放置了None,并更改了依赖于历史记录的方法的行为,并禁用了一些方法。
我认为这是一种 hacky 方式,但有什么更好的方式呢?不需要只保留一个结构。
【问题讨论】:
-
“更好的方法”——在哪方面?你能告诉我们更多关于你的要求吗? IE。结构
Game的大小重要吗?速度是一个问题吗?或者如果每次访问history,我们先检查它是否是None? -
优化的第一条规则是永远不要猜测要优化什么。 (在大多数情况下,您的猜测将完全错误。)构建您的东西,对其进行分析,然后根据您的测量结果找出 1. 如果您需要优化任何东西, 2. 如果您这样做,您到底有什么优化,3.如果你发现你需要优化什么,用条件编译解决它是否有意义(这是你刚刚描述的行为)。
-
您是在寻找编译时选项还是运行时选项?
-
Option<Vec<T>>占用与Vec<T>(What is the overhead of Rust's Option type?) 相同的空间,并且很少看到它,因为通常您不需要区分空的Vec和@ 987654334@ 不存在。 -
@LukasKalbertodt 一种更好的方法,例如 softwareengineering.stackexchange.com/questions/356262/…,他们提出了策略模式。
标签: rust