はじめに
FFRIリサーチエンジニアの中川です。
今回は 11 月 7 日にFFRIと株式会社エヌ・エフ・ラボラトリーズで共同で開催した Rust 勉強会について報告します。
簡単にこの勉強会開催の背景について説明します。
FFRIでは昨年から社内で Rust を利用しています。Rust は速度・並行性・安全性にフォーカスしたシステムプログラミング言語で、脆弱性を作り込みにくいという点からFFRIでも利用する・関心を持つ方が増えてきています。今回の勉強会は、社内エンジニアにより一層 Rust のことを知ってもらう・使ってもらうことを目的として、Rust 使いの有志が開催したものになります。
また、この勉強会開催のもう一つの目的として技術交流があります。昨年 NTT コミュニケーションズ株式会社と合同設立した、株式会社エヌ・エフ・ラボラトリーズのエンジニアと弊社エンジニアとの技術的な交流をより一層深めることも一つの目的となっています。
今回、私も含め発表は 4 件、うち 3 件はFFRIから、1 件はエヌ・エフ・ラボラトリーズからの発表でした。以下では発表の内容を簡単に紹介し、振り返っていきます。
Rust 入門
最初に Rust を書いたことの無い人向けの発表が 2 件ありました。
最初にFFRIの押場さんから他言語を書いている人向けに「How Rust differs?」というタイトルで発表がありました。
他のプログラミング言語を書いている人が Rust を書き出したときに躓くのは所有権にまつわるコンパイルエラーだと思います。
そういったエラーに遭遇した際に修正すべき点を、エラーメッセージから判別できるようになるために必要な知識について発表がありました。
その他 Rust におけるジェネリクスについても詳細な説明がありました(図 1)。
次にエヌ・エフ・ラボラトリーズの河合さんより Rust の基本的な文法についての発表がありました。
河合さんは個人のアプリケーション開発において Rust を利用されているようです。これまで使ってきたプログラミング言語の中で 1 番 Rust が好みとのことです。
発表では、基本的な文法・所有権・メソッドチェインを使った書き方などについて紹介が行われました。最後に発表の内容を理解しているのかを見るための演習問題が出されました(図 2)。
発表を聞きながら私も演習問題に取り組んでいましたが、一部の問題を間違えてしまいました。まだまだ修行が足りないようです。
Rust と C の性能比較
次に私が「IoT 機器向けベンチマークを使った C と Rust の性能比較」というタイトルで発表しました。
「Rust で C/C++ 並の速度を出せるアプリケーションを書ける」との記述をよく見かけますが、それを検証した結果について報告しました。
調査したところ、コンパイルオプションを適切に調整すれば、Rust と C でほぼ同程度の性能になることがわかりました。また、C と Rust の実行バイナリの逆アセンブル結果を比較し、性能に差がでる要因について調査した結果についても報告しました。
バイナリサイズについては、デフォルトで標準ライブラリを静的リンクする関係から、Rust は C に比べバイナリサイズが肥大化する傾向にあることがわかりました。この点は標準ライブラリを動的リンクに変更・デバッグシンボルの strip を実施してある程度改善することができます。
Rust を使った開発における課題
最後にFFRIの北村さんからは「Rust を使った開発における課題」というタイトルでの発表がありました。
北村さんは過去に開発において rustc のバージョンアップデートにより一部のライブラリがビルドできなくなる事態に遭遇したとのことで、今回はその問題への対処についての発表が行われました。
対処法の一つとして、tool chain fileを使い、特定のディレクトリ配下の rustc のバージョンを固定する方法が紹介されていました。
私は Rust を使っていてこうした破壊的変更に遭遇したことがこれまでなく、発表において紹介されていた対処法のほとんどは知らなかったため、大変勉強になりました。長期間に渡ってメンテナンスが必要となるソフトウェア開発を行う上で、参考になる発表内容でした。
おわりに
今回はトータルで 15 人ほどの参加で (一部は Slack によるリモートからの参加)、各発表の後には活発な質疑応答が行われるなど盛況に終わりました。発表してくださった皆様本当にありがとうございました。
次回以降も勉強会を開催した際にはこのブログにて報告をしていきます。次の勉強会をあまり間隔をあけることなく開催していきたいですね。また、参加者・発表者の数も増やし、より活発なものにしていきたいです。次回以降の報告をお楽しみに。