概要
- jank によるC++とのシームレスなインターフェースの進展
- メモリ管理や型システムの強化、複雑な型への対応
- 実用例 としてHello WorldやJSONパーサ、FTXUIとの連携を紹介
- Clang/LLVM の協力と課題、今後の展望
- パッケージングや配布、コミュニティ参加の呼びかけ
jankによるC++シームレスインターフェースの進展
- 2024年4月時点 ではjankからC++へのアクセスが不可能だった状況
- 個人開発者 による四半期の成果報告
- Githubスポンサー や Clojurists Together からの支援への感謝
- Clang/LLVM のVassil Vassilev氏、Lang Hames氏への謝意
- C++との「魔法のような」連携を実現した技術基盤
メモリ管理の強化
- cpp/new と cpp/delete による手動メモリ管理の実装
- jankのGCアロケータ(bdwgc) を活用し、mallocの代替を実現
- cpp/delete 利用時は積極的・決定的なメモリ回収が可能
- デストラクタ に対するbdwgc完全対応
- 手動削除と自動回収の両方で非自明なデストラクタ呼び出しに対応
真偽値とリテラル・型表現の拡張
- cpp/true ・ cpp/false でC++のbool値を直接扱う
- #cppリーダーマクロ によるC++リテラル導入予定
- 複雑な型表現 (例:cpp/intやcpp/type "std::map<std::string, int>")
- .サフィックス の省略でコンストラクタ呼び出しを簡略化
Opaque Boxによるポインタの安全な取り扱い
- void *型のような生ポインタをjankオブジェクトに cpp/box でラップ
- jankのデータ構造内で 型安全 に扱う仕組み
- cpp/unbox で型情報を明示しつつC++ポインタに復元
プリコンパイル済みヘッダー(PCH)対応
- Clang によるjank用C++ヘッダーのJIT処理を高速化
- 初回起動時 やアップデート時にPCH自動再生成
- 起動時間短縮・パフォーマンス向上
安定性と静的型付け
- 数百件のinteropテスト でクラッシュやバグを発見・修正
- 静的型付け (C++の型システム)をそのまま利用
- リフレクションや型推測なし でコンパイルエラーによる安全性確保
実用例
- Hello World :cpp/std.coutとcpp/castでC++ストリーム出力
- JSON Pretty Printer :nlohmann/jsonヘッダーとstd::ifstreamを活用
- FTXUI連携 :hiccup記法による純粋データでターミナルUI構築
- Opaque BoxでC++オブジェクトをjank関数間で受け渡し
- std::vectorやClojureの機能を活用した柔軟な実装
Claspとの比較とインスピレーション
- Clasp (Common Lispベース、MPS GC、LLVM連携)との相違点
- Christian Schafmeister博士 への敬意と影響
今後の課題と展望
- 自動デストラクタ呼び出し (スタック割当オブジェクト)未対応
- Clang/LLVM のバグや未実装機能への依存と課題
- 資金提供 (Github Sponsor等)による開発加速の呼びかけ
- 次四半期は パッケージング・配布の簡易化 が主眼
- バグ修正、ツーリング、ドキュメント整備後に アルファ版リリース を予定
コミュニティ参加の案内
- Slack でのコミュニティ参加
- GitHub での設計議論やチケット対応
- スポンサーシップ や企業協賛の呼びかけ