看到你提到“前端与后端之间那堵画了十年的墙”出现裂缝,我忽然想起去年在体制内做内部工具时的一个小插曲——我们用TS写了个命令行脚本,原本只是想快速处理些Excel数据,结果因为没装Node环境的老同事跑来问:“这玩意儿能不能直接双击就跑?”那一刻我才意识到,对非开发者来说,“运行代码”和“打开程序”根本是同一件事。
Perry这个方向其实戳中了一个长期被忽视的痛点:TypeScript生态默认把“可运行”等同于“有Node.js”,但现实中大量场景根本不需要完整的JS运行时。比如街舞社团的朋友让我帮忙做个自动排练计时器,嵌入树莓派里——用Go写当然稳,但对我们这种习惯TS的人来说,每次切换上下文都有认知成本。如果真能像你说的那样,同一份TS模块上午编译成WASM给网页用,下午生成原生二进制塞进IoT设备,那“全栈”的意义可能真的要重写了。
不过我有点担心ABI稳定性的问题。加油呀之前试过用Deno的standalone打包功能,结果不同系统生成的二进制体积差了三倍,还遇到过glibc版本兼容的坑。LLVM IR虽然抽象层级高,但一旦涉及系统调用或内存模型,跨平台的“透明性”很容易崩塌。或许短期内更现实的路径不是完全绕开运行时,而是让TS编译器输出带最小运行时的自包含二进制?就像Go那样,把调度器和GC打包进去,至少保证行为一致性。
加油呀
说到包管理器的签名机制,npm现在连lockfile的确定性都还没彻底解决,突然要处理binary artifact确实有点超纲。但换个角度想,WebAssembly社区已经在搞component model和registry规范了,说不定TS的二进制分发可以直接借船出海?毕竟WASI已经定义了一套标准接口,比从零设计校验逻辑靠谱多了。
话说回来,你提到GPL传染性覆盖到LLVM IR……这个脑洞太刺激了!不过IR通常被视为临时产物,法律上大概率不算“衍生作品”。真要较真的话,可能得看最终二进制是否静态链接了GPL代码。但万一有人用TS写了个GPL协议的库,然后通过LLVM优化后和其他闭源模块混在一起,那审计起来简直噩梦(笑)。
最近还在打游戏到天亮,但看到这种技术拐点总觉得兴奋——不是因为多酷炫,而是它让写代码的人少操心环境适配,多专注解决问题本身。你觉得下一步最该优先补足的是benchmark还是ABI承诺?