Rust vs. Go に対する @tanakh さんの発言まとめ

「NTPsecに採用するプログラミング言語をRustかGo言語で悩んでいるが、Go言語の方が有力ではないか」というNTPsec公式ブログ記事「Rust vs. Go」 https://blog.ntpsec.org/2017/01/18/rust-vs-go.html に対する @tanakh さんの反応
18
Hideyuki Tanaka @tanakh

ちょっと前にNTPSecがCからRustかGoに移行するって言う話の続きで比較結果Goにしようとしているみたいです。詳しくは読んでないけど。 / “Rust vs. Go” htn.to/HtCqcQ

2017-01-20 20:25:51
Hideyuki Tanaka @tanakh

Rust vs Goの一事例をとりあえず適当に要約してみるか~。(´・_・`)

2017-01-20 20:28:18
Hideyuki Tanaka @tanakh

・学習曲線:NTPSecのコントリビューターは元Cプログラマーが多いはずなので、そこからのラーニングカーブがゆるいほうがいい。Goは明らかにC言語ユーザーを意識している。Rustはオウナーシップがワケワカメ。4日勉強したけどまだ分からん。GOに+1点。

2017-01-20 20:28:48
Hideyuki Tanaka @tanakh

(´・_・`).oO(オウナーシップが分かんないから、Rustを減点するって言うのは、とっても残念な意見だなあと言う感想で、NTPSecのようなセキュリティが特に重要なアプリケーションでは、まさにそのオウナーシップが特に重要な利益をじわじわもたらしてくれるはずなんだがなあ…)

2017-01-20 20:31:06
Hideyuki Tanaka @tanakh

・変換距離(Cからのコード変換にかかるコストのこと?):6万2千行のコードをRustかGoに移行しなければならない。これは大変な仕事だ。Goはここで+1ポイント。RustのオウナーシップのようなものをCのコードに持ち込まなくて良いから。(続く

2017-01-20 20:34:50
Hideyuki Tanaka @tanakh

しかしこれは逆転するかも知れない。Rustへの変換にCorrodeという自動変換ツールを使うっていうのを試してみる必要がある。もしこれがうまく動くなら、Rustに+3ポイント。しかしこれもGoの全然ドキュメントがないc2goというツールが使えれば、また逆転するかも知れない。

2017-01-20 20:36:41
Hideyuki Tanaka @tanakh

(´・_・`).oO(Corrode, 僕も使って見たんですが、まずほとんどのプロジェクトでうまく動かないです…。サポートしてない構文が多すぎるし、gccの引数もうまくハンドルできないので、そこも直さないとそもそもコマンド起動すら出来ないプロジェクト多いですね…。)

2017-01-20 20:37:39
Hideyuki Tanaka @tanakh

並行性:(なんかNTPには必要な理由)Rustは伝統的なmutexロックされた共有状態をオウナーシップシステムを介して使える。CSPチャンネルもある。GoはCSPチャンネルをコアプリミティブとして持ってる。mutexもライブラリにある。(続く

2017-01-20 20:43:05
Hideyuki Tanaka @tanakh

Rustのネイティブな共有状態は小うるさくて、CSPにくらべて無駄にややこしい気がするし、そもそもmutexとかのプリミティブはあらゆる言語で欠陥構造だと知られている。Rust設計者にCSPに軌道修正するように助言を与えたいし、GoはそもそもCSPが組み込まれてるので+1

2017-01-20 20:49:34
Hideyuki Tanaka @tanakh

(´・_・`).oO(mutexが欠陥であると知られているのはまさにそれをなるべく安全にするためにRustのMutexが複雑になっている理由だが、それはそれとしてCSP至上主義とかそれさえ有れば良いみたいな主張は僕は違うと思うし、いろんな道具が使えた方が良いはずだ…。)

2017-01-20 20:51:20
Hideyuki Tanaka @tanakh

組み込みデプロイ:Rustの0オーバーヘッド抽象化は明らかにリソースの限られた組み込みシステムにデプロイするのにマッチする。Rustに+1。 しかしこれは何の価値もない。GoogleがAndroid開発プラットフォームをより強固なものにするために、これを改善するに違いないからだ。

2017-01-20 20:54:15
Hideyuki Tanaka @tanakh

また、GCを持つ言語は、Rustほど組み込みにマッチしないが、Google様がその神通力を発揮してGoチームは大変な才能をそのために注ぎ込んでいるので、Rustのこのアドバンテージも危ういものだろう。

2017-01-20 20:58:03
Hideyuki Tanaka @tanakh

(´・_・`).oO(何言ってんのこの人…。)

2017-01-20 20:58:14
Hideyuki Tanaka @tanakh

こんなモン比較でも何でもないやろが(´・_・`)読んでソンした気持ちになってきたね

2017-01-20 20:58:53
Hideyuki Tanaka @tanakh

イヤ、ホントにね。それなりに大きな(Cの)ソフトを書いている人が、RustとGoを真剣比較して、その結果Goを選びましたって言う記事でね。どうしてそう言う考えに至ったのかを知ることは非常に勉強になるのではないかと思ったら、この記事の人が勉強してくれ言う感じにしか読めなくて辛い

2017-01-20 21:03:58
Hideyuki Tanaka @tanakh

レイテンシー、ソフトリアルタイム性能:ゼロオーバーヘッド抽象とGCの停止時間が無いので明らかにRustが+1ポイント。 しかしこれにも何の意味もない。(略略略

2017-01-20 21:08:23
Hideyuki Tanaka @tanakh

(´・_・`)何夜年この記事わっ

2017-01-20 21:08:40
Hideyuki Tanaka @tanakh

セキュリティーと安全性:RustもGoも強い型システムを持っていて、バッファオーバーランとかステール参照とかのCでは頻発するバグを防げる。アプローチはそれぞれ異なる。GoはGCに頼り、RustはRAIIライクなモデルで正しさを保障する。 Rustはここで+1。(続く

2017-01-20 21:12:56
Hideyuki Tanaka @tanakh

不変性が(型として)現われているのは、ランタイムによるものに比べてreason(なんて訳せば良いのだろ)しやすい。(それが原理的にはオープンソースとして公開されているのであれば、可能であるにしても。)

2017-01-20 21:15:13
Hideyuki Tanaka @tanakh

(´・_・`).oO(GCのおかげでメモリ安全性が保たれるというのは、これは実装依存の性質じゃなくて言語仕様上の話だと思うのですがこれは…。ランタイムの実装みなきゃ正しいのか分からんっていうのは、型システムだって実装見なきゃ正しさ分かんないって言ってるのと同じじゃないの…。)

2017-01-20 21:16:14
Hideyuki Tanaka @tanakh

でまあなんかRustを4日間やってみて、IRCサーバーを書いたりしたらしいですが、思ったより学習曲線が良くなくて、67行のサーバーのラッパーを核だけでなんかしんどかったとか、文字列の連結だけでも難しかったり、何もしないうちから大変めんどかったらしい。

2017-01-20 21:21:40
Hideyuki Tanaka @tanakh

Goと比べると明らかで、同じく4日書いただけでGoを完全にマスター出来たらしい。なるほどなあっ…(´・_・`)

2017-01-20 21:22:50
Hideyuki Tanaka @tanakh

まあとにかく学習曲線がどうのっていうのがひたすら書いてあって、どれを解決するためのドキュメントとかチュートリアルも見当たらなかったそうです。(´・_・`)

2017-01-20 21:25:04
Hideyuki Tanaka @tanakh

んでめっちゃコメント欄もあれてるゾ~(´・_・`)

2017-01-20 21:27:35
Hideyuki Tanaka @tanakh

コメント欄もひどいぞ~ > Rustの好きじゃないところは、x86ぐらいしかまともにサポートできてないところ。モジラは十分なリソースがない。その点Googleはリソース豊富であらゆるアーキサポートしている > 明らかな間違い広めるのは辞めていただきたい。これは単純に嘘だ。

2017-01-20 21:30:40