< 返回版块

苦瓜小仔 发表于 2025-12-27 17:51

Tags:日报

文章《Specifying Rust via Desugarings》

这篇文章探讨了如何通过 “脱糖”(Desugaring) 这一核心思想来对 Rust 这样复杂的语言进行规范化定义(Specification)。作者 Nadrieril(Rust 类型团队成员)认为,与其直接定义 Rust 繁杂的表面语法,不如将其转化为一种更小、更简单的核心语言。

  1. 核心理念:表面 Rust vs. 核心 Rust
  • 表面 Rust (Surface Rust):开发者编写的代码,包含各种便捷的语法糖(如 for 循环、? 操作符)。
  • 核心 Rust (Core Rust):一个规模极小、语义明确的子集。
  • 脱糖:定义从表面语法到核心语法的转换规则。通过这种方式,只需精确定义“核心 Rust”的语义,就能间接定义整个 Rust 语言。
  1. 脱糖作为规范化的优势
  • 降低复杂度:规范编写者只需关注少数核心原语,而不必为每个复杂的语法特性编写数百页的说明。
  • 确保一致性:通过将不同特性(如 if letwhile let)脱糖到同一种 match 结构,可以自然地保证它们行为的一致性。
  • 简化形式化验证:对于安全研究者来说,验证一个小型的核心语言比验证庞大的 Rust 编译器要可行得多。
  1. 文中提到的具体示例
  • for 循环:可以完全脱糖为 loopmatch 和对 IntoIterator trait 的调用。
  • ? 操作符:脱糖为对 Try trait 的调用加上 match 和提前返回(return)。
  • 模式匹配 (match):虽然复杂,但可以被拆解为更基础的“判定树”和对内存位置的原始测试。
  1. 实施中的挑战
  • 诊断信息(Diagnostics):如果脱糖太彻底,编译器报错时可能会显示开发者从未写过的底层代码(如显示 IntoIterator 的内部错误而不是 for 循环的错误)。规范化必须平衡“逻辑简洁”与“用户理解”。
  • 循环依赖:有些特性互为基础(例如:某些脱糖需要 trait,而 trait 的定义又可能涉及其他需要脱糖的语法),必须小心定义脱糖的先后顺序。
  • 性能与优化:某些高层抽象(如 Iterator)直接脱糖可能丢失编译器进行高阶优化的机会,因此核心语言仍需保留足够的语义信息。
  1. 与 Rust 官方规范的关系 该思路正被应用于 Rust 的官方规范项目(如 FerrocenePLRS)。作者认为,这不仅是编写文档的技术手段,更是理清 Rust 语言演进方向、确保未来新特性不会导致语义冲突的关键路径。

总结结论: 作者主张 “以简驭繁”。通过将 Rust 的高级特性还原为一组最小化的、定义严谨的基础构建块(Desugaring),可以使 Rust 变成一门在形式上更可预测、在标准上更易实现的语言。

阅读:https://nadrieril.github.io/blog/2025/12/18/specifying-rust-via-desugarings.html

FRAME:基于 Web/WASM 的音乐节奏工作站

Frame 是一款完全使用 Rust 编写、并编译为 WebAssembly (WASM) 在浏览器中运行的 Groove Machine(节奏工作站/音乐制作工具),结合了采样器、合成器和步进编排器。

核心技术栈:

  • 语言:100% Rust。
  • 前端渲染:使用了 wgpu 进行图形渲染。作者提到他并没有使用现成的 UI 框架(如 egui),而是构建了自己的 UI 系统,以实现高度定制化的视觉效果。
  • 音频处理:使用了 Web Audio API 结合 AudioWorklet。Rust 代码被编译为 WASM,在独立的高优先级音频线程中运行,以确保音频不会因为主线程的 UI 渲染而产生爆音或延迟。
  • 数据交换:利用了 SharedArrayBuffer 在主线程(UI)和音频线程之间高效传输音频数据。

主要功能点

  • 内置引擎:包含一个采样器(Sampler)和一个频率调制(FM)合成器。
  • 效果器:内置了延迟(Delay)、混响(Reverb)和多种滤波器。
  • 编排能力:支持非线性序列编排,用户可以实时修改节奏和音色。
  • Ableton Link 支持:作者提到他实现了 Ableton Link 的 WASM 移植版本,允许该网页应用与其他音乐软件进行同步(这在浏览器应用中非常罕见)。

社区讨论:

  • 性能与延迟:作者强调 Rust 让他能够实现极低的音频延迟和稳定的 60FPS 刷新率。
  • 开发动机:作者希望证明 WebAssembly 已经成熟到可以处理复杂的、实时性要求极高的专业音频生产任务。
  • 浏览器兼容性:讨论中提到了该应用在 Chrome 和 Edge 上表现最好,而 Firefox 因为对 SharedArrayBuffer 的限制可能需要特定配置。
  • 开源/闭源状态:在帖子发布时,该项目是 闭源 的商业/个人实验项目,作者表示目前更倾向于将其作为一个完整的产品(frame.sh)来运营,而不是开源库。

社区反馈

  • UI 评价:评论区对应用的视觉美感(尤其是发光效果和响应式布局)给予了极高评价。
  • 技术惊叹:许多开发者对作者能将 Ableton Link 成功移植到 WASM 并实现如此顺滑的音频处理表示钦佩。

该帖子展示了一个由 Rust 驱动的、具有专业级性能和高颜值 UI 的在线音乐制作工具,证明了 Rust 在 Web 端处理高性能音频和图形的强大潜力。

网站:https://oyehoy.net/

Reddit:https://www.reddit.com/r/rust/comments/1pvtkea/frame_a_groove_machine_built_in_rust_compiled_to/

讨论: Axum 还是 Salvo?

  1. Axum:主流且稳健的选择
  • 优势:由 Tokio 团队维护,拥有最强大的社区支持和生态系统。它基于 Tower 服务模型,具有极高的组合性和稳定性。
  • 劣势:追求极致的模块化,因此核心功能较为精简。许多常见的 Web 功能(如 OpenAPI/Swagger 自动生成、复杂的文件上传处理等)需要依赖第三方库(如 utoipa),有时会增加集成难度和配置成本。
  • 适用场景:追求长期维护稳定性、需要深度定制、或希望利用 Tokio 生态系统优势的大型项目。
  1. Salvo:开箱即用的“电池完备”型框架
  • 优势:被认为是 Rust 里的“Batteries Included”框架。它内置了大量常用功能(如 OpenAPI、WebSocket、JWT、文件上传等),且 API 设计参考了 Express.js 或 Flask,对新手或追求开发效率的开发者更友好。
  • 劣势:社区规模较 Axum 小,虽然增长迅速,但在极端长期的维护预期上可能不如 Axum 这种“官方背景”框架。
  • 适用场景:希望快速原型开发、不想在配置 Swagger 或处理基础件上耗费时间的开发者。
  1. 其他提及的替代方案
  • Loco:讨论中多次被提到。它是一个基于 Axum 构建的、类似 Ruby on Rails 的全栈框架。如果你喜欢 Axum 的底层稳定性,又想要 Salvo 那种开箱即用的体验,Loco 是一个极佳的折中选择。
  • Poem:另一个被称赞具有极好开发者体验(DX)的框架,功能也相对全面。
  • Actix-web:虽然 Axum 目前更火,但 Actix-web 依然是追求性能极限和老牌稳定性的首选。
  1. 社区建议的决策标准
  • 看重生态和职业通用性:选 Axum
  • 看重开发速度和内置功能(特别是 OpenAPI):选 Salvo
  • 想要“全家桶”式的开发体验(类似 Rails/Django):选 Loco
  • 最务实的建议:分别用两个框架写一个微型 MVP(最小可行产品),亲手体验其 API 设计和编译报错的友好程度,因为“开发者的直观感受”在 Rust 学习曲线中非常重要。

总结结论: 并没有“绝对更好”的框架。如果追求不出错的职业选择,Axum 是安全牌;如果你讨厌 Axum 的繁琐,Salvo 带来的开发体验提升是非常显著的。

Reddit:https://www.reddit.com/r/rust/comments/1pujc9e/how_can_i_choose_between_axum_and_salvo_in_late/

--

From 日报小组 苦瓜小仔

社区学习交流平台订阅:

评论区

写评论

还没有评论

1 共 0 条评论, 1 页