Coming from Go
Tape shares Go's commitment to simplicity and fast compilation. The biggest differences: no GC, no goroutines, and UI is a first-class concern.
generics / code generation
Go
Resisted generics for years, added them in 1.18. go generate for code gen.
Tape
Never adding generics. @tape {} is built-in code generation — same language, runs at compile time, type-safe.
concurrency
Go
Goroutines + channels. M:N scheduling. Lightweight, implicit.
Tape
Explicit worker threads with typed emits channels. No scheduler magic. You see every thread boundary.
memory
Go
GC handles everything. Escape analysis decides heap vs stack. No manual free.
Tape
Compiler-inserted drops for managed types (t1). Manual memory in t0. Optional GC only in t2 scripting profile.
error handling
Go
val, err := foo() then if err != nil. Verbose, easy to forget.
Tape
let val = foo() or return — one line. Compiler won't let you ignore the error.
what stays the same
- - Simple language with few keywords
- - Fast compilation (single binary compiler)
- - No inheritance, composition over hierarchy
- - Structural interfaces (has .next()? iterable)
- - Produces a single static binary