はじめに - Cm言語とは
難易度: 🟢 初級
所要時間: 10分
📚 この章で学ぶこと
- Cm言語の特徴
- 設計思想
- 他の言語との比較
- 環境構築の準備
Cm言語とは
Cm言語は、C++風の構文とRust風の型安全性を組み合わせた、モダンなシステムプログラミング言語です。
主な特徴
- C++風の構文
- セミコロンで文を終了
- ブレース
{}でブロックを定義 - 明示的な型宣言
- Rust風のトレイトシステム
interface/implによる型の振る舞い定義- ジェネリクスと型制約
withキーワードによる自動実装
- LLVM/WASMバックエンド
- ネイティブコード生成(LLVM)
- WebAssembly出力(WASM)
- 高度な最適化
- 強力な型推論
- ジェネリック関数の型推論
- 配列メソッドでの型推論
for-in構文での型推論
- メモリ安全性
- ポインタの明示的な使用
- 配列境界チェック(v0.11.0以降)
- 所有権システム(移動セマンティクス、借用チェック)
設計思想
1. 明示的であること
暗黙的な動作を避け、コードの意図を明確にします。
// ✓ 明示的なオーバーロード宣言
overload int add(int a, int b) { return a + b; }
overload double add(double a, double b) { return a + b; }
// ✓ 明示的な型制約
<T: Ord> T max(T a, T b) { return a > b ? a : b; }
2. 安全であること
コンパイル時にできるだけ多くのエラーを検出します。
// コンパイルエラー:型制約を満たさない
<T: Ord> T min(T a, T b) { return a < b ? a : b; }
// Point p1, p2;
// Point m = min(p1, p2); // エラー:PointはOrdを実装していない
3. 実用的であること
C/C++との相互運用性を重視します。
// C互換のメモリレイアウト
double value;
}
// C++風のポインタ
*p = 100;
4. モダンであること
最新の言語機能を取り入れます。
// パターンマッチング
match (status) {
Status::Ok => println("Success"),
Status::Error => println("Failed"),
_ => println("Unknown"),
}
// 自動トレイト実装
}
他の言語との比較
Cm vs C++
| 特徴 | C++ | Cm |
|---|---|---|
| 構文 | C++風 | C++風 |
| トレイト | コンセプト(C++20) | interface/impl |
| ジェネリクス | テンプレート | ジェネリクス |
| メモリ管理 | 手動 | 手動+所有権システム |
| match式 | なし | あり |
| with自動実装 | なし | あり |
Cm vs Rust
| 特徴 | Rust | Cm |
|---|---|---|
| 構文 | Rust風 | C++風 |
| トレイト | trait/impl | interface/impl |
| 所有権 | あり | 実装済み(移動セマンティクス、借用チェック) |
| セミコロン | 省略可 | 必須 |
| derive | #[derive(...)] |
with ... |
Cm vs Go
| 特徴 | Go | Cm |
|---|---|---|
| 型システム | シンプル | 高度(ジェネリクス) |
| インターフェース | 暗黙実装 | 明示的実装 |
| ジェネリクス | Go 1.18+ | v0.6.0+ |
| パターンマッチ | なし | あり |
Cmを選ぶ理由
C++プログラマにとって
- ✅ 慣れた構文
- ✅ より安全な型システム
- ✅ モダンな機能(match、with)
- ✅ C++との互換性
Rustプログラマにとって
- ✅ トレイトシステム(interface/impl)
- ✅ パターンマッチング
- ✅ 強力な型推論
- ✅ より簡潔な構文
システムプログラミング初心者にとって
- ✅ 学習しやすいC++風構文
- ✅ コンパイル時エラー検出
- ✅ 明示的な設計
- ✅ 充実したドキュメント
関連リンク
次の章: 環境構築
最終更新: 2026-02-08