尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

【Rust日报】用 Rust 重写的 Turso 是一个更好的 SQLite 吗?

【Rust日报】用 Rust 重写的 Turso 是一个更好的 SQLite 吗?
📅 发布时间:2026/6/17 18:33:15

采访 Glauber Costa:用 Rust 重写的 Turso 是一个更好的 SQLite 吗?

Linux 内核贡献(3:16-15:17):Glauber Costa 从 2003/2004 年开始,为 Linux 内核贡献了 10 年时间。他讲述了自己最初对开源的着迷,以及为内核做贡献所面临的挑战,包括有时严苛的社区环境。他参与了虚拟化、容器、内存管理和网络等多个方面的工作,对操作系统有了深刻的理解。

转型至创业公司和数据库(15:17-26:23):在红帽公司和 Linux 内核项目工作之后,格劳伯于 2013 年加入了一家创业公司,该公司最初专注于一个名为 OSv 的“单内核”项目。该项目最终失败,但公司转型成为一家数据库公司,名为 ScyllaDB,它是对 Apache Cassandra 的高性能重写版本。这标志着格劳伯正式进入数据库领域,并在该领域工作了近十年。

从 Scylla 的经验教训和生态系统兼容性的力量(26:23-30:11):Glauber 强调,Scylla 的成功源于其与 Cassandra 的完全兼容性,以及对现有生态系统重要性的深刻理解,而非试图取代一切。这一经验教训深刻影响了他对 Turso 的开发理念。他还探讨了积极验证市场想法并在必要时快速调整方向的重要性。

Turso 的起源及 SQLite 的局限性(30:11-37:41):Glauber 和他的联合创始人 Pekka 最初创办了一家名为 Chisel Strike 的公司,旨在将 SQLite 与 TypeScript 运行时相结合,实现边缘数据持久化。但这个想法最终失败了。之后,他们转向创建 SQLite 的一个分支,并在此基础上构建了一个名为 Turso Cloud(现更名为 Turso)的云服务。虽然这项业务取得了成功,但他们也意识到这个分支存在一些局限性。

为什么重写 SQLite 能吸引贡献者 (37:41-48:04):Turso 的核心动机在于它完全重写了 SQLite,而 SQLite 的“开源但不开放贡献”模式正是其核心动机所在 (37:41)。SQLite 的核心团队规模很小,不像 Linux 内核等项目那样开放外部贡献。Glauber 指出,这种限制阻碍了 SQLite 发展,使其无法支持多写入器等用户普遍需要的功能。尽管 Turso 仍处于 alpha 测试阶段,但其重写版本在不到一个月的时间内就获得了社区的极大关注,GitHub 上获得了 9000 个 star 和 60 位贡献者,这表明用户对可扩展的嵌入式数据库有着迫切的需求。

观看:https://youtu.be/1JHOY0zqNBY

播客:对话 Rust for Linux 维护者 Danilo Krummrich

Danilo Krummrich 是 Red Hat 的一名软件工程师,也是 Rust for Linux 项目的核心贡献者。他对 Rust for Linux 的主要贡献在于驱动程序核心架构,这是使用 Rust 编写驱动程序的基础框架。这包括为内核中的设备驱动程序提供核心抽象的 C 和 Rust 代码。Danilo 维护着多个关键的内核子系统,包括驱动程序核心、DRM(GPUVM、Rust、GPU 调度器)、NVIDIA GPU 的 GPU 驱动程序(Nova、Nouveau)、固件加载器 API,以及 PCI、DMA 和 ALLOC 的 Rust 绑定。他是 Nova GPU 驱动程序的主要开发者,该驱动程序完全基于 Rust,适用于现代 NVIDIA GPU。

将 Rust 引入 Linux 内核是开源历史上最雄心勃勃的现代化举措之一。Linux 内核拥有数十年的 C 代码和根深蒂固的开发实践,如今正向一种内存安全的语言敞开大门。这是 30 多年来首次有新的编程语言被正式采纳用于内核开发。但这条路远非一帆风顺。

在本期节目中,我们采访了 Linux 内核维护者兼 Rust for Linux 核心团队成员 Danilo Krummrich,探讨了将 Rust 集成到 Linux 内核中的开创性工作。我们重点讨论了 Nova GPU 驱动程序(基于 Rust 的 NVIDIA 显卡驱动程序 Nouveau 的继任者),以及在内核中大规模采用 Rust 所需的技术挑战和文化转变,并展望了 Rust4Linux 项目的未来。

这些挑战和经验包括:

  • 他们不得不编写自己的分配器抽象(kbox、kvec、kvbox),因为 Rust 的 alloc crate 不支持内核特定的要求,例如分配标志和 NUMA 节点。

  • 类型状态在编译时对硬件状态进行编码——在 C 语言中,你会得到一个指向设备的原始指针,你需要自行决定如何正确使用它。而在 Rust 中,设备具有类型状态(例如“Core”),这些状态只暴露在该状态下有效的函数。例如,总线回调会获取一个具有 Core 类型状态的设备,因为此时会持有全局总线锁,从而允许调用修改设备字段的函数。在这些回调之外,你无法获取到这种类型状态,因此这些函数实际上并不存在于你的设备引用中。

  • 内核中充满了自引用代码(链表、锁)。Benno Lossin 创建了 pin-init 用于原地初始化和绑定,现在它也作为用户空间 crate 提供。在内核代码中,移动元素通常是不现实的。

  • 引用计数封装了 C 语言的 kref 模式——内核结构体嵌入了一个 struct kref(一个带有释放回调的原子计数器)。Rust 的抽象使用了 AlwaysRefCounted trait 和 ARef。作为包装类型。特性边界允许你在任何引用计数内核结构上编写通用代码,而 C 端则继续执行其自身的操作。

  • 抽象才是难点,驱动程序相对容易。用 Rust 安全地封装 C 内核 API 非常困难。即使是经验丰富的内核开发者,即使他们了解 Rust,也会在这个转换层上遇到困难。但是,一旦抽象实现,驱动程序的开发就变得可行了。

收听:https://corrode.dev/podcast/s05e06-rust4linux/

讨论:https://www.reddit.com/r/rust/comments/1pk1qpz/rust_in_the_linux_kernel_type_states_custom/

教程《针对初学者的嵌入式 Rust 入门指南》

这篇文章为想要踏入嵌入式 Rust 开发领域的初学者提供了一份详尽的入门指南。作者根据自身经验,从硬件选型、前置知识到具体的学习资源提供了清晰的路线图。

1. 前置准备

  • Rust 语言基础:在开始之前,必须掌握 Rust 的所有权(ownership)、借用(borrowing)和类型系统。建议先阅读官方的Rust Book。

  • 电子学基础:需要了解电压、电流、电阻以及 LED、电阻器等基本元件的工作原理。

2. 硬件推荐作者强烈建议通过购买开发板来开始学习,而不是只看书。

  • 首选推荐:ESP32 DevKit V1

    • 理由:性价比极高,集成了 WiFi 和蓝牙,无需额外的调试探针(Debug Probe)即可轻松烧录代码,且拥有成熟的 Rust 生态支持(esp-rs)。

  • 其他选择:

    • Raspberry Pi Pico 2:适合学习基础,但若想获得流畅的调试体验,成本会因为需要购买调试探针而增加。

    • BBC micro:bit v2:虽然板载功能丰富(LED 矩阵、麦克风等),但价格较贵且连接外部传感器不够方便。

3. 学习资源与路径作者整理了多个开源书籍和教程,涵盖了从通用概念到特定硬件的学习:

  • 通用基础:

    • 《The Embedded Rust Book》:官方嵌入式 Rust 书籍,必读入门。

    • 《Embassy Book》:学习嵌入式 Rust 中现代的async(异步)编程框架。

  • 针对 ESP32:

    • 《The Rust on ESP Book》:Espressif 官方文档,介绍环境搭建和生态系统。

    • 《impl Rust for ESP32》:作者编写的开源书,通过 ESP32 实践点亮 LED、读取传感器、WiFi 控制等项目。

  • 针对 Pico 和 micro:bit:

    • 作者同样编写了对应的实战书籍《Pico Pico Book》和《impl Rust for Microbit》。

  • 进阶资源:

    • 《Rust Embedded Driver (RED) Book》:教你如何从零开始为传感器编写 Rust 驱动程序。

    • Wokwi:一个在线电路模拟器,支持在浏览器中运行嵌入式 Rust 代码,无需硬件即可练手。

讨论:在面对大型 Rust 代码库时应如何入手阅读和理解

社区给出的核心建议:

  1. 利用工具生成文档 (Top Priority)

  • **cargo doc**:这是最高频的建议。运行cargo doc --no-deps --open可以为当前项目生成本地 HTML 文档。

  • 作用:这能让你跳过具体的实现细节(函数体内部的代码),直接查看高层级的 API、结构体定义、模块关系和注释,就像阅读库的使用手册一样。

  1. 找准入口点 (Entry Points)

  • **src/main.rs**:如果是二进制程序(binary),从这里开始,看程序是如何启动和初始化的。

  • **src/lib.rs**:如果是库(library),这里通常定义了对外暴露的模块和 API。

  • 关注架构:先弄清楚项目的“骨架”。看它如何将各个模块(crates)串联起来。

  1. 阅读策略

  • **略读 (Skimming)**:不要试图一行一行读。先像看书的目录一样快速浏览所有文件和代码,建立一个模糊的整体印象(mental map),这有助于后续将细节归位。

  • 模式识别:经验丰富的开发者依靠“模式”来阅读。大型项目通常会将代码拆分为隔离的模块(有人提到了六边形架构 Hexagonal Architecture)。理解了架构模式,就能知道去哪里找具体的逻辑。

  1. 实践出真知

  • 写比读更重要:有评论指出,阅读大型代码库的能力往往来自于编写大型代码库的经验。当你自己尝试过构建复杂的系统,自然就能识别出别人代码中的常见结构和设计意图。

Reddit:https://www.reddit.com/r/rust/comments/1pkq1l0/how_do_rust_devs_read_large_codebases/

--

From 日报小组 苦瓜小仔

社区学习交流平台订阅:

  • Rustcc论坛: 支持rss

  • 微信公众号:Rust语言中文社区

相关新闻

  • 树莓派平台theHarvester开源情报收集系统部署指南
  • POCO分布式锁深度调优:如何通过智能缓存减少80%的Redis网络开销
  • MNN智能模型部署全攻略:多版本并行与动态调度实战

最新新闻

  • 收藏!小白程序员必看:AI大模型企业落地,身份权限管理是关键!
  • M68HC16 CTM定时器模块:SASM、DASM、PWMSM原理与应用详解
  • 5个必学技巧掌握Notepad--:从零到精通的实战手册
  • 2026长沙钻石回收商家推荐,专业分级估价当场打款无套路 - 名奢变现站
  • 深度解析小爱音箱音乐服务:3个专业级配置方案与架构设计
  • 力明明德升学部全维度评测:升学实力与培养体系解析 - 起跑123

日新闻

  • 2026年不锈钢卷板厂家推荐排行榜:冷轧热轧/304/201不锈钢卷板,高颜值耐腐蚀源头厂家实力精选 - 企业推荐官【官方】
  • FLUX.1-dev FP8模型实战指南:24GB以下显卡高效部署方案
  • 2026佛山长途搬家价目表:跨省跨市搬家费用完整计算指南 - 从来都是英雄出少年

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号