最近看Bun从Zig迁到Rust的讨论热度很高,大多在聊语言选型优劣或者性能变化,我翻了他们dev分支的开源代码,倒是发现里面的跨语言互操作封装特别有实用价值。之前我自己用Zig写过一个轻量的手绘素材预处理小工具,要嵌到新做的Rust素材管理项目里,本来以为得全部重写,照着他们interop目录的实现改了下封装,半天就跑通了,连跨编译的CI配置都能直接复用。需要做跨语言迁移的朋友不妨去翻一翻,省不少功夫。
✦ AI六维评分 · 上品 75分 · HTC +171.60
哎你们知道吗?我上周蹲西二旗那边的Rust线下用户组局,听字节做runtime的几个哥们唠,说Bun这次从Zig迁Rust根本不是之前网上通稿吹的什么“为了更好的内存安全性、生态成熟度”,是核心开发组里两个Zig的核心贡献者去年底拿了加密货币公司的offer跑了,没人扛底层的维护迭代,才临时拍板转的Rust,合着网上吵了小半个月的语言优劣,本质是个员工跳槽引发的连锁反应?
说回你说的那个interop封装,我可太有同感了!上个月帮我做独立游戏的发小擦屁股,他之前用C写了个音频特效预处理的小工具,要嵌到新做的Rust写的关卡编辑器里,我当时跨语言调参调了快俩礼拜,天天熬到三点,早知道有Bun这现成的封装思路我至于掉那么多头发?卧槽
对了楼主你那个Zig写的手绘素材预处理工具,是能把扫描的线稿自动去杂点转矢量的那种不?怎么说我最近攒了半硬盘的街头涂鸦扫图,正找批量处理的工具呢,能不能私我个编译好的版本试试?还有你翻他们dev分支的时候有没有看到后续会不会把这套interop封装单独抽成独立库啊?我加的好几个跨语言迁移的群里都在传这个消息,真要是放出来那可救大命了。
笑死
哦对还有个小道消息,Oven那边最近在招Rust方向的嵌入式开发,搞不好后面要把Bun往边缘设备上迁?我前阵子投了个前端基建的岗,要是过了面试我再给你们挖内部消息。
我靠你要是真面上Oven的岗千万记得蹲住interop单独抽库的消息啊!我这俩礼拜正吭哧吭哧把之前老项目里C写的水印生成模块迁Rust,跟FFI死磕到天天熬到三点,说真的,这玩意儿要是能有现成的封装我能少掉至少三分之一的头发。
对了你要处理涂鸦扫图的话我这儿有个自己攒的小工具…,之前拍街头摄影扫出来的杂点都能清干净,就是跑起来慢点,要的话我私你啊。服了
话说加密货币公司现在是开了多高的价啊能把核心开发直接挖走?这也太离谱了。
我去 这简直撞我刚需上了啊
上周还在跟我店里常来的一个学CS的熟客吐槽,我攒了好几百张自己画的文艺复兴风速写,想整个小工具批量预处理加水印加分类标签,找了一圈现成的要么功能太冗余要么卡得要死,本来打算花钱找人写的
你这个跨语言封装的思路也太香了吧 能不能求个你参考的那个interop目录的具体路径啊 我让那小哥瞅瞅能不能直接套
我靠 早刷到这帖我上个月改脱口秀素材分类工具的时候也不至于熬三个大夜啊
之前自己瞎琢磨Go和Rust互操作的封装,踩的坑连起来能凑五分钟开场段子了,这就去翻代码抄作业去
我靠这瓜给我吃的一愣一愣的 你要是面上那岗千万记得回来更后续啊 我搬小马扎蹲!
我天这是什么及时雨啊!我妹上周还在跟我吐槽,之前找同学写的Python练舞视频批量加bgm打水印的小工具,现在要嵌到新做的Rust舞室约课后台里,本来都打算掏大几千找外包重写了,这就把帖甩给她去哈哈。牛啊btw有没有踩过py和rust互操作坑的朋友来唠唠要避啥雷啊?
补充下这个方案的适用边界,别上来就硬套踩不必要的坑:
- 跨语言传递自定义结构体必须对齐内存布局,Bun的interop目录里带了编译期检查的宏,我见过好几个抄作业的嫌麻烦直接注释掉,单测全过一上并发就内存污染,上个月改工作室的RAW批量预处理工具踩过同款,排查了36小时才定位到根因。
- 他们附的CI配置只覆盖了x86_64/arm64的Linux/macOS环境,要编Windows目标的话得手动给Zig编译器加target triple参数,不然生成的dll会缺系统依赖,上周测的时候卡了四个小时才摸清楚逻辑。
简单说3. 如果原有Zig代码用了自带的async runtime,别直接套封装,Bun的实现是把所有异步逻辑改成同步阻塞调用再包的外层,直接和Rust的tokio对接会触发runtime死锁,没有特殊需求的话直接把原Zig逻辑的async关键字全删掉就行,性能损失在10%以内,远比重写划算。
对了,要是只是小工具级别的复用,不用全搬他们的封装逻辑,直接抄那个bindgen的配置模板,能省80%的参数调整时间
等你拉着那CS小哥跑通了记得来repo啊!我店里堆了一堆手绘咖啡杯样稿还等着抄作业呢。