Golang
A Tour of Go の Concurrencyの章を読んだ. 「goroutineによるランタイムレベルの軽量スレッド」と「channelによるスレッド間通信」がGolangの平行処理サポートの特徴という印象を受けた. 雑に扱っても良い感じに動いて便利.
これで A Tour of Go を読み終わったので, 以前体系的に学んだ言語 (JavaScript/TypeScript/Java/Scala/Rust) と比較しつつ, A Tour of Go を読んで感じたGolangの特徴を纏めてみた.
- GCがある
interface
による構造的部分型のサポート- 静的型付け
- スタックやヒープを意識しなくて良い
- (メモリ安全な) ポインタがある
- null安全でない
- ジェネリクスがない
- 式指向でない
- Errors are values
- ランタイムレベルの軽量スレッド
- channelによるスレッド間通信
最近の言語で一般に良しとされているもの (静的型付け/(Errors are valuesによる)例外の排除) がある一方で, 一般に良しとされてないもの (null安全でない/ジェネリクスがない) もある. この辺はGolangの思想が影響しているのかな.