Rust Programming Language
This article is incomplete and may be subject to changes.
Index of root/article_inbox/rust-lang
Files
- borrowing.md
- code_example.md
- concurrency.md
- error_handling.md
- generics_traits.md
- index.md
- lifetime.md
- ownership.md
- 予約語.md
"A language empowering everyone to build reliable and efficient software."
(だれもが安全で効率的なソフトウェアを構築できるように設計されたシステムプログラミング言語。)
概要
Rust は 安全性・並行性・性能 を同時に追求するシステムプログラミング言語である。
Rust はトレードオフとしてこれらをコンパイラの複雑性とコンパイル時間の増加を犠牲にし、実現している。
C/C++ と同等、あるいはそれ以上の低レベル制御と実行性能を提供しつつ、
未定義動作・データ競合・メモリ破壊といったバグの多くをコンパイル時に排除することを目的として設計されている。
最大の特徴は、 ガベージコレクションを使わずにメモリ安全性を保証する という点にある。
これを実現するために Rust は、
- 所有権(ownership)
- 借用(borrowing)
- ライフタイム(lifetime)
という型システム上の制約を導入し、
実行時コストなしで安全性を担保する。
所有権の概念をもつ言語では最も完成度が高いとされ、実用的に洗練されている。
その結果 Rust は、
- OS / カーネル
- 組み込み・ファームウェア
- ゲームエンジン
- ブラウザエンジン
- 高性能サーバー
- 分散システム
といった、予測可能なパフォーマンスと失敗が許されない領域で採用されている。
哲学
Rust の設計哲学は、しばしば 「ゼロコスト抽象化(zero-cost abstractions)」 と 「安全性を妥協しない」 という二つの原則に集約される。
Rust は、
「安全なコードを書くこと」と
「高速なコードを書くこと」を
トレードオフとして扱わない。
多くの言語では、安全性は実行時チェックや GC によって担保されるが、
それは予測不能なレイテンシやオーバーヘッドを生む。
一方で C/C++ のような言語では、性能は高いが、
安全性はプログラマの注意力に全面的に依存している。
Rust はこの二者択一を拒否し、
コンパイル時に厳密な検証を行うことで、
実行時コストなしに安全性を得る
という立場を取る。
その結果、Rust のコードはしばしば「書くのが難しい」と感じられる。
しかしそれは、
「人間が考えるべきことをコンパイラに押し付けた」
結果でもある。
Rust の哲学は、
Make illegal states unrepresentable
(不正な状態を表現できないようにする)
という考え方に強く根ざしている。
バグを「テストで見つけるもの」ではなく、
型とコンパイルエラーとして最初から排除するもの
として扱う点に、Rust の思想の核心がある。
影響を受けた言語
Rust は完全に新しい言語である一方で、既存の多くの言語・理論から強い影響を受けて設計されている。
C / C++
- 低レベルメモリ操作
- ポインタ・アドレス概念
- 明示的なリソース管理(RAII)
- OS・組み込み開発を前提とした設計思想
Rust の「GC を使わずに制御する」という方向性は、C/C++ の系譜に明確に属する。
ML 系言語(OCaml / Standard ML など)
- 代数的データ型(enum)
- 強力なパターンマッチ(match)
- 式ベースの言語設計
- 型推論の考え方
Rust の enum + match は、ML 系の影響を非常に強く受けている。
Haskell / 関数型言語
- 不変性(immutability)を基本とする設計
- 副作用を意識させる構文
- 抽象化を型で表現する思想
Rust は純粋関数型ではないが、 「副作用を明示する」思想は関数型言語から取り入れられている。
Cyclone
- 所有権とリージョン(region)によるメモリ安全性
- C に近い文法を保ったまま安全性を高める試み
Rust の所有権・ライフタイム設計は Cyclone の影響を色濃く受けている。
Java / C#
- トレイト(interface)に近い抽象化
- 大規模開発を意識したモジュール設計
- 明確なエラーメッセージとツールチェーン重視
特に「開発体験を重視する姿勢」は、従来のシステム言語とは一線を画している。
功績
Rust がもたらした最大の功績は、
「メモリ安全性は GC なしでも実現できる」
ことを、理論ではなく実用で証明した点にある。
それまで所有権型システムは研究的・理論的な存在に近く、
実用言語として成功した例はほとんどなかった。
Rust はこれを現実のプロダクト開発に耐える形で実装し、
大規模なエコシステムを築いた。
具体的な功績としては、次の点が挙げられる。
-
データ競合のコンパイル時排除
並行プログラムにおける race condition を型レベルで防止。 -
未定義動作の大幅な削減
ヌルポインタ参照、use-after-free、二重解放などを原理的に防ぐ。 -
低レベルと高レベルの橋渡し
unsafe を明示的に隔離することで、安全な抽象と危険な操作を分離。
システムプログラミングの裾野拡大
従来は熟練者しか扱えなかった領域に、多くの開発者を引き入れた。
その結果、
ブラウザエンジン、OS、言語処理系、分散基盤など、
極めて要求水準の高い分野で現実的な選択肢として受け入れられている。
Rust は「速い言語」でも「安全な言語」でもあるが、
それ以上に
「失敗しにくい言語」
である点が評価されている。
歴史
もともとMozillaの社員であったグレイ・ドーガン(Graydon Hoare)によって2006年に開発が始められたシステムプログラミング言語。 あとにMozillaの研究プロジェクトとして採用され、2010年に初の公式リリースが行われた。