高速でメモリーセーフなプログラミング言語、Rustの特徴を紹介

2019年4月に行われたカンファレンスからRustの概要を紹介する。

松下 康之 - Yasuyuki Matsushita

2020年6月3日 6:00

メモリーセーフな低レベルプログラミング言語Rustを数回に分けて紹介してきたが、今回はRustのコアチームの一員であるCarol Nichols氏による解説動画を紹介したい。これまでCloudFlaireのエンジニアSteve Klabnik氏によるWebAssemblyとRustに関するセッション、DropboxがPythonからRustに書き換えた事例、Microsoftが開発したKubernetes上でWebAssemblyのコードを実行するKrustletの記事、IBMが社内システムをNode.jsからRustで書き換えた事例などによってRustがモメンタムを獲得しつつある大きな流れを紹介してきた。

今回紹介するセッションは、RustのコアチームのエンジニアでInteger 32というRustに特化したコンサルティング会社を経営するCarol Nichols氏によるもので、2019年4月にフィラデルフィアで開催されたPhilly ETE 2019(正式名称はEmerging Technology for Enterprise 2019)というカンファレンスで行われたものだ。

Rust, a language for next 40 years

Rust, a language for next 40 years

動画:Rust: A Language for the Next 40 Years - Carol Nichols

このセッションで使われたさまざまなデータは、以下のGitLabのリンクから参照することができる。

参考:rust-next-40-years

メモリーアンセーフなC言語

冒頭からアメリカにおける鉄道を例に挙げ、「いかに危険な仕事をなくしてきたのか?」を解説するNichols氏。ポイントは、当初アメリカの鉄道は、ブレーキのシステムを備えておらず、専任の技師がその都度、列車の屋根に登ってブレーキを掛けていたという点だ。そのため多くの技師が転落して怪我をしたり、命を落としたりしていたという。鉄道用のエアブレーキを開発したのは、エジソンと直流/交流の電流戦争を繰り広げた発明家George Westinghouseである。鉄道のエアブレーキが開発され、法制度としてすべての鉄道に装備されるまでに約30年が必要だったというのが、このパートでのメッセージだ。これはメモリーセーフではないプログラミング言語から、Rustのようなメモリーセーフなプログラミング言語が当たり前になるまでに一体何年かかるのか? というセッション最後の部分の問い掛けの伏線となる。

C言語について解説

C言語について解説

約11分後辺りから実際にRustに関する解説が始まるので、動画を視聴する際はそこから開始しても構わないだろう。ここからは比較対象となるC言語について解説が始まる。

メモリーに対して安全でないのがC言語

メモリーに対して安全でないのがC言語

C言語はメモリーアンセーフ、つまりメモリーセーフではないということが最初に強調されたが、具体的にはメモリーの解放、メモリーリーク、バッファーオーバーフロー、ヌルポインター、データレースなどの問題点が発生することを指摘した。

メモリーに対して安全ではないということで起こり得る問題点を列挙

メモリーに対して安全ではないということで起こり得る問題点を列挙

そしてここでもMicrosoftが行った調査、これまで開発したすべてのソフトウェアにおける脆弱性の約70%がメモリー関連であるという調査結果を引用している。このスライドで引用されている記事は、以下のZDnetの記事だ。

Microsoftのリサーチャーによる70%のバグはメモリー関連

Microsoftのリサーチャーによる70%のバグはメモリー関連

参考:Microsoft: 70 percent of all security bugs are memory safety issues

C言語は書いてからメモリーセーフにするやり方

C言語は書いてからメモリーセーフにするやり方

C言語でもメモリーセーフなコードを書くことは可能だが、それは常にコードを書いた後にチェックを行い、それを直すというものである。本質的にメモリーセーフなコードを書くという目的にC言語はまったく該当しないというのが、この部分のキーメッセージだ。

メモリーセーフなRust

次にRustの解説に移ったNichols氏は、ここまで解説してきた最大の問題点、メモリーセーフをどうやってRustが解決したのかを説明する。

メモリーセーフを実現するのがRustの最大の目的

メモリーセーフを実現するのがRustの最大の目的

ここではメモリーセーフにすることがRustの最大の目的であるとして、コンセプトとしての「オーナーシップとボローイング(所有権と借用)」を解説する。オーナーシップは文字通り、「変数がどこに属しているか?」を厳密に定義することで、メモリーセーフを実現するものだ。そしてボローイングとは、所属を変えずに借りる(Borrow)ことで変数へのアクセスを可能にするというものだ。

オーナーシップとボローイングを説明

オーナーシップとボローイングを説明

例として挙げられたソースコードではmainの中で使われたxという変数に格納されたhiという値は、その関数(ここではmain)の実行が終わると同時に解放されることを示している。

簡単なRustのコードで解説

簡単なRustのコードで解説

また次の例ではxをyに代入することでオーナーシップが移ってしまうために、その後で参照しようとしてもエラーになるということを示している。

let y = x; はオーナーシップの移動。

let y = x; はオーナーシップの移動。

エラーメッセージが実に細かいのもRustの仕様と言っていいだろう。

エラーメッセージにオーナーシップとボローイング(所有権と借用)が明示される

エラーメッセージにオーナーシップとボローイング(所有権と借用)が明示される

また次の例では「&x」という書き方で外部の変数からxへの参照を行う記述が示されている。

別の例で所有権と借用を説明

別の例で所有権と借用を説明

ここではxがスコープから抜けた瞬間に変数自体がクリアされており、それ以後の利用はできない。この辺りの所有権と借用についてはRustのメモリーセーフの根幹に関わるコンセプトである。より深く知るためには以下のドキュメントを参照されたい。

参考:プログラミング言語Rust

もう一度、Rustのメモリーセーフティーについてスライドでまとめているが、変数に対する不変/可変の扱いやnullがないこと、所有権と借用などの概念が他の言語と比べてユニークであるために、理解するための学習時間が必要であることは理解できる。

Rustのメモリーセーフティーのまとめ

Rustのメモリーセーフティーのまとめ

システム記述言語としてのRust

そして2番目に挙げたRustの特徴として「システムを記述する言語としてのRust」という側面だ。

Rustの特徴の2番目はシステム記述用言語としての側面

Rustの特徴の2番目はシステム記述用言語としての側面

ここではメモリーセーフティーであること以外にパフォーマンスが高いことが挙げられている。これは実行時に型チェックやガーベージコレクションなどが発生せずに、すべてがコンパイル時に行われることでデベロッパーが書いたコード以外のオーバーヘッドがないことに由来している。

高いパフォーマンスを誇るRust

高いパフォーマンスを誇るRust

ただ、弱点としてシンプルでないことを挙げている。これは前にも言及した所有権と借用のコンセプトを理解した上で、Rustに向いた書き方をしなければいけないという部分にも関わってくるポイントだ。

欠点はシンプルに見えないこと。だがコンセプトを理解すれば分かりやすいとも言える

欠点はシンプルに見えないこと。だがコンセプトを理解すれば分かりやすいとも言える

この記事のキーワード :

人気記事トップ10

人気記事ランキングをもっと見る

企画広告も役立つ情報バッチリ! Sponsored

ClickHouse Cloudが実現した広告運用SaaS「ATOM」のデータ基盤革新、パフォーマンスを向上しながら、運用負荷とコストを削減 11月11日 6:20 AIで開発が加速する時代、品質保証はどう変わる? Tricentisが示すAIエージェント活用の実像 11月9日 6:45 悪用までの猶予が「1分」に迫るフロンティアAI時代に開発と本番を貫く脆弱性管理が必要 10月29日 8:30 欧州CRA対応とSBOM運用。AI生成コードのOSS混入問題の対策とは ――スニペット単位で検出する「FossID」「Insignary Clarity」によるSBOM運用 9月16日 6:40 PostgreSQLからTiDBへ、稼働中SaaSで進める段階的DB移行の実践と再設計への展望 9月7日 6:30 機能安全開発におけるGoogleTestの活用を支援!「Parasoft C/C++test CT」で実現する効率化&AI連携 4月14日 6:30 【CNDW2025】Grafanaが明かす「オブザーバビリティの哲学」ー最小限の労力で実用的なインサイトを得るには 1月23日 6:30 【CNDW2025】プロダクト急増に備える基盤刷新 ーウェルスナビがECSからEKSへの移行で得た知見とは 1月15日 6:30 【CNDW2025】250環境を5人で運用、構築時間は30分に ーKINTOテクノロジーズが語るインフラ基盤組織の作り方 2025年12月18日 6:30 新たな自動化で熱視線! AIエージェントの「推論能力」を支える2つのコンポーネントとは? 2025年11月28日 6:30