mizdra's poem

雑なこと (日記/技術ポエム/メモ/…) を書くブログです.

2018-08-06

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の思想が影響しているのかな.