ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子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 と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?