← 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. 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