Will Do
Thoughts on technology, the world, and life.

Go Raised The Bar

Go raised the bar for new language distributions:

  • UTF-8 code
  • Testing, benchmarking, and profiling built in
  • Single command line tool
  • Build tool that leaves code directories clean
  • Package manager
  • Package doc browser
  • Standard code style and formatter
  • Fast builds
  • Language spec with grammar and thorough library documentation
  • Uniform, batteries-included standard library
  • Concurrency support and automatic parallelism, sync and atomic libs, race detector
  • Interfaces, not inheritance
  • Vendoring support
  • Cross compilation
  • Static linking only for simple deployments
  • Tabs, not spaces
  • No semicolon line terminators
  • Trailing commas in lists to minimize diffs
  • Static types
  • Default values for uninitialized variables
  • Built-in comparisons and hashing
  • Safety (e.g. bounds checking)
  • Managed memory (uses GC, but could use ARC)
  • Simple encapsulation model (package level only)
  • Use of lower-vs-uppercase for meaning (exports in this case)
  • Simple selective build inclusion with tags and file name suffixes
  • Built-in code generation
  • Packages buildable without make files, just code
  • “Panic” program crashes for programmer errors
  • No unused local variables or imports
  • No build warnings or other output noise
  • Qualified imports only (idiomatically)

If it doesn’t do these, it’s already outmoded. Looking at you, Swift.

π