探索 XS:'通用' 编程语言的雄心与争议
编程语言的格局常常是在性能、可移植性和易用性之间的权衡。XS 作为一种新语言,将自己定位为通用工具:“随时随地,由任何人使用。”凭借在单个静态链接二进制文件中提供完整开发生态系统的大胆声明,XS 旨在消除工具链安装和跨平台兼容性的摩擦。
从技术角度看,XS 是一个雄心勃勃的项目。它将编译器、语言服务器、调试器、格式化工具、 lint 工具、测试运行器、性能分析器和包管理器打包进一个只有 2.9 MB 的微小二进制文件。这种“一体化”方法旨在让相同的源代码在广泛的环境中保持不变地运行,包括 Linux、macOS、Windows、WASI、iOS、Android、ESP32 和 Raspberry Pi。
技术架构与性能
XS 采用多层次执行策略来平衡灵活性和速度。根据使用场景,开发者可以从以下几种后端中选择:
- Tree-walk Interpreter (
--interp): 主要用于 REPL 和 AST 层级的插件调试。 - Bytecode VM (默认): 大多数程序的标准执行路径。
- Register-allocating JIT (
--jit): 针对 x86-64 和 aarch64 进行优化,对于不支持的操作码回退到 VM。 - C Transpiler (
--emit c): 生成自包含的 C 源代码,以最大程度兼容现有编译器。 - JavaScript Transpiler (
--emit js): 目标是 Node.js 或浏览器。 - WASM Runtime (
xs.wasm): 一个基于浏览器的编译器版本,包含虚拟文件系统,使得 XS 程序可以完全在浏览器内部评估。
就原始性能而言,XS 声称具有竞争力的结果。在 fib(30) 基准测试中,JIT 版本耗时 31 毫秒,优于 Node 20(62 毫秒)和 CPython 3.13(71 毫秒),而 VM 版本用时 138 毫秒。
社区怀疑与‘AI 垃圾’争论
尽管功能列表令人印象深刻,但在 Hacker News 上的反响却异常尖锐。争议的焦点并非语言的能力,而是其被感知的来源。几位有经验的开发者将该项目标记为可能的“AI 垃圾”——由大型语言模型在最少人工监督下生成的代码和文档。
- 文档风格: 用户指出文档使用了高级语言设计术语(例如,“代数效应”,“语义分析器”),但未提供关于语言独特动机或设计哲学的实际内容。
- 代码来源: 一些用户观察到 VM 设计与 Crafting Interpreters 项目中的
clox解释器高度相似,这表明它可能是通过 AI 代理改编而非从零开始设计的。 - 实现不一致: 技术评审人员指出类型系统中的问题,引用源代码中的注释如 “recursive type: bind anyways,”他们认为这表明缺乏严格的人工工程。
- 提交历史: git 历史的性质以及某些提交消息——具体来说,那些详细说明在辅助函数中删除的代码行数的确切数量的提交——被描述为“明显的 LLM 上下文冗余”。
设计批评
除了对 AI 生成的担忧之外,该语言的设计选择也引发了争议。虽然一些用户赞赏了“得体”的语法决策以及 actor/nursery 设计的加入,但其他人印象不佳。
"let 是不可变的(重新赋值是运行时错误),var 是可变的,而 const 在运行时与 let 相同但表示意图。这告诉了我所有需要知道的事情。"
其他人对“通用”这一说法的实际价值提出质疑。正如一位批评者所指出的,Linux 上专业开发者的需求与学生或针对 ESP32 开发者的需求截然不同,他们认为一种针对某一场景优化的语言不可能在所有场景下都最优。
结论
XS 代表了一项在工具链整合方面的有趣实验。一个 3MB 的二进制文件能够处理从 lint 到 JIT 编译的几乎所有现代操作系统上的任务,这对开发者体验(DX)来说是一个吸引人的愿景。然而,该项目在 AI 时代也成为了软件发布现状的警示故事。当“承诺的功能”与“设计透明度”之间的差距变得过大时,社区的本能是从好奇转向怀疑。