Borgo is a statically typed language that compiles to Go
What “compiles to Go” means
- Many argue Borgo is a transpiler (source-to-source compiler) since it emits Go code, but note that transpilers are just a subset of compilers.
- Some see the compiler/transpiler distinction as largely useless or fuzzy; others like “transpiler” to signal human-readable target code and the expectation of using another toolchain afterward.
- A meta-discussion emerges about how programmers over-attach to poorly defined terminology.
Why target Go at all
- Main rationale: leverage Go’s strong runtime, GC, standard library, tooling, deployment story, and module ecosystem while improving type safety and language ergonomics.
- Targeting Go lets Borgo interoperate with existing Go packages and ease adoption in Go shops.
- Some ask why not target C++ or Rust instead; responses stress that Go’s runtime and concurrency model are easier to map to, and that many users want “Go, but safer,” not a different systems language.
Type system, enums, and sum types
- Strong interest in Borgo’s Rust-like enums / sum types, Option/Result, and exhaustive pattern matching, which many see as the biggest missing pieces in Go.
- Long debate over what “enums” really are: classic numeric enumerations vs. tagged unions / algebraic data types.
- Several argue Go’s
iota-based constants are only a partial substitute and don’t support exhaustiveness checking or constrained value sets. - Some worry Borgo’s sum types with a zero value (via
zeroValue()) undermine the safety users want from them.
Error handling philosophies
- Go’s
if err != nil { ... }is defended as explicit and good for reliability, but criticized as verbose and visually noisy. - Exceptions / try-catch are both praised (for propagation and stack traces) and condemned (for hiding control flow and encouraging laziness).
- Result/Option with a
?-style operator is widely liked by fans of Rust-like ergonomics; others fear it will encourage thoughtless “bubble up the error” behavior.
Rust vs Go vs “Borgo in the middle”
- Some see Borgo’s niche as “more type-safe than Go, less complex than Rust,” particularly avoiding Rust’s ownership and lifetime system while retaining ADTs and good error handling.
- Others argue Go’s simplicity and minimalism are core virtues, and adding these features risks losing what makes Go effective, especially for teams with many junior developers.
Adoption, tooling, and maturity
- Enthusiasm from Go developers who say Borgo directly addresses their pain points (enums, nil, error handling).
- Skepticism due to stalled development (no commits in months) and lack of clear tooling story (LSP, Treesitter, etc.).
- Broader reflection that many Go-to-X or “X to Go” experiments (Borgo, Oden, others) exist, but none have yet gained mainstream traction.