Rust vs. Go に対する @tanakh さんの発言まとめ
ちょっと前にNTPSecがCからRustかGoに移行するって言う話の続きで比較結果Goにしようとしているみたいです。詳しくは読んでないけど。 / “Rust vs. Go” htn.to/HtCqcQ
2017-01-20 20:25:51・学習曲線:NTPSecのコントリビューターは元Cプログラマーが多いはずなので、そこからのラーニングカーブがゆるいほうがいい。Goは明らかにC言語ユーザーを意識している。Rustはオウナーシップがワケワカメ。4日勉強したけどまだ分からん。GOに+1点。
2017-01-20 20:28:48(´・_・`).oO(オウナーシップが分かんないから、Rustを減点するって言うのは、とっても残念な意見だなあと言う感想で、NTPSecのようなセキュリティが特に重要なアプリケーションでは、まさにそのオウナーシップが特に重要な利益をじわじわもたらしてくれるはずなんだがなあ…)
2017-01-20 20:31:06・変換距離(Cからのコード変換にかかるコストのこと?):6万2千行のコードをRustかGoに移行しなければならない。これは大変な仕事だ。Goはここで+1ポイント。RustのオウナーシップのようなものをCのコードに持ち込まなくて良いから。(続く
2017-01-20 20:34:50しかしこれは逆転するかも知れない。Rustへの変換にCorrodeという自動変換ツールを使うっていうのを試してみる必要がある。もしこれがうまく動くなら、Rustに+3ポイント。しかしこれもGoの全然ドキュメントがないc2goというツールが使えれば、また逆転するかも知れない。
2017-01-20 20:36:41(´・_・`).oO(Corrode, 僕も使って見たんですが、まずほとんどのプロジェクトでうまく動かないです…。サポートしてない構文が多すぎるし、gccの引数もうまくハンドルできないので、そこも直さないとそもそもコマンド起動すら出来ないプロジェクト多いですね…。)
2017-01-20 20:37:39並行性:(なんかNTPには必要な理由)Rustは伝統的なmutexロックされた共有状態をオウナーシップシステムを介して使える。CSPチャンネルもある。GoはCSPチャンネルをコアプリミティブとして持ってる。mutexもライブラリにある。(続く
2017-01-20 20:43:05Rustのネイティブな共有状態は小うるさくて、CSPにくらべて無駄にややこしい気がするし、そもそもmutexとかのプリミティブはあらゆる言語で欠陥構造だと知られている。Rust設計者にCSPに軌道修正するように助言を与えたいし、GoはそもそもCSPが組み込まれてるので+1
2017-01-20 20:49:34(´・_・`).oO(mutexが欠陥であると知られているのはまさにそれをなるべく安全にするためにRustのMutexが複雑になっている理由だが、それはそれとしてCSP至上主義とかそれさえ有れば良いみたいな主張は僕は違うと思うし、いろんな道具が使えた方が良いはずだ…。)
2017-01-20 20:51:20組み込みデプロイ:Rustの0オーバーヘッド抽象化は明らかにリソースの限られた組み込みシステムにデプロイするのにマッチする。Rustに+1。 しかしこれは何の価値もない。GoogleがAndroid開発プラットフォームをより強固なものにするために、これを改善するに違いないからだ。
2017-01-20 20:54:15また、GCを持つ言語は、Rustほど組み込みにマッチしないが、Google様がその神通力を発揮してGoチームは大変な才能をそのために注ぎ込んでいるので、Rustのこのアドバンテージも危ういものだろう。
2017-01-20 20:58:03イヤ、ホントにね。それなりに大きな(Cの)ソフトを書いている人が、RustとGoを真剣比較して、その結果Goを選びましたって言う記事でね。どうしてそう言う考えに至ったのかを知ることは非常に勉強になるのではないかと思ったら、この記事の人が勉強してくれ言う感じにしか読めなくて辛い
2017-01-20 21:03:58レイテンシー、ソフトリアルタイム性能:ゼロオーバーヘッド抽象とGCの停止時間が無いので明らかにRustが+1ポイント。 しかしこれにも何の意味もない。(略略略
2017-01-20 21:08:23セキュリティーと安全性:RustもGoも強い型システムを持っていて、バッファオーバーランとかステール参照とかのCでは頻発するバグを防げる。アプローチはそれぞれ異なる。GoはGCに頼り、RustはRAIIライクなモデルで正しさを保障する。 Rustはここで+1。(続く
2017-01-20 21:12:56不変性が(型として)現われているのは、ランタイムによるものに比べてreason(なんて訳せば良いのだろ)しやすい。(それが原理的にはオープンソースとして公開されているのであれば、可能であるにしても。)
2017-01-20 21:15:13(´・_・`).oO(GCのおかげでメモリ安全性が保たれるというのは、これは実装依存の性質じゃなくて言語仕様上の話だと思うのですがこれは…。ランタイムの実装みなきゃ正しいのか分からんっていうのは、型システムだって実装見なきゃ正しさ分かんないって言ってるのと同じじゃないの…。)
2017-01-20 21:16:14でまあなんかRustを4日間やってみて、IRCサーバーを書いたりしたらしいですが、思ったより学習曲線が良くなくて、67行のサーバーのラッパーを核だけでなんかしんどかったとか、文字列の連結だけでも難しかったり、何もしないうちから大変めんどかったらしい。
2017-01-20 21:21:40まあとにかく学習曲線がどうのっていうのがひたすら書いてあって、どれを解決するためのドキュメントとかチュートリアルも見当たらなかったそうです。(´・_・`)
2017-01-20 21:25:04コメント欄もひどいぞ~ > Rustの好きじゃないところは、x86ぐらいしかまともにサポートできてないところ。モジラは十分なリソースがない。その点Googleはリソース豊富であらゆるアーキサポートしている > 明らかな間違い広めるのは辞めていただきたい。これは単純に嘘だ。
2017-01-20 21:30:40