Cm v0.13.1 リリースノート
リリース日: 2026-02-10
✨ ハイライト
v0.13.1は、GPU/Metal対応、マルチアーキテクチャビルド、標準ライブラリ安定化、HTTPS対応、リテラル型の完全サポートを含むリリースです。さらにOpenSSLリンカパスのアーキテクチャ対応修正、WASMテスト安定化、サポート環境の明確化、CI環境の固定化を行いました。
主要な変更点
- GPU/Metal対応: Apple Metal GPUバックエンドによるGPU演算
- ARM64ネイティブビルド: x86_64 LLVM(Rosetta 2)からARM64 LLVMへ移行
- マルチアーキテクチャビルド:
make build ARCH=arm64/x86_64で自動切替 - HTTPS (TLS) 対応: OpenSSL 3.6.0によるセキュア通信
- ジェネリックコンストラクタ/デストラクタ:
self()/~self()構文 - コレクション安定化: Vector, Queue, HashMap をイディオマティックなAPI化
- std::http実装: struct+impl APIデザインによるHTTPクライアント
- const定数評価拡張: const folding、Octalリテラル(
0o)サポート - リテラル型の関数引数・戻り値サポート: 文字列・整数リテラル型の完全な関数シグネチャ対応
🚀 新機能
GPU/Metal対応
Apple Metal GPUバックエンドによるGPU演算:
import std::gpu::create_context;
import std::gpu::gpu_alloc;
import std::gpu::gpu_compute;
int main() {
long ctx = create_context();
long buf_a = gpu_alloc(ctx, a_data, 4);
long buf_b = gpu_alloc(ctx, b_data, 4);
gpu_compute(ctx, "vector_add", buf_a, buf_b, buf_out, 4);
return 0;
}
- Metal Shading Language (MSL) カーネル実行
- int/float/double型のGPUバッファ管理
- macOS Apple Silicon環境で動作
- Nativeコンパイル対応(GPU XOR NN学習テスト搭載)
マルチアーキテクチャビルド
ARCHオプションでターゲットアーキテクチャを指定可能:
make build # デフォルト(LLVM自動検出)
make build ARCH=arm64 # ARM64ビルド
make build ARCH=x86_64 # x86_64ビルド
- LLVMホストターゲットから自動検出
- Homebrewプレフィックスの自動切替
- OpenSSL/LLVMパスの自動設定
BUILD_ENVでLDFLAGSを上書き、x86ライブラリの混入を防止
HTTPS (TLS) 対応
OpenSSL 3.6.0による暗号化通信:
import std::http::request;
int main() {
// HTTPS通信
request("https://example.com", "GET");
return 0;
}
ジェネリックコンストラクタ/デストラクタ
self()/~self()構文による慣用的なライフサイクル管理:
struct Vector<T> {
T* data;
int size;
int capacity;
self() {
this.data = malloc(8 * sizeof(T)) as T*;
this.size = 0;
this.capacity = 8;
}
~self() {
free(this.data as void*);
}
}
int main() {
Vector<int> v(); // コンストラクタ自動呼び出し
v.push(42);
// スコープ終了時にデストラクタ自動呼び出し
return 0;
}
標準ライブラリ安定化
std::collections(Vector, Queue, HashMap)
import std::collections::vector::Vector;
import std::collections::hashmap::HashMap;
int main() {
Vector<int> v();
v.push(1);
v.push(2);
println("size: {v.len()}"); // 2
HashMap<int, int> m();
m.set(1, 100);
return 0;
}
std::sync(Mutex, Channel)
import std::sync::mutex_create;
import std::sync::mutex_lock;
import std::sync::mutex_unlock;
int main() {
long m = mutex_create();
mutex_lock(m);
// クリティカルセクション
mutex_unlock(m);
return 0;
}
std::http(HTTP/HTTPS通信)
struct+impl APIデザインによるHTTPクライアント:
import std::http::HttpClient;
int main() {
HttpClient client();
client.get("http://example.com");
return 0;
}
std::core::result
CmResult<T, E>型の実装:
import std::core::result::CmResult;
CmResult<int, string> safe_divide(int a, int b) {
if (b == 0) {
return CmResult::Err("Division by zero");
}
return CmResult::Ok(a / b);
}
const定数評価拡張
- const folding: コンパイル時定数畳み込みの改善
- Octalリテラル:
0o777形式の8進数リテラルサポート
const int OCTAL = 0o777; // 511
const int FOLDED = 10 * 20; // コンパイル時評価
リテラル型の関数引数・戻り値サポート
リテラル型が関数の引数・戻り値として完全にサポートされました。
文字列リテラル型は string として、整数リテラル型は int として正しくLLVM IRに変換されます。
typedef HttpMethod = "GET" | "POST" | "PUT" | "DELETE";
typedef StatusCode = 200 | 400 | 404 | 500;
void handle_request(HttpMethod method) {
println("Method: {method}");
}
HttpMethod get_method() {
return "GET";
}
🐛 バグ修正
配列リテラル内Union Castの二重生成バグ修正
typedef Value = string | int | bool のようなUnion型の配列リテラルで、要素の値が破壊されるバグを修正しました。
- 根本原因:
lower_array_literalでelem_typeをtypedef未解決の型から取得していたため、Cast結果の型と不一致が発生し二重Castが生成されていた - 修正:
expr_basic.cppでelem_typeをtypedef解決済みの型から取得するよう変更 - 影響テスト:
union_array,union_array_funcが修正によりPASSに回復
リテラル型の関数引数での文字列値破壊バグ修正
typedef HttpMethod = "GET" | "POST" | ... のような文字列リテラル型を関数引数に渡すとゴミ値が出力されるバグを修正しました。
- 根本原因: MIR lowering の
resolve_typedef()がLiteralUnion型を基底型に変換せず素通りさせていたため、LLVM codegenが文字列リテラル型をi32(int) として処理 - 修正:
base.hppとcontext.hppのresolve_typedef()にLiteralUnion→ 基底型(string/int/double)変換を追加 - 影響テスト:
literal_type_checkのexpectを正しい出力に更新、typedef_literal_funcテスト新規追加
� ビルド・インフラ改善
OpenSSLリンカパスのアーキテクチャ対応修正
ネイティブビルド時にARM64環境でx86_64版OpenSSLを参照するバグを修正:
- ARM64:
/opt/homebrew/opt/openssl@3を優先参照 - x86_64:
/usr/local/opt/openssl@3を優先参照 - フォールバック:
brew --prefix openssl@3
WASMテスト安定化
WASMバックエンドで未サポートのネイティブAPIテストに.skipファイルを追加:
tests/test_programs/sync/.skip(llvm-wasm)tests/test_programs/net/.skip(llvm-wasm)tests/test_programs/gpu/gpu_basic.skip(llvm-wasm)
サポート環境の明確化
ドキュメントにサポート環境を明記:
| OS | アーキテクチャ | ステータス |
|---|---|---|
| macOS 14+ | ARM64 (Apple Silicon) | ✅ 完全サポート |
| Ubuntu 22.04 | x86_64 | ✅ 完全サポート |
| Windows | - | ❌ 未サポート |
CI環境の固定化
全CIワークフローのOSバージョンとアーキテクチャを明示的に固定:
macos-latest→macos-14(ARM64)ubuntu-latest→ubuntu-22.04(x86_64)- CMake構成に
-DCM_TARGET_ARCHを追加
�📁 主要な変更ファイル
新機能
| ファイル | 変更内容 |
|---|---|
std/gpu/mod.cm |
Metal GPU演算モジュール |
std/gpu/gpu_runtime.mm |
Objective-C++ Metal GPU ランタイム |
std/http/mod.cm |
HTTP/HTTPS通信モジュール |
std/http/http_runtime.cpp |
HTTP通信ランタイム(OpenSSL統合) |
std/sync/mod.cm |
Mutex/Channel同期プリミティブ |
std/collections/ |
Vector/Queue/HashMap(self()/~self()) |
std/core/result.cm |
CmResult<T, E>型 |
バグ修正
| ファイル | 変更内容 |
|---|---|
src/mir/lowering/base.hpp |
LiteralUnion→基底型変換追加 |
src/mir/lowering/context.hpp |
同上(LoweringContext版) |
src/mir/lowering/expr_basic.cpp |
配列リテラルのelem_type解決修正 |
src/codegen/llvm/core/mir_to_llvm.cpp |
Union Castの安全性改善 |
ビルドシステム
| ファイル | 変更内容 |
|---|---|
CMakeLists.txt |
ARM64自動検出、LLVM/OpenSSLパス |
Makefile |
マルチアーキテクチャ自動環境設定 |
src/codegen/llvm/native/target.hpp |
ARM64トリプル対応 |
src/codegen/llvm/native/codegen.hpp |
OpenSSLパスのアーキテクチャ対応、ARM64フラグ |
CI
| ファイル | 変更内容 |
|---|---|
.github/workflows/*.yml |
macos-14/ubuntu-22.04固定、CM_TARGET_ARCH追加 |
チュートリアル
| ファイル | 変更内容 |
|---|---|
docs/tutorials/ja/types/typedef.md |
リテラル型セクション拡充 |
docs/tutorials/en/types/typedef.md |
同上(英語版) |
docs/tutorials/ja/stdlib/* |
標準ライブラリチュートリアル追加 |
docs/tutorials/ja/internals/* |
コンパイラ内部ドキュメント追加 |
🧪 テスト状況
| カテゴリ | 通過 | 失敗 | スキップ |
|---|---|---|---|
| JIT (O0) | 363 | 0 | 9 |
v0.13.0からの新規テスト (+12):
- GPU:
gpu/gpu_basic.cm,gpu/gpu_xor_nn_test.cm,gpu/gpu_float_test.cm - HTTP:
http/http_external_test.cm,http/http_rest_test.cm - 同期:
sync/thread_channel_atomic_test.cm - const:
const/octal_test.cm,const/const_eval_test.cm - 型:
types/typedef_literal_func.cm,types/typedef_union_comprehensive.cm,types/union_array_func.cm - enum:
enum/union_array_tuple_test.cm
📊 統計
- テスト総数: 372(v0.13.0の360から12増加)
- テスト通過: 363
- 新規標準ライブラリモジュール: gpu, http, collections, core/result
🔮 今後の予定
- v0.14.0: JavaScript/WASMバックエンド強化、File I/O、パッケージ管理
📝 謝辞
このリリースは、ARM64ネイティブ対応、GPU演算、リテラル型完全サポートという大きな技術的目標を達成しました。