Cm v0.13.0 リリースノート
リリース日: 2026-02-03
✨ ハイライト
v0.13.0は、スレッドAPI刷新、async/await削除、代数的データ型(Enum)、パターンマッチング強化を含むリリースです。
主要な変更点
- std::thread刷新: libcのpthreadを直接使用するシンプルなAPI
- async/await削除: コンパイラレベルのasync/awaitを削除、スレッドベースに移行
- Enum強化: 関連データ付きEnumとパターンマッチング
- Match Guard: パターンマッチにガード条件を追加
🚀 新機能
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:
spawn(fn)- 新しいスレッドを生成join(handle)- スレッド完了を待機し結果を取得detach(handle)- スレッドをデタッチ(バックグラウンド実行)sleep_ms(ms)- 指定ミリ秒スリープ
async/await削除
コンパイラレベルのasync/awaitサポートを削除しました:
async/awaitキーワードは使用不可- 非同期処理は
std::threadを使用して実装 no_std環境でのよりシンプルな実装が可能に
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;
}
注意: ResultとOptionは組み込み型ではなく、ユーザーが明示的にenum定義する必要があります。
Match Guard
パターンマッチにガード条件を追加できます:
match (value) {
x if x > 0 => println("positive"),
x if x < 0 => println("negative"),
_ => println("zero")
}
🔧 破壊的変更
async/await削除
async関数宣言は使用不可await式は使用不可- 既存のasyncコードは
std::threadを使用するよう書き換えが必要
移行例:
// 旧 (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 |
新規テスト:
thread/thread_basic.cm- 基本的なスレッド操作thread/thread_parallel.cm- 並列スレッド実行thread/thread_join_test.cm- join/detach動作確認
📊 統計
- 変更ファイル数: 28
- 追加行数: 293
- 削除行数: 63
🔮 今後の予定
- v0.14.0: std::sync(Mutex, RwLock等)の強化
- v0.15.0: パッケージ管理システム(
gen)実装
📝 謝辞
このリリースは、スレッドモデルの簡素化とno_std環境への対応を目標としました。