English

Cm v0.10.0 リリースノート

リリース日: 2025-12-15
リリースタイプ: Development (開発版)
重要度: ⭐⭐⭐⭐⭐ メジャーアップデート


🎯 ハイライト

v0.10.0は配列・ポインタ・型システムの完全な再設計を含む大規模なアップデートです。C/C++との互換性を強化し、型安全性を保ちながら実用的なシステムプログラミングを可能にします。

主要な変更点

  1. 配列とポインタの完全実装 - C++スタイルの配列/ポインタ構文、Array Decay
  2. 型制約システムの統一 - インターフェース境界の明確化(AND/OR境界)
  3. 自動トレイト実装(with) - Rust風のderiveをC++風に再設計
  4. デッドコード削除 - 未使用関数・構造体の自動削除による最適化
  5. operator実装の完全対応 - LLVM/WASMでのカスタム演算子定義
  6. CI/CD整備 - クロスプラットフォームテスト(Linux/macOS/Windows)

🆕 新機能

1. 配列サポート(完全実装)

C++スタイルの配列宣言と操作をネイティブサポート。

// 配列宣言と初期化
int[5] numbers = [1, 2, 3, 4, 5];

// 多次元配列
int[3][4] matrix;

// 構造体配列
struct Point { int x; int y; }
Point[10] points;

// インデックスアクセス
int first = numbers[0];
numbers[1] = 42;

実装状況:

2. ポインタサポート(完全実装)

C/C++互換のポインタ構文とメモリ操作。

// ポインタ宣言
int* p;
int x = 42;

// アドレス演算子
p = &x;

// デリファレンス
int value = *p;
*p = 100;  // xは100になる

// 構造体ポインタ
Point pt = Point(10, 20);
Point* ptr = &pt;
ptr->x = 30;  // メンバアクセス(構文糖衣)

実装状況:

3. 配列→ポインタ暗黙変換(Array Decay)

C/C++と同様の配列からポインタへの暗黙的変換。

int[5] arr = [1, 2, 3, 4, 5];
int* p = arr;  // arrの先頭要素へのポインタ

void print_array(int* data, int size) {
    for (int i = 0; i < size; i++) {
        println(data[i]);
    }
}

print_array(arr, 5);  // 配列を関数に渡す

4. with キーワードによる自動トレイト実装

Rustの#[derive(...)]をC++風に再設計したwithキーワード。

// 自動的に == 演算子を生成
struct Point with Eq {
    int x;
    int y;
}

Point a = Point(1, 2);
Point b = Point(1, 2);
bool same = (a == b);  // true

// 複数トレイトの自動実装
struct Student with Eq + Ord + Clone {
    int id;
    string name;
}

サポート済みトレイト:

実装状況:

5. 統一された型制約システム

インターフェース境界の構文を統一し、AND/OR境界をサポート。

// 単一インターフェース境界
<T: Printable> void print(T value);

// AND境界(複数インターフェースを実装)
<T: Eq + Ord> T max(T a, T b) {
    return a > b ? a : b;
}

// OR境界(いずれかのインターフェースを実装)
<T: Numeric | Stringable> void display(T value);

// where句
<T, U> Pair<T, U> make_pair(T first, U second)
where T: Clone, U: Clone {
    return Pair<T, U>(first.clone(), second.clone());
}

破壊的変更:

6. デッドコード削除(DCE)

未使用の関数・構造体を自動的に削除してバイナリサイズを削減。

struct Unused { int x; }  // 使われないので削除される

void helper() {  // mainから到達不可能なので削除される
    println("never called");
}

int main() {
    println("Hello");
    return 0;
}

最適化効果:

7. ufloat / udouble プリミティブ型

非負制約付き浮動小数点型(セマンティクスのみ、実行時検証なし)。

ufloat distance = 10.5;   // 32bit 非負浮動小数点
udouble area = 100.25;    // 64bit 非負浮動小数点

// 負の値は代入可能だがセマンティクス違反
ufloat x = -5.0;  // コンパイルは通るが意味的に不正

実装状況:


🔧 改善

1. operator実装の完全サポート

HIR/MIRの型推論を強化し、カスタム演算子の実装を完全サポート。

struct Vec2 {
    float x;
    float y;
}

impl Vec2 {
    operator Vec2 +(Vec2 other) {
        return Vec2(self.x + other.x, self.y + other.y);
    }
    
    operator Vec2 -(Vec2 other) {
        return Vec2(self.x - other.x, self.y - other.y);
    }
}

Vec2 a = Vec2(1.0, 2.0);
Vec2 b = Vec2(3.0, 4.0);
Vec2 c = a + b;  // (4.0, 6.0)

修正内容:

2. 論理演算子の修正

LLVM/WASMバックエンドでの論理AND/OR演算子を修正。

bool a = true;
bool b = false;

bool and_result = a && b;  // false
bool or_result = a || b;   // true

修正内容:

3. where句サポート

型制約をwhere句で記述できるように拡張。

<T, U> Result<T, U> combine(T value, U error)
where T: Clone, U: Display {
    // ...
}

4. 文字列操作の改善

文字列リテラルと文字列型の処理を改善。

5. 関数ポインタのサポート拡張

関数ポインタ型の宣言と使用を強化。


🐛 バグ修正

LLVMバックエンド

CI/CD


💥 破壊的変更

1. 型制約の変更

変更前:

<T: int> void foo(T x);  // 具体型境界

変更後:

<T: Numeric> void foo(T x);  // インターフェース境界のみ

2. ConstraintKind の変更

内部型システムの変更(APIユーザーに影響):


⚠️ 既知の問題

未実装機能

  1. typedef型ポインタ
    • インタプリタでは動作
    • LLVM/WASMコンパイルは未対応
  2. with自動実装のWASM
    • LLVMでは動作
    • WASMバックエンド未対応
  3. 実行時型検証
    • ufloat/udoubleの非負制約チェックなし

パフォーマンス


📊 統計情報

テストカバレッジ

コードサイズ


🔨 開発者向け情報

ビルド要件

ビルド方法

# LLVM有効ビルド
cmake -B build -DCM_USE_LLVM=ON
cmake --build build

# テスト実行
ctest --test-dir build
./build/bin/cm tests/regression/*.cm
make test-llvm-all

CI/CDマトリクス

OS LLVM WASM 状態
Ubuntu 22.04 ✅ 17 🟢
macOS 14 ✅ 17 🟢
Windows 2022 ✅ 17 🟢

📚 ドキュメント更新

新規作成

更新


🎓 学習リソース

サンプルコード

v0.10.0の新機能を使ったサンプルコードはexamples/tests/test_programs/にあります:

重要な設計文書

  1. docs/design/CANONICAL_SPEC.md - 正式言語仕様(必読)
  2. docs/design/architecture.md - システム設計
  3. docs/PROJECT_STRUCTURE.md - プロジェクト構造

🚀 次のステップ(v0.10.0予定)

  1. スライス型 - []T 動的配列ビュー
  2. String型の改善 - 標準文字列ライブラリ
  3. モジュールシステム - import/exportの完全実装
  4. マクロシステム - #macroの実装
  5. エラーハンドリング - Result<T, E>の標準化

🙏 謝辞

このリリースは以下の貢献によって実現しました:


📝 フィードバック

バグ報告や機能リクエストはGitHubイシューまでお願いします。

Cm言語をお使いいただきありがとうございます! 🎉