Cm v0.12.0 リリースノート

リリース日: 2026-01-28

✨ ハイライト

v0.12.0は、const強化多次元配列最適化Linter/Formatter末尾呼び出し最適化を含む開発ツール中心のリリースです。

主要な変更点


🚀 新機能

const強化(配列サイズにconst変数を使用可能)

コンパイル時定数評価を実装し、配列サイズの宣言にconst変数や定数式を使用できるようになりました:

const int SIZE = 10;
const int DOUBLE_SIZE = SIZE * 2;  // 定数式も評価可能

int main() {
    int[SIZE] arr1;           // int[10]
    int[DOUBLE_SIZE] arr2;    // int[20]
    
    println(arr1.size());     // 10
    println(arr2.size());     // 20
    
    return 0;
}

サポートされる演算

多次元配列フラット化最適化

多次元配列を1次元配列に自動変換し、キャッシュ効率を大幅に改善:

// コンパイラが自動的に最適化
int arr[100][100];  // → 内部的に int arr[10000] として扱う

// ユーザーコードは変更不要
arr[i][j] = value;  // → arr_flat[i * 100 + j] = value

Linter実装

コードの静的解析ツールを実装しました:

./cm lint src/main.cm
./cm lint src/          # ディレクトリ内を再帰チェック

機能:

Formatter実装

コードフォーマッターを実装しました:

./cm fmt src/main.cm    # フォーマット結果を表示
./cm fmt -w src/main.cm # ファイルに書き込み

機能:

末尾呼び出し最適化(TCE)

LLVMレベルでの末尾呼び出し最適化を実装。再帰関数のスタックオーバーフローを防止:

// 末尾再帰でスタックオーバーフローなし
int factorial_tail(int n, int acc) {
    if (n <= 1) return acc;
    return factorial_tail(n - 1, n * acc);  // TCE適用
}

🔧 CI/CD改善

Windows対応の一時停止

不要なテストバイナリの削除


📁 主要な変更ファイル

コンパイラ本体(const強化)

ファイル 変更内容
src/frontend/types/scope.hpp Symbolconst_int_valueフィールド追加
src/frontend/types/checking/checker.hpp evaluate_const_expr, resolve_array_size宣言追加
src/frontend/types/checking/utils.cpp コンパイル時評価・配列サイズ解決の実装
src/frontend/types/checking/stmt.cpp check_letにconst値評価を追加
src/frontend/types/checking/decl.cpp GlobalVarDeclの登録処理追加

Linter/Formatter

ファイル 変更内容
src/lint/ Linter実装(命名規則、未使用変数、const推奨)
src/formatter/ Formatter実装(AST Rewriter方式)
src/main.cpp lint/fmtコマンド追加

ドキュメント

ファイル 変更内容
docs/FEATURES.md const強化機能を追加
docs/design/v0.12.0/const_enhancement.md 設計ドキュメント(新規)
docs/UNIMPLEMENTED_FEATURES.md 未実装機能リスト(新規)
docs/flyer/ Cm言語のチラシを追加

🧪 テスト状況

カテゴリ 通過 失敗 スキップ
LLVM Native (O0) 281 0 31
LLVM Native (O3) 281 0 31
インタプリタ (O0) 283 0 29
インタプリタ (O3) 283 0 29

📊 統計


⚠️ 重要な変更

Windows対応について

現在Windows対応は一時停止中です。Linux/macOSでの開発を推奨します。

const評価の制限


🔮 今後の予定


📝 謝辞

このリリースは多くのフィードバックとテストによって実現しました。特にLinter/Formatterの設計とconst評価のテストに貢献してくださった方々に感謝します。