Pi GPUI - 用 GPUI 运行本机已安装的 pi 编程代理
Pi GPUI 是用 Rust 和 GPUI 编写的 macOS、Linux 原生应用,在桌面里运行用户已经安装的 pi 编程代理。模型、扩展、skills 和会话在启动后即可使用。界面在 macOS 上用 Metal 绘制,在 Linux 上用 Vulkan 绘制。它需要 pi 1.4 或更新版本,支持 macOS 13 的 Apple silicon,以及 x86_64 和 arm64 的 Linux(beta),以 MIT 许可证发布。GPUI 也是 Zed 的界面框架,自称 immediate 与 retained 的混合:状态留在 entity 里,界面写在 render 中,变更要由应用调用 notify,才会重跑没有缓存的 view。
应用不附带 pi。每个会话单独启动本机的 pi,使用 pi --mode rpc,经 stdin 和 stdout 上的 JSONL 通信,因此一个会话继续工作时还可以查看另一个。项目和会话在侧边栏,打开的会话以标签并排,用 ⌘1 到 ⌘9 切换。⌘⇧T 打开会话树,可查看分支并跳回任意消息,离开的分支可以由 pi 做摘要;/fork 从任意消息分叉,原会话不变。斜杠命令包括扩展命令、提示模板和 skills,以及 /compact、/model、/name、/copy、/export。文件和截图可以粘贴或拖入,pi 得到路径。模型名旁的 context ring 显示上下文占用以及何时会 compact,点击可看缓存命中和计划限额。扩展的提问会变成对话中的卡片,用点击、数字或方向键回答;扩展的状态行和 widgets 尚未显示。应用只额外加载一个小扩展,用于会话树导航和用量数字。⌘⇧M 可以只改当前会话的模型或 thinking level。应用会自更新,pi 与扩展的新版本显示在 pi 版本旁边,只有点击后才安装。
凭据不经过应用:在 pi 中执行 /login 连接订阅或 API key,由 pi 保存。打开 Pi GPUI 后,它会自己找到 pi,包括 nvm 安装,并列出项目和会话。macOS 可执行 brew install --cask bytesbay/tap/pi-gpui,Linux 使用项目提供的安装脚本。一篇对这套状态模型的评论认为,GPUI 和 egui 都不适合作为复杂桌面应用的默认选择:框架若不能指出哪个值变了、谁依赖它,性能就难以上去;由应用手工补上这份精度,又会失去原先 API 的简单性。文章认为更直接的是组件只运行一次,并用 signal 标出依赖。文中写到 Discord 已宣布用 GPUI 重写客户端;作者披露,自己把 GPUI 当前的 Linux 渲染器移植到了 wgpu,搭建了文中的基准,同时也在做基于 signal 的框架 zgui。



https://blog.zortax.de/posts/a-critique-of-gpui
Rust 1.100 - 稳定 never 类型,并开放自定义分配器
Rust 团队于 2026 年 11 月 12 日发布第 100 个稳定版本 Rust 1.100。变化最大的是稳定 never 类型 !:它表示不会产生值的计算,例如始终不会正常返回、而是结束执行或 panic 的函数。此前 ! 只能出现在函数返回类型中,此版本起可以写在任意类型位置,包括 Result<T, !> 这类泛型参数;Infallible 成为 ! 的别名,使用二者的 API 可以互通。该特性经过约十年、五次未能进入稳定版的尝试。兼容性上有一处较小变化:2015、2018 和 2021 edition 的 never-type fallback 从 () 改为 !,与 2024 edition 一致。受影响的项目应当不多,但部分既有代码或依赖可能需要修改。
标准库稳定了 Allocator API,开发者可以定义自定义分配器,并用于 Vec 和 Box。稳定范围包括 std::alloc::Allocator、Global、System 及相关实现,以及 Box::new_in、Vec::new_in、Vec::with_capacity_in 等带分配器的构造与拆解方法;更多集合和指针类型计划在后续版本支持。同时稳定的还有 core::mem::DropGuard:值离开作用域时执行一个闭包,提前返回或 panic 也会触发,并可调用 dismiss 取消清理,适合失败时回滚。unsafe 函数 std::mem::conjure_zst 一并稳定。此外还稳定了 bool::toggle、Box::take、Box::map、Rc::map、Arc::map、str::trim_prefix、str::trim_suffix,以及切片和 Path 上的对应方法、Vec::from_fn,和 ! 的 AsRef/AsMut 实现。
Cargo 引入自己的 lint 系统,部分警告改为可在 [lints.cargo] 中控制的 lint,并默认启用 cargo::unused_dependencies,提示 Cargo.toml 中未使用、却会增加构建时间的依赖。检测取决于检查了哪些构建目标,目前不包括未使用的 dev-dependency。另一项可选功能是 dependency cooldown(minimum publish age,RFC 3923):开启后,解析器会忽略发布时间短于设定期限的版本,除非该版本已在 Cargo.lock 中。它不作用于 cargo install,还依赖注册表提供发布时间,应视为额外防护,而不是完整的供应链方案。cargo install 现在默认使用 .crate 包内已有的 lockfile,--locked 不再改变行为。中间构建产物改为按配置哈希分目录存放,避免不同配置的产物冲突,从而减少不必要的重编译、该重编却未重编,或分不清用了哪份产物;该目录布局不是稳定接口,检查构建目录的工具应改用 Cargo 的 JSON 消息定位产物。
语言层面还稳定了 extern "custom",对重复的 #[repr(..)] 增加 lint,并把 repr(packed) 类型中出现 repr(align) 字段从错误改为默认 deny 的 lint aligned_fields_in_packed。dropping_references、dropping_copy_types 和 undropped_manually_drops 扩展到 drop_in_place。编译器稳定了 -Cprofile-sample-use,并在 orphan check 中默认启用 next solver。平台支持上,i686-pc-windows-gnu 成为不带 host tools 的 tier 2 目标,wasm32-wasip3 提升为 tier 2,新增 tier 3 目标 powerpc64-sony-ps3。库中修复了 std::sys::pal::sgx::waitqueue::unsafe_list 的 soundness 问题,并把 ENOTSUP 映射为 ErrorKind::Unsupported;rustdoc 新增 invalid_markdown_table lint。与发布说明同时被讨论的,还有一个约 11 年的类型系统 unsoundness:它在 nightly 以及至少回溯到 1.85.0 的稳定版上仍会被接受。有意编写的 Drop 可以把短生命周期引用留到 'static 容器中,使程序在值离开作用域后仍按 &'static String 使用;AddressSanitizer 会报告 stack-use-after-scope。该问题标为 P-high。类型组说明,正因为它存在这么久仍不易碰到,才没有标成 P-critical;正常代码里很难偶然触发,也很可能没有因此在无意中造成内存不安全。


https://github.com/rust-lang/rust/releases/tag/1.100.0
https://github.com/rust-lang/rust/issues/164250
https://linuxiac.com/rust-1-100-stabilizes-never-type-after-a-decade-of-development
https://www.phoronix.com/news/Rust-1.100-Released
https://docspring.com/blog/posts/rust-git-worktrees-shared-cargo-build/
Google Summer of Code 2026 - Rust 的 13 个项目全部通过最终评估
Rust 项目结束了参加 Google Summer of Code 的第三年:13 个项目全部通过最终评估。指导团队的 Jakub Beránek 在 Rust Blog 上写道,贡献者与导师协作数月,改动覆盖编译器、工具链和更广的生态。三年累计 41 个 GSoC 项目中有 40 个成功。
编译器与语言方面,Marcelo Domínguez(导师 Manuel Drehwald)继续做 std::offload 中的安全 GPU offload:为 offload 调用加上类型检查,支持泛型 kernel 和 GPU 选择,并提供去掉样板代码的宏;他还为 kernel 中的可变引用建立了 sound 的抽象,把 RajaPerf 套件从 C++ 移植到 Rust,性能与原版相当。Shota Sugano(导师同为 Manuel Drehwald)把实验性的 std::autodiff 和 std::offload 接入持续集成,并通过 rustup 在 nightly 提供;他用 rustc 直接调用 LLVM API,替换原先依赖 Clang 辅助二进制的部分 GPU 编译流程,由此启用的 CI 已经抓住过回归。Ryosuke Yamano(导师 Jacob Pratt 与 Urgau)实现了 RFC 3323 中已接受的 impl restrictions 和 mut restrictions,改动涉及解析、抽象语法树、路径解析和强制检查。功能进入 nightly 后他征集测试,按反馈做了修复,并让 rustdoc 的文档反映新语法。指导团队预计稳定化会延续到 2027 年。
工具方面,Kei Akiyama(导师 David Lattimore)为链接器 Wild 增加 WebAssembly 链接,已能把 SQLite、ripgrep、CPython、SpiderMonkey 乃至 Wild 自身链接到 WebAssembly;报道称这些目标比 wasm-ld 快 2 到 15 倍,内存占用少 2 到 5 倍。Vishruth Thimmaiah(导师同为 David Lattimore)扩展了 Wild 的链接脚本支持并加入部分链接,使它可以链接包括 btrfs 和 amdgpu 在内的 Linux 内核模块,在所报告的基准中比 BFD 和 LLD 快 2 到 4 倍,也更接近能处理 Linux 内核本身。Mohamed Ali(导师 Oli Scherer)恢复并扩展了 Miri 的交互式调试器 priroda,可以单步执行指令、查看 MIR 局部变量,并在 Miri 报告未定义行为时检查程序状态;他还加了供 CI 使用的命令行界面,以及对 Debugger Adapter Protocol 的基本支持。Anthony Bolden(导师 Jakub Beránek 与 Jieyou Xu)重新设计了面向 LLDB 和 GDB 的 debuginfo 测试基础设施,简化参考输出的更新并记录更多调试器状态,在 CI 中重新启用 Windows 和 Linux 上的 LLDB 测试,并改进标准库类型的可视化。bit-aloo(导师 Chayim Refael Friedman 与 Lukas Wirth)把 rust-analyzer 的 assist 从可变语法树编辑迁到 SyntaxEditor,并从 rowan 去掉可变编辑,以应对内存碎片和性能问题;项目结束后 bit-aloo 加入了 rust-analyzer 团队。
库与维护方面,Adam Martinez(导师 Trevor Gross)推进 libc 1.0:处理时间与偏移相关变体,弃用有问题的常量,并解决 FreeBSD、NetBSD、Android、AIX 和 Fuchsia 等平台上的问题。他在 116 天里每天写进度报告,提交了大量需要核对平台行为与兼容性的 pull request。Tanmay(导师 Christian Meusel)与 Rust Embedded Working Group 合作,改进 serialport-rs 的 API 易用性和安全性:他先看依赖该 crate 的用法,在部分设计里用枚举替换 boxed trait object,并把旧 API 会 panic 的路径改成显式错误;部分改动计划进入即将发布的 5.0。



Rust Glancer - 探讨如何把增量计算做成可持久化
增量计算的意思是:结果算过之后,输入变了也不必整份重算,多数计算仍然有效,通常只需要重做受影响的那一小块。它最适合计算量大、输入很多、而且各项输入彼此独立、变化概率也不相同的场景。最常见的例子是增量编译:它不一定让冷构建更快,编译器在开不开增量时的性能可能差不多,收益主要来自反复复用已有编译产物,从而加快开发时的迭代。增量编译本身并不好做;这个思路用在 LSP 上往往更合适,因为用户改代码远比重新编译频繁,每次按键都要在毫秒级更新编辑器状态。
rust-analyzer 以 salsa 作为架构核心。salsa 把增量计算做得方便且高效,但主要面向在内存中工作。Rust Glancer 希望尽量压低内存占用,因此长期没有采用增量计算,而是自己维护一套带分片和针对性优化的持久化缓存。这套办法一度够用,但不好扩展:缓存格式要手工实现并持续优化,计算又必须和缓存绑在一起,复杂度会随着计算本身和缓存实现一起上升。
项目因此到了会明显受益于持久化增量计算的阶段。这篇博文讨论增量计算在内存中如何工作,以及怎样让这套方法支持持久化,并提到 salsa 所用的 red-green 算法及其内存方案。

https://rust-glancer.github.io/blog/persistent-incrementality-in-rust/
https://www.reddit.com/r/rust/comments/1xttt6y/are_compiler_inserted_checks_something_you/
https://www.reddit.com/r/rust/comments/1xu8kk8/totally_new_to_rust_need_some_guidance/
--
From 日报小组 Mike
社区学习交流平台订阅:
友情赞助:
评论区
写评论还没有评论