[2023.09.14]: Rust的条件编译

关于条件编译,我的记忆是10多年前,写C#的时代了,最近10年写Python和Javascript代码,虽然Javascript中也可以通过插件实现条件编译的效果,但是用起来太憋足了。当我在Yew的SSR开发模式中看到条件编译的配置时,倍感亲切。

我记忆深刻的条件编译,是当时写的一段C#代码,给一个函数加上了Debug模式的条件编译,然后导致了生产环境的一个报错。具体细节忘记了,现在想起来有点不可思议。

rust 复制代码
#[cfg(feature = "ssr")]
async fn post_data(data: &EditorData) -> String {
    ...
}

在上面的配置中,只有当Cargo.toml中的features中包含了"ssr",post_data这个函数才会被编译进来。另外,运行cargo clippy命令时,也需要加上--features=ssr,否则会报找不到post_data这个函数的错误。完整命令如下

bash 复制代码
cargo clippy --features=ssr

关于features,我在之前的2023.09.11: Yew的SSR中的Cargo.toml配置里面有提到。

Rust的条件编译显然比我10多年前了解的C#里面的条件编译要丰富,当然估计现在C#里面的条件编译变得很强了。大家可以参考官方文档

我在这里只调我感兴趣的一个例子来说一下,这也是来源于我10年前的痛苦回忆。

rust 复制代码
// This function is only included when either foo or bar is defined
#[cfg(any(foo, bar))]
fn needs_foo_or_bar() {
  // ...
}

今天的分享就到这里,关于条件编译的问题,大家可以在评论区留言讨论。

相关推荐
独孤留白1 小时前
从C到Rust:基本类型 C 的隐式不确定 vs Rust 的显式确定
rust
清晨很温柔啊1 小时前
# 用 Rust 手搓 AI 自演化主板:当 18 个异构器官长出 C++ 骨骼
rust
星栈1 天前
我用 Rust + Dioxus 做了个全栈跨平台笔记应用:第一版先把列表和详情跑通
前端·rust·前端框架
doiito1 天前
【Agent Harness】Gliding Horse 工具结果压缩体系:如何用“指针”驯服上下文膨胀
ai·rust·架构设计·系统设计·ai agent
星栈2 天前
Dioxus 接数据库最容易写歪的 3 个地方:sqlx + SQLite 怎么接才顺
前端·rust·前端框架
独孤留白2 天前
从C到Rust:移动语义、引用传递与生命周期——一次讲清楚
rust
星栈2 天前
Dioxus 表单处理:从输入、校验到文件上传,一条链路讲透
前端·rust·前端框架
doiito2 天前
【Agent Harness】Gliding Horse 上下文动态感知与智能压缩:让 Agent 真正“听得进”每一句话
ai·rust·架构设计·系统设计·ai agent
Bigger2 天前
Tauri (26)——托盘图标总对不上系统主题?一行 Template Image 搞定
前端·rust·app