ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
概要
Rust は、Mozilla の Graydon Hoare が 2006 年に個人プロジェクトとして始め、2010 年に Mozilla 公式プロジェクトとなり、2015 年 5 月 15 日に 1.0 がリリースされた比較的新しいシステムプログラミング言語です。設計目標は明快で「C / C++ と同等の性能を保ちながら、メモリ安全とデータ競合の排除をコンパイル時に保証する」こと。ガベージコレクション(GC)を使わずに実現している点が革新的です。ソースコードの拡張子は .rs、ビルド成果物は単一バイナリ(または .rlib / .so / .dll)です。
Rust の中核概念は 所有権(ownership)、借用(borrowing)、ライフタイム(lifetime) の三本柱です。すべての値はただひとつの「所有者」を持ち、所有者がスコープを抜けると自動的に解放されます。値を他の関数に渡すと所有権が移動(move)し、参照(&T / &mut T)として「借りる」こともできますが、可変参照は同時にひとつしか存在できないというルールがコンパイル時に検査されます。これにより、データ競合や use-after-free がコンパイル段階で根絶されます。
Rust は ゼロコスト抽象を掲げており、ジェネリクス・トレイト(trait)・イテレータなどの高水準機能を使っても、最終的な機械語は手書き C と同等以下のコストになるよう設計されています。Result<T, E> / Option<T> による明示的なエラーハンドリング、パターンマッチ、代数的データ型(enum)も特徴です。
用途は システムプログラミング・ブラウザエンジン(Servo, Firefox の一部)・WebAssembly・組み込み・OS 開発(Linux カーネル 6.1 で公式採用)・CLI ツール(ripgrep, fd, bat, exa)・高性能 Web サーバー(actix-web, axum) など広範です。Microsoft・AWS・Google・Cloudflare などが本番投入を進めています。
ファイル種類とビルド成果物
| 拡張子 / ファイル | 役割 |
|---|---|
.rs | Rust ソースコード |
Cargo.toml | プロジェクト定義・依存・ビルド設定(TOML 形式) |
Cargo.lock | 依存の正確なバージョン固定 |
.rlib | Rust 専用静的ライブラリ |
.so / .dll / .dylib | 動的ライブラリ(C ABI 互換) |
実行バイナリ(拡張子なし / .exe) | cargo build --release の最終成果物 |
ビルドフロー: .rs → rustc → LLVM IR → 機械語 → 単一バイナリ。target/debug/ がデバッグビルド、target/release/ が最適化ビルドです。
「Hello, World」
fn main() {
println!("Hello, World");
}
// 所有権と借用の例
fn greet(name: &String) { // &String で借用(move しない)
println!("Hello, {}", name);
}
fn main2() {
let name = String::from("Rust");
greet(&name); // 借用なのでこの後も name は使える
println!("name is still: {}", name);
}
$ cargo new hello
$ cd hello
$ cargo run
Compiling hello v0.1.0
Finished dev [unoptimized + debuginfo] target(s) in 0.5s
Running `target/debug/hello`
Hello, World
パッケージ管理・ビルドツール
Rust 公式の Cargo はビルドツール・パッケージマネージャ・テストランナー・ドキュメント生成器を兼ねる万能ツールで、Rust と一体で配布されます。依存は crates.io から取得します。
# Cargo.toml
[package]
name = "myapp"
version = "0.1.0"
edition = "2021"
[dependencies]
serde = { version = "1", features = ["derive"] }
tokio = { version = "1", features = ["full"] }
cargo build # デバッグビルド
cargo build --release # 最適化ビルド
cargo run # ビルドして実行
cargo test # テスト
cargo clippy # リンタ(lint)
cargo fmt # フォーマッタ
cargo doc --open # ドキュメント生成 + ブラウザで開く
関連言語との比較
| 項目 | Rust | C++ | Go |
|---|---|---|---|
| メモリ管理 | 所有権(コンパイル時) | 手動 / RAII / スマートポインタ | GC |
| 性能 | C++ と同等 | 最高クラス | C++ より 10〜30% 遅め |
| 並行処理安全 | Send / Sync で型保証 | プログラマ責任 | goroutine だが競合は起き得る |
| 学習コスト | 非常に高(所有権の壁) | 高 | 低 |
| パッケージマネージャ | cargo / crates.io(公式) | vcpkg / Conan(非公式・乱立) | go modules(公式) |
注意点・落とし穴
- borrow checker との戦い:初学者の最大の壁。可変参照と不変参照の同時使用、ライフタイム省略規則を理解するまで時間がかかる。
- コンパイル時間の長さ:依存を多く取り込むと数分かかることも。
cargo checkで型チェックだけ走らせると速い。 - 非同期は
Pin/Futureが難解:async / await は書けても、内部実装に踏み込むと急に難しくなる。 - unsafe ブロック:FFI や低レベル最適化で必要だが、ここから先は C と同じ責任。最小化が鉄則。
- String と &str の使い分け:所有する
Stringと借用&strの区別は初学者が躓きやすい。
関連リンク
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- 【django】ログイン 認証機能 2026-09-08 03:22:09
- MySQL ERROR 1063 Incorrect column specifier for column|原因と直し方 2026-09-08 03:11:09
- 【PHPエラー】Object of class stdClass could not be converted to string 2026-09-07 07:46:04
- Julia Genie ローカル開発サーバ起動完全ガイド 2026-09-07 07:46:04
- Wi-Fi とは|規格と世代(Wi-Fi 4〜7)・周波数帯・CSMA/CA・WPA3 NEW 2026-09-07 07:45:13
- set コマンドでシェルオプションと位置パラメータを操作 | bash 2026-09-07 07:45:13
- JPEG(.jpg/.jpeg)画像形式の完全ガイド — 仕様・マジックナンバー・他形式との比較・EXIF 2026-09-07 07:45:13
- UE5 Get Overlapping Actorsで特定クラスだけ処理|Class Filter・Cast To 2026-09-07 07:45:13
- Linuxで特定拡張子のファイルを再帰削除|find -deleteの安全手順 2026-09-07 07:45:13
- Django CBVでテンプレートに値を渡す|get_context_data・extra_context 2026-09-07 07:45:13
- Linuxで複数ファイルの文字列を一括置換|find・sed・xargsの安全手順 2026-09-07 07:45:13
- Laravelルートグループ|prefix・middleware・nameで一括管理 2026-09-07 07:45:13
- Linux whichコマンドの使い方|絶対パス取得とtype・command -vの違い 2026-09-07 07:45:13
- Linux catコマンドの使い方|行番号表示・複数ファイル連結 2026-09-07 07:45:13
- unable to execute 'gcc': No such file or directory 2026-09-07 07:45:13
コメントを削除してもよろしいでしょうか?