文章《LLDB's TypeSystems Part 2: PDB》
作者:walnut356
这篇文章是关于 LLDB 调试器中 TypeSystems 的第二部分,专注于 PDB(Program Database)的解析和实现。
PDB 是微软为 C 语言开发的闭源调试信息格式,用于 MSVC ABI 的目标文件。
文章详细描述了作者在实现 PDB 解析过程中遇到的挑战,包括缺乏文档、复杂的实现、不清晰的命名方案以及对 Rust 调试体验的改进。
作者提到了 LLVM 和 LLDB 社区对改进 Rust 调试体验的兴趣,并探讨了 TypeSystem 在 LLVM 和 LLDB 中的潜在位置。
文章还讨论了 PDB 和 CodeView 的局限性,以及如何通过 OEM 节点扩展 CodeView 来支持 Rust 的泛型类型。
此外,作者还提到了在 LLDB 中实现 PDB 解析所需的步骤,包括对现有代码的重构和新接口的设计。
阅读:https://walnut356.github.io/posts/lldbs-typesystems-pt-2/
Reddit:https://www.reddit.com/r/rust/comments/1ltwbvm/lldbs_typesystems_part_2_pdb/
Tyr:Collabora、Arm 和 Google 合作开发 Linux Rust DRM 驱动程序,用于 Arm Mali GPU
Tyr 是 Collabora 推出的一款新的 Rust 基础的 DRM 驱动,专为基于 CSF 的 Arm Mali GPU 设计。
它是首个正式加入 Rust-for-Linux 计划的咨询公司项目,表明 Collabora 对于在内核社区中推进 Rust 开发的承诺。
Tyr 是基于 C 语言编写的成熟驱动 Panthor 的移植版本,由 Collabora、Arm 和 Google 联合开发。
其目标是实现与 Panthor 相同的用户空间 API,以便作为 PanVK Vulkan 驱动的替代品。
尽管 Panthor 目前仍被广泛使用,但 Tyr 预计在未来几年内逐步完善。
目前,Tyr 的上游提交版本已能够在 RK3588 芯片上启动 GPU 并探测设备,未来将通过一系列博客文章详细介绍其内部机制。
阅读:https://www.collabora.com/news-and-blog/news-and-events/introducing-tyr-a-new-rust-drm-driver.html
文章《构建你自己的 SQLite:溢出页面》
作者:sylver
这篇文章是“Build your own SQLite”系列的第六部分,主要探讨了SQLite中溢出页面(Overflow Pages)的机制。
当数据行的大小超过单个页面(通常是4096字节)时,SQLite会将超出部分的数据存储在多个溢出页面中,这些页面通过链表结构连接。
文章详细介绍了如何计算本地有效载荷大小(Local Payload Size),并展示了如何在Rust语言中实现这一机制。
此外,作者还提供了测试数据库的创建方法,并实现了从溢出页面中读取数据的功能。
最后,文章通过修改Cursor
结构,实现了在需要时动态加载溢出数据的逻辑,从而支持读取大型TEXT
和BLOB
字段。
阅读:https://blog.sylver.dev/build-your-own-sqlite-part-6-overflow-pages
Reddit:https://www.reddit.com/r/rust/comments/1lu8yu5/build_your_own_sqlite_in_rust_part_6_overflow/
文章《使用 CGP 在 Rust 中编程可扩展数据类型:模块化应用程序构建和可扩展构建器》
作者:Soares Chen
这篇文章介绍了 CGP(Context-Generic Programming)v0.4.2 版本,重点探讨了如何在 Rust 中使用 CGP 实现可扩展的数据类型,特别是通过模块化的应用构建和可扩展的构建器模式。
CGP 引入了对可扩展记录和变体的全面支持,允许开发者编写操作任何包含特定字段的结构体或任何包含特定变体的枚举的代码,而无需了解其完整定义。
文章通过构建一个包含 SQLite 数据库连接、HTTP 客户端和 AI 客户端的应用上下文示例,展示了如何使用 CGP 的模块化构建器逐步构建复杂的应用程序上下文。
这种方法不仅简化了配置管理,还促进了代码重用,并为 Rust 中的插件式架构提供了可能。
阅读:https://contextgeneric.dev/blog/extensible-datatypes-part-1/
仓库:https://github.com/contextgeneric/cgp
文章《流媒体传输的复杂性》
这篇文章探讨了媒体流媒体传输的复杂性,并提出了几种解决方案。
文章首先介绍了音频程序的基本架构,包括音频源、解码线程、环形缓冲区、音频线程和音频输出设备。
随后,作者提出了三种处理流媒体的方法:
- 首先是“先下载再播放”,这种方法简单但效率低下;
- 其次是“即时流媒体”,通过 HTTP 范围请求实现边下载边播放;
- 最后是“提前流媒体”,结合了前两种方法的优点,通过下载、解码和缓存数据来实现高效播放。
文章还讨论了直播流和有限存储的问题,并提出了使用环形缓冲区的解决方案。
最后,作者指出这些方法各有优缺点,并提供了自己创建的 Rust 库 stream-download-rs 来实现这些功能。
阅读:https://www.aschey.tech/blog/streaming
仓库:https://github.com/aschey/stream-download-rs
Reddit:https://www.reddit.com/r/rust/comments/1ltxd0u/complexities_of_media_streaming/
文章《使用 Rust 快速实现机器学习原型》
作者:Lelouch Lamperouge
这篇文章探讨了在 Rust 中使用 Linfa 库进行快速机器学习原型开发的过程。
作者通过创建一个简单的线性回归模型,展示了如何在 Rust 中实现机器学习任务。
文章首先介绍了 Linfa 库的优势,包括其安全性和易用性,然后通过代码示例详细说明了如何生成随机数据集、训练模型以及进行预测。
最终,作者展示了模型的预测结果,并与真实值进行了对比,证明了模型的有效性。
作者认为,Linfa 是 scikit-learn 的一个很好的替代品,尤其是在 Rust 已经被广泛使用的场景中。
阅读:https://ryuru.com/rapid-machine-learning-prototyping-in-rust/
Learn-wgpu:学习 gfx-rs / WebGPU API 的教程项目
WebGPU 是一个由 GPU for the Web 社区组发布的规范,旨在通过模仿 Vulkan API,以安全可靠的方式让网页代码访问 GPU 功能,并将其翻译为宿主硬件使用的 API(如 DirectX、Metal 或 Vulkan)。
该项目使用 Rust 编写,但同时也提供了 C 绑定,以便在其他语言中使用。文档中提到,wgpu 仍在开发中,因此部分内容可能会发生变化。
教程假设读者对 Rust 有一定的了解,并且熟悉 Cargo。此外,该项目的中文版增加了与 App 集成和调试的章节。
仓库:https://github.com/sotrh/learn-wgpu
OPFS: Origin Private File System API 库
源私有文件系统 (OPFS) 是作为文件系统 API 的一部分提供的存储端点,它对页面源是私有的,并且不像常规文件系统那样对用户可见。它提供对一种特殊文件的访问,这种文件针对性能进行了高度优化,并提供对其内容的就地写入访问权限。
由于 Apple 终于完成了对 API 的支持,因此各自平台上的 Developer Beta 2 版 iOS 和 MacOS 用户现在可以充分使用此 API。
使用场景:比如你正在用 Dioxsus 编写一个 Web 应用,那么可能使用 opfs
库。这个库存在的主要原因是因为在 Rust 中使用 OPFS 非常痛苦。
此包提供了文件系统操作的 API,可根据目标平台自动使用适当的实现:
- Web(WASM) :使用 Origin 私有文件系统(OPFS)API
- 原生平台 :使用 tokio::fs
- 提供了内存文件系统用于测试(或当不需要持久性时)
仓库:https://github.com/anchpop/opfs
Reddit:https://www.reddit.com/r/rust/comments/1lu5k1f/the_origin_private_file_system_now_works_on_safari/
Whispering:使用 Tauri 构建的语音转录桌面程序
作者用 Tauri 和 Svelte 5 开发了一个转录应用。
您可以从多家转录服务提供商中选择(我最喜欢的是 Groq,每小时 0.02 美元)。该应用支持语音激活模式,无需动手即可转录。您可以设置 AI 转换功能,自动格式化文本、修改语法或翻译语言。
所有内容都存储在您的设备本地。您的音频直接从您的设备传输到您选择的 API 提供商。无需中间服务器,无需数据收集,无需追踪。
开发体验:
Tauri 最让我印象深刻的是:最终的软件包在 macOS 上只有 22MB,而且可以立即启动。CPU 空闲状态几乎为零。相比之下,Electron 应用仅仅为了显示“Hello World”就需要 150MB 以上的启动空间。我的机器上的 Slack 超过 490MB,这简直太疯狂了。
Tauri 的魅力在于,许多常用函数(例如 fs 、 fetch 、 shell )都用 Rust 实现,并以 JavaScript API 的形式对外公开。它使用起来几乎和 Node 很像——你在服务器端 Node 中依赖的函数在 Rust 中都有对应的函数,可以直接在 JavaScript 中调用。这为你提供了原生性能,无需编写和注册你自己的 Tauri 命令,也无需在每个基本操作中都从前端调用它们。但我仍然需要自己编写相当多的 Rust 代码来实现平台特定的功能,这真的很有趣。在 TypeScript 和 Rust 之间搭建桥梁是一个有趣的挑战。
Tauri 的进程间通信 (IPC) 速度极快——Rust 后端处理类似服务器端的操作,而前端保持静态和轻量级。我们通过在构建时使用依赖注入,实现了桌面端和 Web 端之间 97% 的代码共享。
仓库:https://github.com/braden-w/whispering
演示:https://www.youtube.com/watch?v=1jYgBMrfVZs
Tv:跨平台、快速且可扩展的终端模糊查找器 - 发布 0.12.0
更新内容:
- 改进:配置、模板、快捷方式、实时重新加载
- 主要 CLI 升级:布局标志、键绑定、预览、 --watch
- UI 优化:新状态栏、肖像模式、内联模式、滚动条
- Shell 支持:nushell、更好的完成、内联使用
- 其他:鼠标支持、更好的测试、性能提升、错误修复
仓库:https://github.com/alexpasmantier/television
--
From 日报小组 苦瓜小仔
社区学习交流平台订阅:
评论区
写评论还没有评论