diesel - Rust 的安全、可扩展 ORM 与查询构建器
Diesel 是一个用 Rust 编写的 ORM 和查询构建器,主要维护者是 Georg Semmler(weiznich)。它定位为安全、可扩展的数据库访问层,用来在 Rust 中组织数据访问并构建查询。
配套项目有两个。diesel_async 提供 Diesel 的异步连接实现;diesel-oci 由 GiGainfosystems 维护,是面向 Oracle SQL 的 Diesel 后端。
diesel 仓库页面当前显示 103 个 issue 和 63 个 pull request。材料里的 issue 与 discussion 页面没有给出具体条目。
https://diesel.rs/news/2_4_0_release
Langfuse AI Gateway - 用 Rust 实现的独立供应商 API 网关
Langfuse 仓库中的 ai-gateway 是一个独立运行的 Rust 网关,用来接入供应商的原生 API,并分成 /openai/v1 与 /anthropic/v1 两个命名空间。前者提供 /responses、/responses/compact、/chat/completions、/decisions、/embeddings 以及模型列表;后者提供 /messages、/messages/count_tokens 和模型列表。Web 把网关密钥解析为对应 API 格式下的可信供应商连接,再由 Rust 侧转发请求。
转发时保持供应商的原生 JSON 或 SSE,不改写返回字节;只有流式 Chat Completions 会额外要求带上 usage。Responses、compact、Chat Completions、Decisions、Embeddings 和 Messages 会记为 generation。模型列表只是供应商目录的 GET 代理,token 计数直接返回原生结果,二者都不作为 generation 采集。有界采集层记录请求和响应中的事实,并在 debug 级别记下采集是否完整。每条已完成的 generation 通过 OTLP 上传为 Langfuse generation,并按项目批量发送。
构建和测试不依赖真实的 Web、数据库或供应商凭证。rust-toolchain.toml 固定 Rust 1.98.0,并自动启用 Clippy 和 rustfmt。在仓库根目录执行 pnpm dev 会随其他开发服务一起启动网关,从 8080 起占用第一个可用端口;也可以用 pnpm dev --filter=ai-gateway 只跑网关,或在 ai-gateway/ 下用 cargo run --locked 启动一次。未配置 Web URL 时,存活检查可用,就绪检查和推理请求返回 503;配好 Web URL 和共享的 service key 后才会启用推理。
https://github.com/langfuse/langfuse/tree/main/ai-gateway
Rust 1.100 - 稳定 never 类型 !
Rust 1.100 已经发布。这一版的主要变化是 never 类型正式稳定。该类型写作 !,用来描述不会返回值的发散计算;把它用在不会返回的函数上(如无限循环或进程退出)后,编译器会把后续代码视为不可达,从而改进静态分析。这一特性前后酝酿了十年,其间有五次稳定化尝试没有成功。
同一版本还稳定了 Allocator API 的核心部分,便于在有特殊需求的环境里控制内存。Cargo 可以报告未使用的依赖,用来帮助清理项目;编译期间的缓存冲突也有所减少。另外,min-publish-age 会拦住刚发布的恶意包。
https://www.reddit.com/r/rust/comments/1xryklf/we_designed_rust_to_fix_40_years_of_c_tech_debt/
csvidx - 为超大 CSV 文件建立不改动原文件的二级索引
csvidx 是一个 Rust 工具,用来在超大 CSV 上按键查行:原文件保持不动,既不导入,也不再复制一份。旁边的 file.csv.idx 是按哈希排序的 (xxh3(key), row_offset) 扁平数组;查找时对 mmap 的索引做二分,再只读取命中的行。
csvidx build 用 --key 指定列名或从 0 开始的列号,--mem-limit-mib 限制排序内存并把超出部分溢写到磁盘,--threads 控制扫描和排序(0 为全部核心,1 为顺序执行)。get 按键返回文件中的对应行,--count 统计每个键的行数。CSV 被追加后,update 把新行写到格式相同、自带 base_offset 的 .idx.tail,主索引不变,查询同时查看主索引和 tail;compact 再把 tail 顺序合并进主索引,且不再解析 CSV。verify 对照一次完整重建检查索引,info 查看索引头和是否过期,bench 测量进程内查找延迟。可通过 cargo install csvidx 安装;PyO3 绑定为 pip install csvidx,idx.get(key) 返回 DataFrame,调用时释放 GIL。
受限内存下的构建按上限填满缓冲、排序并写成 run,再做 k-way 归并,run 超过 128 个时先做中间归并。一组对照里,64 MiB 限制约 21–25 秒、匿名 RSS 峰值约 65 MiB、磁盘上 24 个 run;8192 MiB(全部在内存)约 12–19 秒、峰值约 1.5 GiB、没有 run,两边索引的 sha256 相同。约 65 MiB 的下限来自归并读缓冲,而不是该参数本身;限制约为索引大小的 1/25 时,耗时大约变为两倍。并行扫描不能只靠块内换行判断记录结束,因为引号中的换行不是记录边界,引号状态还依赖更早的内容。除第一块外,每块先假定第一个 \n 结束一条记录并并行扫描,再用前一块真正停止的位置拼接;猜错则顺序重扫(repair)。因此并行结果与顺序构建逐字节一致。fuzz 在随机输入上做了 2100 次构建,迫使 repair 超过 500 次并与顺序结果对比;正常的 1 亿行文件上,268 个块的 repair 次数为 0。
对 1.5 GiB 索引做二分大约会碰到 20 个分散的 4 KiB 页,而每次查找形态相同,只需每页的第一个哈希即可跳过该页,因此没有采用原先考虑的静态 B+ 树。.idx.fence 为每个 4 KiB 页保存一个 u64,1 亿行大约 3 MiB:先二分 fence,再只读一个索引页。常驻服务的冷查询从 580 µs 降到 296 µs,磁盘读取从 6.4 次降到 1.0 次;fence 头错误或文件缺失时退回普通二分,不会因此给出错误结果。在 1 亿行、4.18 GiB 的文件上,点查询约为热缓存 1.7 ms、冷缓存 3.1 ms;同样的查找,grep 约 3.7 s,DuckDB 和 pandas 约 12–21 s。
https://github.com/csvidx/csvidx
https://www.reddit.com/r/rust/comments/1xvnz88/i_built_a_secondary_index_for_huge_csv_files_in/
This Week in Rust - 第 677 期社区与项目进展
This Week in Rust 第 677 期(2026 年 11 月 11 日)汇总了这一周 Rust 社区和官方项目的进展。官方公布了 Google Summer of Code 2026 的结果;嵌入式通讯 The Embedded Rustacean 更新到第 84 期。
社区文章涉及供应链、隔离运行、分布式系统和语言实践。其中讨论了用扩展标准库加强 Rust 供应链安全,用 Hyperlight 在 hypervisor 隔离的 micro-VM 中运行 Linux 应用,以及 Apache Iggy 迁移到由 Viewstamped Replication 支持的集群(系列第三篇)。其他内容包括有意破坏一个 Rust actor 集群后的经验、在生产环境捕获 panic、ScopeDB 不使用云厂商 SDK 而通过 Apache OpenDAL 访问对象存储,以及 Jon Seager 谈如何大规模把 Rust 引入 Ubuntu。工具和语言方面还有:在 CI 中发现性能回退、Bryan Cantrill 在 Rust NYC 关于 LLM 时代 Rust 的演讲、对 GPUI 的批评、标准库中的内存安全问题、声明宏的组织与作用域、RSPHP 的绑定、Rust 与 C++ 的指针来源(pointer provenance)对比、Tokio channel 与 poisoned lock、生命周期;另有一篇以潜入 Rust Foundation 秘密会议为题的记述。
本周 crate 是 iddqd,一个键从值中借用的 map 库,由 Miro 推荐。Rust、Cargo、Rustup 和语言 RFC 本周都没有发出 call for testing。正在征集贡献的任务来自 Klicky(音频归一化测试中的静音和有符号采样边界)、Octomind(工作流步骤 parallel = "true" 缺少 role、日程接受 when="13am" 并在 13:00 触发、配置时把带前后空格的 API key 存下来)、Umbera(pdf_strip_metadata 的 fuzz target,以及 ML-KEM-1024 的 NIST ACVP 已知答案测试)、sysknife(publish-mcp.yml 运行未固定版本且带 id-token: write 的 mcp-publisher、MCP 计划与执行结果未标明来源主机、测试脚本使用的是 PATH 上的 sysknife 而非刚构建的二进制)和 Elpis(把 DeepSeek、Mistral 或 Groq 作为内置提供方,并在 AUR 上发布和维护 elpis-bin)。
Rust 项目上周合并了 659 个 pull request。编译器改动包括:指向 FnMut bound 时补充外围 item 的上下文;新增 let_underscore_drop_guard lint;不再对无操作的 &T → &T reborrow 发诊断;对带 diverging callee 的 become 不再发出 unreachable_code;让 inline 属性作用于 async fn 生成的 poll;改进 next solver 的 unsize coercion 诊断;reborrow 允许多个生命周期;恢复 QueryTypeOp 的快速路径;在没有新增时复用 CanonicalVarKinds。
https://this-week-in-rust.org/blog/2026/11/11/this-week-in-rust-677/
--
From 日报小组 Mike
社区学习交流平台订阅:
友情赞助:
评论区
写评论还没有评论