Open4
RustとGoを比較、そこからわかるそれぞれの適正

読んだ記事について
こういう人が読むと役立つぞ
- Rustは知ってるけどGo言語よく知らない人
- Go言語知ってるけどRustよく知らない人
- そもそも両方知らない人
- バックエンドでRustが注目され始めてるけど結局Go言語とどっちがいいのかよくわからん人

言語のだいたいの特徴
Rust
- Rustは以下の特徴をもつ言語である
- 安全性
- 並行性
- 性能重視
- システムプログラミング言語
- C/C++のような言語と同様な、システムのリソースやメモリに対する低レベル制御を提供する設計をされている
- 強力な型システムを持つ
-
所有権という概念を持つメモリ使用のモデル
- メモリ使用の最適化ができる
- ガベージコレクタを必要としない効率的なコードの記述が可能
Go
- 大規模ソフトウェアプロジェクトにおける生産性・使いやすさの向上のためにGoogleが開発した静的型付けコンパイル言語
-
シンプルさを念頭に置いた設計をされている
- そのため、class、配列に関するメソッドの有無などで他言語と様々な違いがある
- PythonやRubyのような構文の書きやすさ、C/C++といったコンパイル言語の性能という2つの要素のバランスを取った言語
- GoRoutineという効率的なガベージコレクタと並行処理のための仕組みがある

言語の機能的特徴
Rust
- 所有権システム
- パターンマッチ
- 型推論
- マクロ
Go
- ゴルーチン
- チャネル
- インターフェイス
- ガベージコレクション

個人的な所感
両方に言えること
- 細かい違いを無視したらマクロもゴルーチンも似てる
- 特定のタスクのために動的に対応しやすいという意味
- Rustのマクロの仕様を考えた時に、マクロの実行に失敗したときに、そこの不具合によって発生した脆弱性に対して攻撃が行われる可能性はあるのかどうか気になる
- 共通してこれまでの言語の問題だったメモリの問題に着目し、それを解決する言語の仕組みを整えている
- 余談だが、GoogleはC++の大きな技術的負債を見て、C++と互換性のあるCarbonという言語を開発しているが、それに関する説明の中で「Rustが使えるならそっちでいい(意訳)」と言及しているため、GoogleからみてもRustのシステムは高く評価できるものらしい
Rust
- めっちゃ堅牢なもの作ることについてはメッチャ適正ある
- エラーハンドリングについてはもう言うこと(指摘点)がないんじゃない...?と思ってる
- ただ...めっちゃ書くのが...大変...
- 本当にこれだけが大変、でもしょうがない。
- そういう意味で小さいモノ作るためにわざわざ使わないかな...(個人としての所感です)
- 向いているとしたら、ガチでちゃんと動いてくれんと困るもの
- 業務上の基幹システム
- そこまでゴリゴリとリクエストがこないけどめちゃくちゃ重要なデータ扱うもの
- Classの概念がないけど、Traitとかでそれっぽいことができなくはない
Go
- 圧倒的に書きやすい
実は卒業研究でWebAssemblyを扱っているが、一度Rustを使った後に、Goに言語を変更した理由の一つに「Goという言語の書きやすさ」があった。- 構造体とメソッドを組み合わせるようなオブジェクト指向をやろうとすると、構造体と関数の紐づけでしんどいかも
- Googleが言い出した通り、「大規模」に適性があるなと思う
- 言語の仕組みという意味で適性がある
- 小さいものから大きいモノを作ることまで、使いやすさでかなり人気を集められそう
- 書きやすさの面での話
- SNSのサーバとかにめっちゃ向いてそう