comptime? runtime? launchtime!
考虑参数的修改和加载:
time | 例子 | 修改数值代价 | 修改参数名代价 | 运行代价 |
---|---|---|---|---|
comptime 编译时常量 | constexpr | 重新编译 + 运行 | 重新编译 + 运行 | 无 |
launch time / init time 参数文件 | ros2 param yaml file | 重新运行 | 重新编译 + 运行 | 启动时几毫秒 |
runtime 热加载 | ros2 param set | 无 | 重新编译 + 运行 | 启动时几毫秒,每次查询几十纳秒到几微秒 |
参数表如果是一个 string => value 的 map,那么查询较长的名字比较耗费时间和空间。这其实可以在 comptime 进行优化,然而 C++ / Rust 怎么实现呢?btw,宏可以实现这个编译时的抽象,但是很难保证热加载灵活性。Zig 应该很好实现编译时字符串压缩。
如果做一个跨平台 GUI,肯定要做抽象层。如果采用的是 Box
元编程可以做到以上所有事情,它本身就是 comptime 的抽象,然而基于 AST 的元编程太过底层,lsp 难以发挥作用,开发和维护成本都很高。也许 Zig 能代替元编程轻松做到代码生成,有空玩玩。
每次想到这个就为 Rust 的 comptime 能力感到遗憾。