Tokio 团队开源 Topcoat:Rust 全栈 Web 框架把 SSR、响应式交互和无 Wasm 客户端一起打包
tokio-rs/topcoat 这次很容易吸引 Rust Web 圈的注意,不只是因为它挂在 tokio-rs 名下,更因为它试图把“全栈 Rust Web 框架”这件事重新捏成一套更轻的工程模型。项目主张的是:HTML 仍然由服务端主导渲染,组件可以直接写成 async fn,数据库查询和页面拼装不再被 API 层强行隔开;与此同时,浏览器里的局部交互又不必次次回服务器,而是通过 $(...) 这类表达式在初次渲染时跑服务端逻辑、在前端交互时再翻译成 JavaScript 立即重跑。也就是说,它想做的不是“再来一个模板引擎”,而是把 SSR、响应式交互和 Rust 本体语言尽量压到同一套语义里。
从 README 看,Topcoat 最有辨识度的地方有三块。第一是 不靠 Wasm 客户端包 来换取基本交互能力,按钮点击、显隐切换之类的状态更新可以直接走浏览器侧的表达式执行;第二是当交互确实需要重新命中服务端时,可以把组件标成 #[shard],让参数变化触发服务端重渲染并只替换那一块 HTML;第三是它连路由、资源打包和常见 UI 组件都一起往“开箱可用”方向做,连模块结构自动推导路由树、asset! 静态资源扫描和 topcoat fmt 宏格式化都一并给了。
当然,项目自己也写得很坦白:这是 early-stage、experimental 的框架,预期会有 breaking changes。但正因为如此,这个仓库更值得关注——Tokio 生态现在不只是继续做 runtime 和基础设施,而是在尝试定义一套新的 Rust Web 开发体验。如果后续这套“服务端 Rust 为中心、前端交互按需下沉”的模型跑顺了,Topcoat 很可能会成为今年 Rust Web 方向里最值得追的一条新线。
原文链接:https://github.com/tokio-rs/topcoat
prost-protovalidate 0.6:把 buf.validate 规则直接落到 Rust,运行时 CEL 与编译期直生校验并存
prost-protovalidate 0.6 这次更新很扎实,因为它瞄准的是很多 Rust 服务端团队都会碰到的一个老问题:校验规则到底写在哪一层,才能不在 schema、服务代码和网关之间来回重复? 这个项目的答案是,尽量把规则继续留在 .proto 里,用 buf.validate 作为单一事实来源,然后在 Rust 侧把执行路径补全。作者给出的能力模型相当清楚:一条路是基于 prost-reflect 的 运行时验证器,可以完整处理包括 CEL 在内的复杂规则;另一条路则是 prost-protovalidate-build 在编译期直接生成 impl Validate,让常规规则走静态代码路径,在热路径上不再依赖反射和解释器。
0.6 最显眼的硬指标,是它已经通过了上游 protovalidate conformance 2872/2872 全量测试。这不是 README 式的“理论支持”,而是已经把兼容面拿测试套件压过一轮。与此同时,项目还把生态接入做得比较实用:可选 tonic / tonic-types 特性可以把验证错误映射成 gRPC 的 InvalidArgument,并附带 google.rpc.BadRequest 级别的字段错误细节;对 buffa 后端也留了统一桥接路径,说明作者考虑的不是单一 demo,而是真想把这套规则执行层嵌进不同 protobuf 生成方案里。
更值得注意的是它对“性能”和“覆盖率”没有二选一。作者没有强迫所有人都走运行时引擎,而是把 编译期直生校验、运行时全规则校验 和 buffa runtime_bridge 这些模式拆开,让团队按二进制体积、构建时间和热路径性能自己取舍。对于已经在 Rust 里大量使用 prost、又不想把字段校验散落到 handler 里的服务项目来说,prost-protovalidate 0.6 很可能是近期最值得试的一类基础设施升级。
原文链接:https://github.com/zs-dima/prost-protovalidate
Singularity:Rust + WGPU 做出可点击穿透的黑洞桌面覆盖层,逐像素广义相对论直接跑进 shader
这个叫 Singularity 的项目虽然看起来更像“桌面玩具”,但它背后的工程味其实相当重。作者做的不是一段预渲染动画,也不是只在某个窗口里演示特效,而是一个 全屏、置顶、可点击穿透 的桌面覆盖层:运行后黑洞会在桌面上缓慢漂移,你底下的窗口仍然可以正常操作,而覆盖层实时抓取屏幕内容,再把整张桌面当成被引力透镜扭曲的背景去渲染。这个产品形态本身就不太像普通图形 demo,它更接近一个真正可运行的桌面效果程序。
更有意思的是,作者没有只用“近似长得像”的 shader 糊弄过去。README 和帖子都明确写到,黑洞附近的每个像素都会在 fragment shader 里积分自己的 Schwarzschild null geodesic,用 leapfrog 方案迭代几十步;远离黑洞的区域则切到解析化的弱场近似,再做无缝衔接。再加上吸积盘的黑体辐射、相对论多普勒效应、引力时间膨胀、爱因斯坦环和镜像次级成像,这个项目虽然是视觉作品,但它选的是一条很“Rust 图形工程”的硬路线:把物理、GPU 管线和桌面捕获真正拧在一起。
实现层面也有不少值得 Rust 开发者留意的细节。Windows 侧桌面捕获走的是 GPU 零拷贝路径,帧直接复制进共享纹理避免 CPU 参与;macOS 端则已经补上基于 objc2 的 ScreenCaptureKit 绑定,虽然作者还没有真机验证,但说明跨平台接口层也在认真搭。项目还支持多种视觉 preset、托盘菜单切换、空闲触发 screensaver 模式,以及交叉编译到 Windows 的路径。对做 wgpu、桌面图形甚至系统级 UI 特效的人来说,Singularity 并不只是“看起来很酷”,它本身就是一个相当完整的 Rust 图形样板。
原文链接:https://github.com/GreenScreen410/singularity
diffable:微分几何 trait 体系搬进 Rust,从流形、度量到李群层层自动派生
diffable 这个新库走的是一条很不大众、但相当有辨识度的路线:它不是给你几个数值算法函数就完事,而是试图把 微分几何里的结构层级直接编码成 Rust trait 系统。项目文档里把 Point、Field、Metric、Chart、TangentBundle、LieGroup、PseudoRiemannian 等一整套概念都拆成独立 trait,然后通过 blanket impl 把“实现了更高阶结构,就自动继承周边几何能力”这件事做成类型层级规则。换句话说,它追求的不是“在 Rust 里算几何”,而是“让 Rust 类型本身携带可验证的几何结构”。
这种设计的吸引力,在于它把很多平时只会出现在论文或数学笔记里的关系,转成了程序接口。例如一个类型如果实现 Smooth<V>,就能顺着链条拿到 Chart、ExpMap、TangentBundle;如果再具备 LieGroup 结构,又可以把群操作和流形结构自然叠起来。文档里还给了 Sphere、S3、So3、Minkowski、矩阵、复数和离散结构等实现,说明作者不是只想搭一层抽象壳,而是已经开始把真正可算的对象接进这套系统。
另一个很 Rust 的点,是项目把“这些数学公理是否真的成立”尽量往 property testing 上落。文档专门提供了大量 test_* 宏,去验证群、公理、度量、切丛、指数映射等结构承诺,而不是只把 trait 名字写得很漂亮。对大多数应用开发者来说,这个库未必会马上进生产,但对做科学计算、图形、机器人、物理建模,或者单纯关心“Rust 类型系统还能往哪里卷”的人来说,diffable 是个相当值得收藏的方向性项目。
原文链接:https://docs.rs/diffable/0.1.1/diffable/index.html
评论区
写评论还没有评论