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. Designed; not yet implemented.
memory
Go
GC handles everything. Escape analysis decides heap vs stack. No manual free.
Tape
Compiler-inserted drops for managed types in t1. Manual memory in t0. GC is opt-in in t1 and standard in t2.
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