aardappel/goose
开发工具一门内存安全、无堆、无 GC、无需生命周期标注并编译到 C 的系统编程语言。
Goose 是一门面向底层、数据密集型场景的新编程语言,目标用户是希望内存行为可预测、又不想要垃圾回收器或分配器的 C 与 Rust 程序员。它是一个用 C++ 编写的全程序编译器,配套有规范、标准库、31 个示例程序和测试套件。README 明确说明它仍处于早期阶段。
工作流程上的变化
它没有堆。所有动态值都内联存放在编译器分配的数据栈上,增长只需推进指针,作用域结束时释放内存。指向只增长数组的引用在数组增长后依然有效,因此常见的 vector 重分配错误不会发生。编译器推断每个引用的根,拒绝可能比其所有者活得更久的引用,所以没有生命周期语法,也没有 unsafe 代码块。像嵌套订单记录这样的数据保持连续存放,而不是变成指向独立缓冲区的指针,README 称这解释了相当一部分内存和速度优势。
代价是你必须考虑数据存放在哪里、作用域持续多久。递归函数不能在递归调用之间保留可增长数据;变长元素数组可以遍历但不能按下标索引;除枚举标签外没有逃逸闭包、函数指针或动态派发。归还到池中的槽位若仍被引用,读到的是下一个所有者写入的值——这是逻辑 bug,但不会造成内存破坏。教程的限制章节有更完整的清单。
Goose 编译为单个 C 文件,并通过 extern fn 直接调用 C,因此凡有 C 工具链的地方都能用。内置的 TinyCC 后端无需构建步骤即可在进程内运行程序;而使用线程的程序以及基于包的图形、音频、物理模块必须构建成可执行文件。
运行条件
官方为 Windows x64、Linux x64 和 macOS(Apple silicon 与 Intel)提供预编译编译器。在进程内运行在 Linux 上需要 C 库头文件(libc6-dev),在 macOS 上需要 Xcode 命令行工具;goose build 还需要 C 编译器。Linux 版要求 glibc 2.35 及以上,macOS 版要求 13.3 及以上,且下载的 macOS 归档必须先清除 quarantine 属性,其中的文件才能运行。从源码构建需要 CMake 3.27+、C++20 编译器和用于测试运行器的 Python 3。编辑器支持包括 VS Code 扩展以及供其他编辑器调用的语言服务器。
性能声明及其范围
README 的速度和内存数字来自项目自有的 16 项基准测试,按整进程墙钟时间(含清理)测量,对比对象是惯用 C++、手工优化 C++ 和安全的 Rust。项目同时公布了 Goose 落败的用例,因此这些倍率应视为针对特定基准,而非通用结论。
状态与许可
Goose 自称为新项目。目前只支持全程序编译,作者将可增长值的移动、每个结构体只能有一个可增长值、带标签的 break、命名空间私有性以及更广泛的 OS/库访问列为暂不实现。README 说明该仓库几乎完全由 AI 生成,语言设计出自 Wouter van Oortmerssen。采用 Apache-2.0 许可。
2026-09-18 的 Hacker News 讨论被提交者本人请求下沉,原因是语言还缺少他希望在发帖前补上的部分;读者也批评 README 的 AI 生成文风。
HotRepo 点评
Goose 在 2026-10-31 记录的那一周以 +1,235 登上 C++ 周榜第 1,但仅有一天样本,无法判断关注是否持续。现阶段合理用途是评估这门语言及其文档化设计,而不是迁移生产代码。
本文由 AI 根据项目 README 生成,更新于 2026年10月31日,以项目官方文档为准。