Facebook、次期ビルドシステムの開発でRust言語の採用を明らかに
Facebookは同社のソフトウェア開発において、同社が主導して開発しているオープンソースのビルドシステム「Buck」を利用しています。
Backは高速なビルドが可能な点を大きな特徴としており、もともとAndroidアプリケーション向けのビルドシステムとして登場しました。
その後対応する言語やプラットフォームが拡張され、現在では15種類以上のプログラミング言語と、さまざまなスマートデバイス、VRヘッドセット、そしてサーバアプリケーションにまで対応しています。
次期ビルドシステムの開発を決断
しかしこうした拡張を重ねる中でBuckの複雑さは増していき、新機能の追加がどんどん難しくなってきたと、Facebook Developersのブログに投稿された記事「The future of Buck」で吐露されています。
同社の開発チームは約4年前から、Buckのアーキテクチャの改善を段階的に行う取り組みを始めましたが、それは困難だと判断。
過去の互換性を保ちつつ、拡張が容易な新たなビルドシステムを新たなBuckとして開発すると表明しました。
Buck has been a fast and powerful build system for #Android developers since 2013, but it’s time for something new. Learn how Buck v2 is a more scalable and extensible system built from everything @fbOpenSource learned over the past eight years: https://t.co/Q707dxGqtU pic.twitter.com/4BVApA8jmH
— Facebook for Developers (@fbplatform) July 12, 2021
下記は「The future of Buck」からの引用です。
The limited extensibility of Buck v1 has been a recurring source of pain for our community. With this new build system, we've focused on extensibility as a primary goal and every build rule is written outside of the core build language as a user-defined rule.
Buck v1の拡張性の低さは、私たちのコミュニティにとって繰り返しの悩みの種でした。この新しいビルドシステムでは、拡張性を第一の目標とし、すべてのビルドルールは、コアのビルド言語の外で、ユーザー定義のルールとして書かれます。
そして次世代Buckの開発にはRust言語を採用する方向であることも明らかにしました。
Rustを開発言語に採用へ
Rust言語はMozillaが開発し、コミュニティベースで開発が進められてきた、C言語のように低レベルのシステム開発向けに作られたオープンソースのプログラミング言語です。
不正なメモリ領域を指すポインターなどを許容しない安全なメモリ管理や、マルチスレッド実行においてデータ競合を排除した高い並列性を実現している点などの特長を備えているため、安全かつ高速なアプリケーション開発を実現します。
今年、2021年2月にはRustの開発を推進するRust Foundationが設立されるなど、存在感が高まっています。
参考:Rust言語を推進する「Rust Foundation」設立。AWS、Google、マイクロソフト、モジラ、ファーウェイらが設立メンバー
Rustを用いることで、どのような利点があるのか。Facebookは記事の中で次の4つの項目を挙げています。
Rust’s _async/await_ syntax makes writing asynchronous code really smooth and Rust helps get the complex concurrency details correct. Each migration of Buck’s Java computations to a concurrent computation was a months-long, difficult transition and there are still significant single-threaded bottlenecks there.
Rustのasync/awaitシンタックスは、非同期のコードをとてもスムーズに記述できますし、Rustは複雑な並行処理の詳細を正しく理解するのに役立ちます。BuckのJavaの計算をひとつひとつ並行処理に移行するのは数カ月に及ぶ困難な作業でしたし、シングルスレッドの大きなボトルネックがまだ存在しています。
Rust has a lot of high-level language features that make development easier and more enjoyable. These are things like enums, pattern matching, traits, procedural macros and all the other features that contribute to Rust developers in general loving it so much.
Rustには、開発をより簡単で楽しいものにしてくれる多くの高レベルな言語機能があります。それらはenum、パターンマッチング、trait、手続き型マクロなどで、Rustの開発者の多くに愛されています。
Rust gives greater control over memory allocations. Garbage collecting languages (even with generational collection) have challenges dealing with incremental computations like Buck performs.
Rust はメモリの割り当てをより細かく制御することができます。ガベージコレクション言語は(たとえジェネレーショナルコレクションであっても)、Buckが行うようなインクリメンタルな演算に対応するのは困難です。
Rust is high performance. We’ve seen significant speedups from the translation of things into Rust.
Rustは高性能です。Rustに移植することで劇的な性能向上を私たちは見てきました。
Rustは2020年のStack Overflowの調査で、IT技術者からもっとも愛されている言語であることが示されています。
参考:Stack Overflowの調査によると、デベロッパーの5割以上が「フルスタック」エンジニアを自認。最も使われている言語はJavaScript、最も愛されている言語はRust
まだ日本ではRustによる本格的な開発事例は目立っていませんが、今後はRustの利用が広がると予想されます。
あわせて読みたい
DNSのレベルできわめて高い可用性を担保する「Amazon Route 53 Application Recovery Controller」正式サービスに
≪前の記事
Fastly、JavaScriptエンジンをWebAssemblyで実装。CDNエッジのサーバレス環境「Compute@Edge」でJavaScriptサポート発表(訂正済み)