< 返回版块

Yuan YQ 发表于 2025-03-20 11:24

empiriqa: 交互式 UNIX 管道操作工具

empiriqa(命令名为 epiq)是一个使用 Rust 开发的,用于交互式操作 UNIX 管道 | 的工具。用户可以对每个管道阶段进行单独的编辑、添加、删除以及启用 / 禁用操作,这使得使用命令进行数据处理和分析的实验变得更加轻松高效。此外,该工具还支持执行像 tail -f 这样具有连续输出流的命令。

Github 仓库:https://github.com/ynqa/empiriqa

Chrome 为何弃用 FreeType - 网络字体的内存安全

此文章介绍了 Chrome 为何弃用 FreeType,以及此举带来的一些有趣的技术细节改进。

网络允许用户从各种不受信任的来源提取不受信任的资源,并希望一切都能正常运行且安全无虞。这种假设通常是正确的,但要向用户兑现这一承诺,需要付出代价。例如,为了安全地使用 Web 字体(通过网络传送的字体),Chrome 会采用多种安全防范措施,但是依然无法找到所有问题,或者只能在代码分发给用户后发现问题。

Skia 是 Chrome 使用的图形库。Skia 依赖于 FreeType 从字体加载元数据和字体样式。Skrifa 是一个 Rust 库,属于 Fontations 库系列,可为 Skia 使用的 FreeType 部分提供安全替代方案。Skifra 利用了 Rust 的内存安全特性,让我们能够更快地迭代 Chrome 中的字体技术改进。从 FreeType 迁移到 Skrifa 后,我们在更改字体代码时可以灵活且无所畏惧。现在,我们在修复安全 bug 上所花的时间大大减少了,从而加快了更新速度并提高了代码质量。

原文地址:https://developer.chrome.com/blog/memory-safety-fonts

unsafe 会破坏 Rust 的内存安全保证吗?

该文围绕 “Rust 中 unsafe 是否破坏 Rust 的内存安全保证” 这一核心问题展开深入探讨,从编程语言及其实现的基本概念出发,逐步深入到形式化验证、Rust 的具体安全证明以及实际应用中的情况,摘要如下:

  1. 编程语言与实现的关系
    • Brainfuck 语言示例:Brainfuck 语言仅由 8 个字符操作构成,本身不能定义或调用函数 ,但在实现其解释器或编译器时,可用支持函数的语言。同时,其输出指令依赖平台 API 与硬件交互,这虽涉及内存不安全操作,但不改变 Brainfuck 程序本身语义。
    • Ruby 语言示例:Ruby 语言本身不允许修改任意内存地址,正常情况下不应出现段错误。然而,Ruby 程序实际可能因解释器代码中的错误而发生段错误。这表明编程语言的保证与实现的正确性相关,同时说明排查问题时可缩小范围到非 Ruby 代码部分。
  2. 语言扩展与不安全因素
    • Brainfuck 扩展示例:自定义 Brainfuck 解释器可添加新指令(如@),类似地,许多语言通过 “外部函数接口(FFI)” 扩展功能。FFI 可让程序调用其他语言代码,实现语言本身不具备的功能,但也可能引入不安全因素。不过,出现问题时应归咎于扩展或实现部分,而非原语言代码。
    • “内存安全语言” 定义:“内存安全语言” 通常指在无实现错误和 FFI 错误的情况下,语言及其实现具备内存安全性。尽管实际存在这些 “例外”,但因其发生概率远低于非内存安全语言,该定义仍具有实用价值。

原文地址:https://steveklabnik.com/writing/does-unsafe-undermine-rusts-guarantees/

--

From 日报小组 Yuan YQ

社区学习交流平台订阅:

评论区

写评论

还没有评论

1 共 0 条评论, 1 页