Cm v0.13.0 リリースノート

リリース日: 2026-02-03

✨ ハイライト

v0.13.0は、スレッドAPI刷新async/await削除代数的データ型(Enum)パターンマッチング強化を含むリリースです。

主要な変更点


🚀 新機能

std::thread API(pthread直接使用)

libcのpthreadを直接使用するシンプルなスレッドAPIを実装しました:

import std::thread::spawn;
import std::thread::join;
import std::thread::detach;
import std::thread::sleep_ms;

void* worker(void* arg) {
    println("Worker: start");
    sleep_ms(100);
    println("Worker: done");
    return 42 as void*;
}

int main() {
    // スレッド生成
    ulong t = spawn(worker as void*);
    
    // 完了待機と結果取得
    int result = join(t);
    println("Result: {result}");
    
    // デタッチ(バックグラウンド実行)
    ulong t2 = spawn(worker as void*);
    detach(t2);
    
    return 0;
}

API:

async/await削除

コンパイラレベルのasync/awaitサポートを削除しました:

Enum強化(関連データ付き)

enum Option<T> {
    Some(T),
    None
}

int main() {
    Option<int> opt = Option::Some(42);
    
    match (opt) {
        Some(v) => println("Value: {v}"),
        None => println("No value")
    }
    
    return 0;
}

Result/Optionパターン

エラーハンドリングにはユーザー定義のResult<T, E>を使用します:

enum Result<T, E> {
    Ok(T),
    Err(E)
}

Result<int, string> safe_divide(int a, int b) {
    if (b == 0) {
        return Result::Err("Division by zero");
    }
    return Result::Ok(a / b);
}

int main() {
    match (safe_divide(10, 2)) {
        Result::Ok(v) => { println("Result: {v}"); }
        Result::Err(e) => { println("Error: {e}"); }
    }
    return 0;
}

注意: ResultOptionは組み込み型ではなく、ユーザーが明示的にenum定義する必要があります。

Match Guard

パターンマッチにガード条件を追加できます:

match (value) {
    x if x > 0 => println("positive"),
    x if x < 0 => println("negative"),
    _ => println("zero")
}

🔧 破壊的変更

async/await削除

移行例:

// 旧 (v0.12.0)
async int compute() {
    return 42;
}
int result = await compute();

// 新 (v0.13.0)
void* compute(void* arg) {
    return 42 as void*;
}
ulong t = spawn(compute as void*);
int result = join(t);

📁 主要な変更ファイル

スレッドAPI

ファイル 変更内容
std/thread/mod.cm pthread直接使用に変更
src/codegen/llvm/native/runtime_sync.c Future関連関数削除
src/frontend/types/checking/call.cpp println/print特別処理簡略化

async/await削除

ファイル 変更内容
src/frontend/parser/parser.hpp async/awaitパース処理削除
src/frontend/ast/decl.hpp is_asyncフラグ削除
src/hir/nodes.hpp HirAwait削除
src/mir/nodes.hpp MirAwait削除

🧪 テスト状況

カテゴリ 通過 失敗 スキップ
インタプリタ 339 0 13
LLVM JIT 337 1 14

新規テスト:


📊 統計


🔮 今後の予定


📝 謝辞

このリリースは、スレッドモデルの簡素化とno_std環境への対応を目標としました。