Repolode
aardappel

aardappel/goose

A experimental systems programming language with no heap allocator or garbage collector, using compiler-managed data stacks for memory safety.

Stars
3,146
Forks
132
Open issues
48
Last commit
2 days ago

What is it?

Goose is a programming language with C- and Rust-like syntax that has no heap. Every dynamic value lives inline on data stacks that the compiler manages statically: growth advances a pointer, and memory is freed when its scope ends. There is no allocator, garbage collector, reference counting, destructors, lifetime annotations, or unsafe block.

The language provides grow-only and grow-shrink arrays whose references stay valid as they grow, relative references stored as 1, 2 or 4-byte offsets, and enums that can be stored at the size of each variant. Threads run as separate programs with their own memory and exchange flat values through typed queues. The compiler emits one C file and can call C directly through extern fn, with a bundled TinyCC backend that runs programs in-process.

The project includes a tutorial, language reference and specification, a standard library covering graphics, physics and UI modules, thirty-one sample programs, and benchmarks against C++ and Rust. The project's author notes that the repository was produced largely with AI assistance from a human-written language design.

Key features

  • 01Memory managed by compiler-assigned data stacks, with no heap allocation or GC.
  • 02Grow-only arrays where references remain valid after growth.
  • 03Relative references stored as 1, 2 or 4-byte offsets, enabling position-independent data.
  • 04Variable-size enums and inline nested data with no pointers.
  • 05Threads with separate memory, communicating via typed queues.
  • 06Direct calls to C through extern fn, and compilation to a single C file.

Use cases

  • Exploring memory models for systems code without a garbage collector or manual frees.
  • Writing data-heavy programs such as parsers or graph structures that benefit from inline layout.
  • Studying a language whose compiler and docs were built largely with AI assistance.
  • Building small graphics or physics programs using the bundled gfx and physics modules.

Things to know

  • The metadata describes the language as experimental, so expect changes.
  • Arrays of variable-size elements can be iterated but not indexed directly.
  • The README gives no install or run commands in the visible text, so setup steps are not listed here.

In collections

Topics

FAQ

What is goose?
A experimental systems programming language with no heap allocator or garbage collector, using compiler-managed data stacks for memory safety. Goose is a programming language with C- and Rust-like syntax that has no heap. Every dynamic value lives inline on data stacks that the compiler manages statically: growth advances a pointer, and memory is freed when its scope ends. There is no allocator, garbage collector, reference counting, destructors, lifetime annotations, or unsafe block.
Is goose free to use? What license does it have?
goose is open source under the Apache-2.0 license. Check the license terms before using it in commercial products.
Is goose still maintained?
Actively maintained. The last commit to goose was on Nov 6, 2026.
What can I use goose for?
Exploring memory models for systems code without a garbage collector or manual frees. Writing data-heavy programs such as parsers or graph structures that benefit from inline layout. Studying a language whose compiler and docs were built largely with AI assistance. Building small graphics or physics programs using the bundled gfx and physics modules.
Where can I get goose?
The source code and installation instructions are on GitHub: https://github.com/aardappel/goose

Summary generated by AI from the project's README. GitHub stats refresh daily.

Related projects