📅 2025年12月26日 04:08
CにElixirの魔法を注入した言語が進化 — KC3 v0.1.16で「実装と配布」が一段と現実味を帯びた
要約
C11互換の新興言語KC3がv0.1.16をリリース。グラフDBに裏打ちされたオブジェクトモデル、パターンマッチング、マルチプラットフォームの安全機能やテスト/ビルド改善が一気に詰め込まれた。
この記事を読むべき理由
C言語の性能と低レイヤー制御を保ちながら、ElixirやLisp的なモジュール性・パターンマッチング・メタプログラミングを導入する試みは、日本のシステム/組み込み/インフラ開発者にとって興味深い代替案となる。特にOpenBSDのpledge/unveil対応、macOS向けのANGLE対応、Androidクロスコンパイル対応など、国内の実運用やデプロイ現場で直接役立つ改善が含まれている。
詳細解説
-
言語設計と狙い
KC3は「CにElixirモジュール+パターンマッチ+グラフDBベースの意味論的オブジェクト」を差し込むアプローチをとる。C11準拠を保ちつつ、モジュール化・クロージャ・メタプログラミングを最小限の依存で実現している点が特徴。 -
今回の主要改善点(抜粋)
- ランタイム/ライブラリ周り
- libkc3のdlopen運用をlib/配下に限定し動的参照の扱いを整理。macOSでのスタンドアロン実行を意識した動的ライブラリ探索の工夫あり。
- libtlsを使った基本的なTLSクライアント/サーバのテスト実装が追加され、ikc3ツールでTLS接続が動作確認できる。
- 並行・マルチプロセス対応
- MP(マルチプロセス)安全な整数カウンタ(defcounter)を導入。Counter.get/increase/decreaseがcfn_macroとして利用可能で、タグは正の整数を要する制約がある。
- セキュリティ(OpenBSD)
- unveilとpledgeサポートを追加。OpenBSD上でファイルアクセス制限やsyscall制限を確実に適用できるため、セキュリティ要件の高い環境での運用が容易になる。
- 型・ABIの取り扱い
- f128をf80にリネーム(x86/amd64のlong doubleが80ビットであることに合わせた修正)。System-V ABIに従う構造体の整列/パディング処理を整備し、amd64/arm64/i386/sparc64間でマーシャリングが互換になるようにした。
- ツールチェーン&ビルド改善
- runjでconfigureやテストを並列化/高速化。ポータブルなソートを導入してOS間で一貫したビルド結果を得る工夫あり。テストスイートの実行時間が数分から30秒未満に短縮。
- デモ・グラフィックス
- SDL2 + OpenGLESv3を統一。macOSではANGLE(GLESv3→Metal)を使うことで、AppleのOpenGL廃止後もGLESベース描画を確保。
- ツール群・配布改善
- ikc3(RPCクライアント/サーバ)、kc3s(サーバ版)でRPC/TLS対応。kpkg(KC3製パッケージマネージャ)は短期間で実装され、AndroidクロスビルドやDebian/Gentoo向けの配布サポートが追加された。
- ランタイム/ライブラリ周り
日本市場との関連性
- セキュリティ重視の国内インフラ企業では、OpenBSDのpledge/unveilを活用したサンドボックス運用が評価される。KC3の対応は堅牢なサービス実装の選択肢になる。
- macOS開発者やデスクトップアプリのビルド担当者にとって、ANGLEを使ったGLESv3対応はAppleのOpenGL廃止問題を回避する現実的な手段。
- 組み込み・Android向けクロスコンパイルのサポート強化は、日本のモバイル/IoT開発に直接役立つ。
- CIでの高速テストや再現性のあるビルドは、日本企業の自動化作業に寄与する。
実践ポイント
- 試してみる手順(短縮版)
- Gitリポジトリ(リンクは下記)からソースを取得し、KC3ガイドに従ってインストールする。
- ikc3を使い、ローカルでRPCクライアント/サーバを立てて動作確認(–client/–server、–tlsオプションあり)。
- OpenBSD環境があればpledge/unveilの挙動を検証し、ランタイムの最小権限化を検討する。
- macOSではANGLE経由のSDL2デモを動かし、描画パイプラインの互換性を確認する。
- kpkgを使ったパッケージ化・クロスコンパイルフローをCIに組み込み、並列テスト(runj)で高速化を図る。
- ポータビリティ注意点
- long doubleが80ビットに依存する変更(f80)は数値計算の移植で注意。
- Counterのタグ制約(正整数)やcfn_macroの使い方は並行設計で重要。
引用元
- タイトル: Released KC3 v0.1.16
- URL: https://www.kmx.io/blog/released-kc3-v0.1.16