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.