Tech
[Rust] 折腾了一阵 Rust + Cosmopolitan, 搭了套工具链,现在能把一些常用的 cli 工具编译到 APE 了
先解释一下, jart/cosmopolitan 项目实现了一套 libc, 用了一些 trick 将 c 编译成在各个平台都能运行的单个二进制程序(真·一次编译到处运行)。ape(actually portable executable)指的就是这种格式。
其实很早之前就有人写了一个实验性质的项目尝试与 Rust 打通,但是遇到了很多问题。最主要的就是 Rust 标准库在编译期就写死了一些平台相关的 flag 常量,导致运行的时候其他系统识别不了就莫名崩掉或者行为不一致,而且后者这种最难查了。
我早期也探索过,办法是到处 patch 标准库和第三方库里的常量,一边读 std 一边读 cosmo
的实现一边 gdb ,勉强把同步网络那块调通就没精力了。这次有了 AI 的帮助,重新捡起来,加了一层 shim
把 Linux 语义翻译成宿主语义,虽然还是要 patch ,但不用再满世界改值了(结果越深入越发现 cosmo 少了很多东西,导致现在项目里写的适配 c 代码比 rust 代码都多了。。),异步那块也一起
搞定了。
项目在这里: starccy/rust-ape ...
Read the full discussion on V2EX
This article was aggregated from V2EX. Click to join the conversation.
View on V2EX