Skip to content

Commit b376a96

Browse files
committed
rust5章まで
1 parent bc0fb05 commit b376a96

File tree

8 files changed

+1120
-1
lines changed

8 files changed

+1120
-1
lines changed

app/[docs_id]/styledSyntaxHighlighter.tsx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ export type SyntaxHighlighterLang =
4545
| "ruby"
4646
| "c"
4747
| "cpp"
48+
| "rust"
4849
| "javascript"
4950
| "typescript"
5051
| "bash"
@@ -63,6 +64,9 @@ export function getSyntaxHighlighterLang(
6364
case "cpp":
6465
case "c++":
6566
return "cpp";
67+
case "rust":
68+
case "rs":
69+
return "rust";
6670
case "javascript":
6771
case "js":
6872
return "javascript";
@@ -83,7 +87,9 @@ export function getSyntaxHighlighterLang(
8387
return undefined;
8488
default:
8589
lang satisfies never;
86-
console.error(`getSyntaxHighlighterLang() does not handle language ${lang}`);
90+
console.error(
91+
`getSyntaxHighlighterLang() does not handle language ${lang}`
92+
);
8793
return undefined;
8894
}
8995
}

app/pagesList.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,10 @@ export const pagesList = [
9696
description: "a",
9797
pages: [
9898
{ id: 1, title: "Rustの世界へようこそ" },
99+
{ id: 2, title: "基本構文と「不変性」" },
100+
{ id: 3, title: "関数と制御フロー" },
101+
{ id: 4, title: "所有権" },
102+
{ id: 5, title: "借用とスライス" },
99103
],
100104
},
101105
] as const;

app/terminal/runtime.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,9 @@ export function getRuntimeLang(
6262
case "cpp":
6363
case "c++":
6464
return "cpp";
65+
case "rust":
66+
case "rs":
67+
return "rust";
6568
case "javascript":
6669
case "js":
6770
return "javascript";

public/docs/rust-1.md

Lines changed: 148 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,148 @@
1+
# 第1章:Rustの世界へようこそ
2+
3+
Rustは、Mozillaによって開始され、現在はRust Foundationによって管理されているオープンソースのシステムプログラミング言語です。Stack OverflowのDeveloper Surveyで長年「最も愛されている言語」に選ばれ続けているのには理由があります。
4+
5+
## Rustの特徴:なぜ学ぶのか?
6+
7+
経験豊富なプログラマにとって、Rustは「トレードオフを解消する」言語として映るはずです。
8+
9+
### 1\. メモリ安全性(Memory Safety)
10+
11+
C/C++ではプログラマの責任であったメモリ管理を、Rustは**所有権(Ownership)**というコンパイル時のシステムで保証します。
12+
13+
* ガベージコレクタ(GC)は**存在しません**
14+
* ランタイムコストなしに、ダングリングポインタや二重解放、バッファオーバーフローをコンパイル段階で防ぎます。
15+
16+
### 2\. ゼロコスト抽象化(Zero-cost Abstractions)
17+
18+
「使わないものにはコストを払わない。使うものについては、手書きのコード以上のコストをかけない」というC++の哲学を継承しています。イテレータや高階関数を使っても、最適化された低レベルコードと同等のパフォーマンスが得られます。
19+
20+
### 3\. 安全な並行性(Fearless Concurrency)
21+
22+
多くの言語で並行処理はバグの温床(データ競合など)ですが、Rustではコンパイラがデータ競合を検知し、コンパイルエラーとして報告します。「コンパイルが通れば、並行性のバグを含んでいる可能性は低い」という安心感を持ってコーディングできます。
23+
24+
## 開発環境の構築
25+
26+
Rustの開発環境は非常にモダンで、バージョン管理やパッケージ管理が統合されています。
27+
28+
### `rustup` のインストール
29+
30+
Rustのバージョンマネージャである `rustup` を使用してインストールするのが標準的です。
31+
32+
macOS / Linux / WSL (Windows Subsystem for Linux) の場合:
33+
34+
```bash
35+
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
36+
```
37+
38+
Windowsの場合:
39+
公式サイト(rust-lang.org)から `rustup-init.exe` をダウンロードして実行します(C++ビルドツールが必要になる場合があります)。
40+
41+
インストール後、以下のコマンドでバージョンが表示されれば成功です。
42+
43+
```bash
44+
rustc --version
45+
cargo --version
46+
```
47+
48+
## Hello World (`rustc` を直接使う)
49+
50+
まずは、ビルドシステムを使わずにコンパイラ `rustc` を直接叩いて、Rustプログラムの最小単位を見てみましょう。
51+
52+
以下のコードを記述します。
53+
54+
```rust:hello.rs
55+
fn main() {
56+
// !がついているのは関数ではなく「マクロ」の呼び出しです
57+
println!("Hello, world from rustc!");
58+
}
59+
```
60+
61+
コンパイルと実行は以下の手順で行います。
62+
63+
1. コンパイル: `rustc hello.rs`
64+
* これにより、バイナリファイル(Windowsなら`.exe`)が生成されます。
65+
2. 実行: `./hello` (Windowsなら `.\hello.exe`)
66+
67+
<!-- end list -->
68+
69+
```rust-exec:hello.rs
70+
Hello, world from rustc!
71+
```
72+
73+
### ポイント
74+
75+
* **`fn main() { ... }`**: エントリポイントです。引数や戻り値がない場合、このように記述します。
76+
* **`println!`**: 末尾に `!` がついているのは**マクロ**であることを示しています。Rustでは可変長引数を取る機能などをマクロとして実装しています。
77+
* **セミコロン `;`**: 文の終わりには必須です。
78+
79+
## Cargo:Rustのビルドシステムとパッケージマネージャ
80+
81+
実際の開発では `rustc` を直接使うことは稀です。公式のビルドシステム兼パッケージマネージャである **Cargo** を使用します。Node.jsにおける `npm`、Pythonにおける `pip` + `venv` のような存在ですが、それ以上にプロジェクトのライフサイクル全体を管理します。
82+
83+
### プロジェクトの作成 (`cargo new`)
84+
85+
新しいプロジェクトを作成します。
86+
87+
```bash
88+
cargo new hello_cargo
89+
cd hello_cargo
90+
```
91+
92+
このコマンドにより、以下のディレクトリ構造が生成されます。
93+
94+
* **`Cargo.toml`**: パッケージのマニフェストファイル(依存関係やメタデータを記述)。
95+
* **`src/main.rs`**: ソースコード。
96+
* **`.gitignore`**: Gitの設定ファイルも自動生成されます。
97+
98+
### Cargoの主要コマンド
99+
100+
生成されたプロジェクトで、以下のコマンドを試してみましょう。
101+
102+
1. **`cargo check`**
103+
104+
* **重要**: コンパイルが可能かどうかのチェックだけを行い、実行ファイルは生成しません。高速に動作するため、コーディング中の構文チェックとして頻繁に使用します。
105+
106+
2. **`cargo build`**
107+
108+
* デバッグビルドを行います。成果物は `target/debug/` に生成されます。コンパイル速度重視で、最適化は行われません。
109+
110+
3. **`cargo run`**
111+
112+
* ビルドと実行を一度に行います。開発中はこれが最も使われます。
113+
114+
4. **`cargo build --release`**
115+
116+
* リリースビルドを行います。`target/release/` に生成されます。コンパイル時間は長くなりますが、強力な最適化がかかり、実行速度が劇的に向上します。
117+
118+
`src/main.rs` の中身は以下のようになっています(生成時デフォルト)。
119+
120+
```rust
121+
fn main() {
122+
println!("Hello, world!");
123+
}
124+
```
125+
126+
## フォーマッタとリンタ
127+
128+
Rustは「公式のスタイル」を重視する言語です。議論の余地をなくすために強力なツールが標準で用意されています。
129+
130+
### `rustfmt` (コードフォーマッタ)
131+
132+
Go言語の `gofmt` のように、コードを自動整形します。
133+
134+
```bash
135+
cargo fmt
136+
```
137+
138+
多くのエディタ(VS Codeなど)では保存時に自動実行されるよう設定するのが一般的です。
139+
140+
### `clippy` (リンタ)
141+
142+
単なるスタイルチェックだけでなく、パフォーマンスの改善案や、Rustらしい書き方(Idiomatic Rust)を提案してくれます。
143+
144+
```bash
145+
cargo clippy
146+
```
147+
148+
例えば、無駄な計算や非推奨なAPIの使用などを指摘してくれるため、学習中はこのコマンドの警告に従うだけでRustの理解が深まります。

0 commit comments

Comments
 (0)