Repolode
aardappel

aardappel/goose

一门无堆分配器、无垃圾回收的实验性系统编程语言,由编译器管理数据栈以保证内存安全。

Star
3,146
Fork
132
未关闭 Issue
48
最近提交
昨天

这是什么?

Goose 是一门语法接近 C 和 Rust 的编程语言,但不使用堆内存。所有动态值都内联存放在编译器静态管理的数据栈上,数据增长只是移动指针,作用域结束时内存即被释放。语言中没有分配器、垃圾回收、引用计数、析构函数、生命周期标注,也没有 unsafe 代码块。

语言提供只增长和可增可减两类数组,数组增长时其引用保持有效;相对引用以 1、2 或 4 字节偏移量存储;枚举可按各变体的实际大小存放。线程以独立程序运行、拥有各自的内存,通过类型化队列传递扁平数据。编译器输出一个 C 文件,并可通过 extern fn 直接调用 C,内置的 TinyCC 后端还能在进程内直接运行程序。

项目提供教程、语言参考与规范、涵盖图形、物理和 UI 的标准库、三十一个示例程序,以及与 C++ 和 Rust 的基准测试。作者说明,仓库代码主要借助 AI 完成,语言设计由人完成。

核心功能

  • 01内存由编译器分配的数据栈管理,不使用堆分配或垃圾回收。
  • 02只增长数组,扩容后引用依然有效。
  • 03相对引用以 1、2 或 4 字节偏移存储,数据与位置无关。
  • 04可变大小枚举和无指针的内联嵌套数据。
  • 05线程拥有独立内存,通过类型化队列通信。
  • 06通过 extern fn 直接调用 C,并输出单个 C 文件。

适用场景

  • 探索无垃圾回收、无手动释放的系统级内存模型。
  • 编写解析器、图结构等数据密集型程序,利用内联布局。
  • 研究语言设计与实现,或作为 AI 辅助开发项目的参考。
  • 使用内置的 gfx 和 physics 模块开发小型图形或物理程序。

使用前须知

  • 元数据将该语言描述为实验性项目,因此可能会有变化。
  • 可变大小元素组成的数组只能迭代,不能直接按索引访问。
  • 可见的 README 文本中没有安装或运行命令,因此这里不列出安装步骤。

收录于专题

标签

常见问题

goose 是什么?
一门无堆分配器、无垃圾回收的实验性系统编程语言,由编译器管理数据栈以保证内存安全。 Goose 是一门语法接近 C 和 Rust 的编程语言,但不使用堆内存。所有动态值都内联存放在编译器静态管理的数据栈上,数据增长只是移动指针,作用域结束时内存即被释放。语言中没有分配器、垃圾回收、引用计数、析构函数、生命周期标注,也没有 unsafe 代码块。
goose 可以免费使用吗?用的什么许可证?
goose 以 Apache-2.0 许可证开源。用于商业产品前,请先确认许可证条款。
goose 还在维护吗?
活跃维护中。goose 最近一次提交是在 2026年11月6日。
goose 适合用来做什么?
探索无垃圾回收、无手动释放的系统级内存模型。 编写解析器、图结构等数据密集型程序,利用内联布局。 研究语言设计与实现,或作为 AI 辅助开发项目的参考。 使用内置的 gfx 和 physics 模块开发小型图形或物理程序。
在哪里获取 goose?
源代码和安装说明在 GitHub 上:https://github.com/aardappel/goose

概要由 AI 根据项目 README 生成;GitHub 数据每日更新。

相关项目