Why Go?

Context: Porting, Not Rewriting

  • The team frames this as a port of the existing JS/TypeScript compiler, not a greenfield rewrite.
  • Priority is preserving semantics and even code structure so changes can be mirrored between JS and native versions.
  • Languages that require rethinking memory management, data structures, or polymorphism are seen as better for rewrites than ports.

Why Go Was Chosen (Per the Thread)

  • Idiomatic Go (functions over classes, simple structs, explicit data passing) is described as very close to the current TS checker style, which uses no classes and is mostly pure-ish functions over data.
  • This structural similarity makes the port “nearly indistinguishable” from the original code, easing maintenance and contributor onboarding.
  • Go delivers native binaries with an embedded runtime and fast startup, avoiding the friction of requiring a separate runtime installation.
  • Internal experiments reportedly found Rust and Go performance to be within the margin of error, with different phases favoring each.

Debate: Why Not C#?

  • Some argue C# has strong AOT, good memory control, and could match or exceed Go, questioning the “AOT not mature enough” rationale.
  • Others counter that requiring .NET on all platforms (especially Linux CI) is a serious adoption barrier compared to a single Go binary.
  • There is disagreement over how big a deal it is that C# is more class-oriented:
    • One side: you can write function+data-style C# with static classes and extension methods.
    • Other side: that would be non-idiomatic and socially costly for long-term maintenance.
  • Many see the choice as symbolically damaging for C#, reading it as Microsoft “not trusting its own stack”; others call this overreaction and emphasize picking the best tool for TS, not for C#’s brand.

Debate: Why Not Rust?

  • The TS team’s stated concerns: cyclic data structures and custom memory patterns are hard to port directly; Rust would force deeper redesign.
  • Rust advocates in the thread say these problems are solvable with existing crates and that the evaluation likely involved insufficient Rust expertise.
  • Several commenters stress Rust’s higher complexity and slower compile times; Go is praised for very fast builds and low conceptual friction.
  • Some argue Rust would offer a better WebAssembly story; others note WASM is only one of several priorities, and port-friendliness won.

Go vs Other Options & Community Reactions

  • Brief mentions of Crystal, Java+GraalVM, and Java/C# as technically viable but with less mature tooling for this exact use case or worse deployment story.
  • Observers note two loud “camps”:
    • C# users worried about the ecosystem’s future.
    • Rust fans frustrated anything in this space isn’t using Rust.
  • Others welcome the decision as a rare example of a big-company project ignoring “not invented here” and language politics in favor of pragmatic fit.