Re:Inventラスベガスで行われた AWS Re:invent では、Rust Foundation の会長 Shane Miller 氏と Tokio プロジェクト リーダーの Carl Lerche 氏が、環境への影響を最小限に抑えるために Rust を使うべきだと主張したが、Rust の学習曲線が急峻であるため、この作業は困難だとも述べた。
ミラー氏はAWSのシニアエンジニアリングマネージャーでもあり、レルシェ氏はこのクラウド大手の主席エンジニアでもある。
Rust はどのようにして地球を救うことができるのでしょうか?その答えは、より効率的なコードを実行するにはより少ないリソースが必要であり、それはデータセンターのエネルギー使用量を削減し、コンピューティング機器の製造と世界中への出荷による環境への影響も削減することを意味します。
シェーン・ミラーとカール・レルチェが、ラスベガスで開催される今年の AWS Re:invent で Rust の効率性と安全性について講演します。
「データセンターは全世界のエネルギーの1%を消費しています」とミラー氏は述べたが、テクノロジーの進歩とクラウドによってアイドル状態のリソースの割合が減少する傾向にあるため、消費されるエネルギーの総量は過去10年間ほとんど変わっていないと付け加えた。
論点の2つ目は、Rustが最も効率的なプログラミング言語の一つであるという点です。この論拠として引用されているのは、27のプログラミング言語のパフォーマンス、メモリ使用量、エネルギー効率を測定した2017年の論文[PDF]です。この論文では、C言語が最も効率的であると評価されていますが、Rustはわずか3%多いエネルギー消費量でそれに迫っています。この研究によると、JavaはRustのほぼ2倍、C#は3倍以上、Pythonは75倍以上のエネルギーを消費しています。
2017年の研究プロジェクトによると、エネルギー効率による言語のランキング
これは結局AWSカンファレンスです
月曜日のセッションで複数の参加者が指摘したように、この研究には問題がある。それは、研究の不注意によるものではなく、言語には多くの実装とコンパイラがあり、その中には他よりも効率的なものもあるからだ。TypeScriptはJavaScriptにコンパイルされ、似たようなコードは両方で記述できるにもかかわらず、TypeScriptがJavaScriptの10倍も効率が悪いという結果も奇妙だ。
それでも、これはそれほど重要ではありません。システム言語としてのRustの効率性は疑う余地がなく、ミラー氏とレルチェ氏はこの研究だけに頼ったわけではないからです。ミラー氏はまた、DiscordとTenableのケーススタディにも言及し、大幅な効率向上を示しました。
Tenableのケースでは、JavaScriptコンポーネントをRustで書き直すことで、レイテンシが50%改善され、CPU使用率が75%、メモリ使用量が95%削減されました。「これはすごいですね」とミラー氏は言います。「インフラコストだけでなく、エネルギー消費量にも相当な節約になります。」
ガベージコレクション言語は本質的に効率が低いとレルチェ氏は述べた。ガベージコレクションはメモリ管理を自動化する一般的な手段であり、スコープ外のオブジェクトを識別してメモリを解放することで動作する。
「ガベージコレクターはガベージコレクションパスを実行するためにプロセスを一時停止する必要があります。そして一時停止すると…サービスはリクエストに応答できなくなります」と彼は述べた。これはつまり、Java、C#、JavaScriptなどの言語は、CやRustほど効率的かつ高性能にはなり得ないことを意味する。
なぜCとC++を使わないのか?その理由はセキュリティとメモリ関連のバグだとレルシェ氏は述べ、「CとC++のソフトウェアにおける重大度の高いセキュリティ脆弱性の70%は、メモリ安全性の欠如に起因する」という調査結果を引用した。
Rustは革命的だと彼は述べた。「Rustは、メモリの安全性を維持しながら効率性を実現した初めての主流プログラミング言語だ」からだ。レルシェ氏は、Rustが所有権という概念を用いてメモリの安全性を実現する仕組みを説明した。所有権とは、アフィン論理と呼ばれる概念に基づくもので、各オブジェクトには一度にただ一人の所有者しか存在しないというものだ。
所有権ルールはコンパイル時にチェックされるため、実行時のオーバーヘッドは発生しません。並行処理もRustではCやC++よりも容易かつ安全であり、パフォーマンスと効率性がさらに向上します。
簡単すぎるように思えます。開発者とITコミュニティがRustに移行するだけで、コードはより高速かつ安全に実行され、世界のエネルギー使用量は減少し、AWSはデータセンターの半分を閉鎖できるようになります(ただし、この最後のアイデアはセッション中に聞かれませんでした)。
大きいけど
「しかし」とミラー氏は述べた。「炭素削減目標を達成するには…新しいソフトウェアのほとんどは、C言語やRustのようなエネルギー効率の高い言語で書かれる必要があります。しかし、Rustの学習曲線はやや急峻であることが知られています…Rustの導入は進んでいますが、まだどこでも見られるわけではありません。」
Rust は確かに学習曲線がやや厳しいという悪名高い状況にあります。私たちは Rust の採用を見ていますが、どこでも見られるわけではありません。
Rustが最も成長しているのは、パフォーマンスが大幅に向上する分野、つまり大容量データベースサービスや、IoTや組み込みといったリソースが限られた小規模な環境です。JavaScriptアプリのバックエンドを作成するような環境では、Rustの成長はあまり見られません。
問題は、Rustでのコーディングが難しいことです。Java、JavaScript、Pythonといった言語が広く普及している理由の一つは、プログラマーがより早く生産性を向上できるからです。
これが、誰もが気に留めていない「有名な学習曲線」だとミラー氏は述べた。最近の調査では、「この言語をもう使っていないと答えたエンジニアのうち、55%が学習と生産性を放棄の理由として挙げている。経験豊富なエンジニアでも、この言語を使いこなせるようになるには、専門家のサポートを受けながら3~6ヶ月の学習が必要だ」という。
- JetBrainsの全面的改革:リモート開発の導入、新IDEのプレビュー
- AWSは成熟期の入り口にいるが、まだ成熟には程遠い
- AWSは無料利用枠を大幅に拡大しデータ転送料金を削減 – ライバルがR2ストレージをプレビューしてから2か月後
- AWSはオプションのIPv6専用ネットワークで「画期的な前進」を主張
学習曲線を短縮する可能性はあるのでしょうか?「学習曲線の課題の一部は、使い方が難しいという点ではなく、開発者エクスペリエンスにギャップがあることです。Javaなどの言語からRustに移行したエンジニアから、デバッガーの使い勝手に不安を感じるというフィードバックが寄せられています」とミラー氏は私たちの質問に答えました。「パフォーマンスプロファイリングツールは、彼らが慣れ親しんだものとは異なっています。この点は現在調査中です。」
「Rustは歴史的に見て、C++の代替として登場しました」とレルシェ氏は付け加えた。「RustはC++というユースケースをターゲットにしていました。しかし、より高レベルな用途にもRustは広く応用できることが分かってきました。」
「サービスを構築しようとしているなら、Rustの本を読むのがおすすめです。非常に詳細な内容で、ライフタイムやトレイト、トレイトパターンなど、言語の一部でありながらサービスの作成には必須ではない概念を網羅しています。」彼は、「サービスの作成に必要な情報」を簡潔にまとめたドキュメントを作成する計画があると述べた。
このような取り組みは役立つでしょうが、ビジネス上の問題を解決する必要がある場合、ビジネス アプリケーション開発者が Java や JavaScript、C#、Python から切り替えて、他の言語でより迅速に作業できるほど Rust を簡単に習得できるようになることを想像するのは困難です。
さらに、コンピューティング スタックの下層では、コードはおそらく Rust や C または C++ で書かれています。これは、Linux カーネルやデータベース エンジンのコアとなると、高いパフォーマンスと効率性がすでに必須要件となっているためです。
とはいえ、非効率的なソフトウェアは環境にも顧客にもコストがかかるという重要な点はよく理解されており、Rust がソリューションのほんの一部に過ぎないとしても、IT 業界が十分な注意を払っていない点です。®