← back

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