見出し画像

Rustは「難しい」のか?:ゼロから学ぶRust

本稿は、高野祐輝・著『ゼロから学ぶRust』(講談社)のまえがきをWeb公開に際して再編集したものです。

Rustが変えた世界

従来、高スループットや低遅延が求められるソフトウェアや、ハードウェアを直接操作するオペレーティングシステムやデバイスドライバなどのソフトウェアは、プログラミング言語理論研究から生まれた先進技術の恩恵に浴することができなかった。これは高度な抽象化には必ずオーバーヘッドがあるからで、我々はこのことを摂理のように考えていた。

ところが、プログラミング言語Rustは、ほとんどオーバーヘッドなしで、高度な抽象化と安全性を達成可能であることを実証した。製品レベルでこれを実証したのはRustがはじめてである。これは、筆者のようなシステムソフトウェア分野を専門とする研究者・技術者からすると、エポックメイキングな出来事である。

USENIX Symposium on Operating Systems Design and Implementation(OSDI)は、世界的に有名なオペレーティングシステム研究に関する国際会議である。2020、2021年のOSDIで発表されたOS論文である、"RedLeaf"、"Theseus"、"NrOS"という3つの論文は、すべてRustを用いて実装されている。これらの論文では、Rustを用いた大きな理由に安全性を挙げており、Rustの言語機能をふんだんに利用して安全性と高速性を両立させている。研究分野以外でも、Linuxデバイスドライバが公式にRustを用いて実装可能になるという話も出てきており、今後ますますRustが普及していくことが予測される。

Rustは「難しい」のか?

Rustを語るうえで避けて通れない話題に、その難しさがある。Rustはたしかに、他のプログラミング言語と比べて安全性に重きを置いているため、他の言語ではコンパイルできたり実行できたコードが動かないということがある。このような視点から見ると、難しいと感じるかもしれない。

一方、安全な——つまり、ソフトウェアが未定義状態になって突然停止したり、未定義状態となった結果脆弱性が発露する、といったことが起きないようなソフトウェアを実装するのは、コンパイルや実行を簡単にできる言語で書くことが驚くほど難しい。このような言語で安全なソフトウェアを実装可能になるまでには、数年、あるいは10年程度の経験を必要とする。しかも、数十年のキャリアがある熟練プログラマですら、Rustだと防げるようなバグに苦労することがある。この視点から見ると、Rustは非常に簡単なプログラミング言語である。なぜなら、10年もの長きにわたる習得期間なしに安全なソフトウェアを実装できるのだから


ゼロから学ぶRust
 高野祐輝・著 288頁・B5変判・定価3520円(税込)
 【購入する】

※電子版は制作中です。

文法解説からソフトウェア実装まで

本書は、プログラミング言語Rustの入門書である。プログラミング言語の書籍は、文法解説を主としたものが多いが、本書は文法解説のみならず、Rust を用いた実践的なソフトウェア実装の解説も行う

英語学習でもそうだが、文法の学習は多くの学習者にとっては非常に退屈で、しかも、文法を理解しただけでは英語を習得することはできない。これはプログラミング言語学習でも同様で、ある言語を習得したいならば、文法を学んだうえで、ある程度の規模のコードを実際に読み書きする必要がある。

本書では前半部分で文法の解説を行う。退屈かもしれないが、必須なので一通り目を通してほしい。後半部分では、正規表現、オートマトン、アセンブリ言語、シェル、シグナル、デバッガ、割り込み、データフロー図、シーケンス図、オントロジーログ、契約プログラミングを用いた設計手法など、情報科学、情報工学分野における必修題材をふんだんに採用して、Rustを用いたプログラミング手法を解説する。

残念ながら、最近では、これらの題材を実装を含めてしっかりと解説した書籍は少なくなっているが、本書を用いることでプログラミング技術と理論の基礎教養を習得できる。また、最終章では、Rustの安全性を支える理論的なしくみを理解するために、線形型システムの解説を行う。線形型システムは若干難易度が高いが、知的探究心旺盛な読者はぜひ挑戦してほしい

ソフトウェアはもはや社会インフラを支える技術であり、その適用範囲はいまだに広がり続けている。ソフトウェアインフラがますます普及し、ソフトウェアが我々の命までも支えるようになってきた昨今では、これらのインフラをRustなどの安全な言語で実装していくことは、ソフトウェア業界の最重要課題といっても過言ではない。本書が安全な情報化社会を実現するための助けになれば幸いである。


目次

第1章 環境構築とHello, world!
 1.1 Windows Subsystem for Linuxのインストール
 1.2 Visual Studio Codeのセットアップ
 1.3 Hello, world!
 1.4 Rust プログラムの概観

第2章 Rustの基本
 2.1 型システム
 2.2 構文と基本機能

第3章 所有権・ライフタイム・借用
 3.1 スタックメモリ
 3.2 所有権
 3.3 ライフタイム
 3.4 借用
 3.5 借用と排他制御の類似性

第4章 トレイト
 4.1 トレイトの定義と実装
 4.2 イテレータ
 4.3 シリアライズとファイル入出力
 4.4 トレイト制約
 4.5 動的ディスパッチ
 4.6 スーパートレイト
 4.7 存在型

第5章 モジュール・ドキュメント・テスト
 5.1 クレートとパッケージ
 5.2 モジュール
 5.3 ドキュメント
 5.4 テスト

第6章 正規表現
 6.1 オートマトン
 6.2 正規表現とレジスタマシン
 6.3 正規表現エンジンの実装
 6.4 実行速度計測
 6.5 演習問題

第7章 シェル
 7.1 シェルの基本
 7.2 プロセスと端末
 7.3 ZeroShの実装
 7.4 演習問題

第8章 デバッガ
 8.1 GDB
 8.2 割り込みとシグナル
 8.3 ZDbgの実装
 8.4 演習問題

第9章 線形型システム
 9.1 線形型システムの理論
 9.2 パーサコンビネータ
 9.3 LinZ言語の実装
 9.4 演習問題

購入リンク

※電子版は制作中です。配信日が決まり次第、講談社サイエンティフィクのTwitterアカウントにて告知いたします。

おすすめの記事


この記事が気に入ったらサポートをしてみませんか?