ksharp: K バージョン3のベクトルパワーを .NET エコシステムへ
Arthur Whitney が作った K プログラミング言語は、その極端な簡潔さと強力なベクトル操作により、高性能コンピューティングと金融の世界で伝説的な存在です。APL 系列に根ざした K はデータをベクトルや行列として扱い、命令型言語で何十行も必要になるような複雑なデータ変換を、ほんの数文字で表現できるようにします。
ksharp は C# で書かれた K バージョン3のモダンで包括的な実装です。この配列指向パラダイムを .NET エコシステムにもたらすことで、ksharp は単に K コードを実行する手段を提供するだけでなく、ベクトルプログラミングの禁欲的で高密度な世界と Microsoft .NET の豊富なライブラリエコシステムとの間のギャップを埋めます。
K3 の包括的実装
ksharp の核となる部分は、K バージョン3リファレンスマニュアルの忠実なインタプリタです。ネイティブの動詞、副詞、そしてコア関数システムの全機能を実装しています。K に慣れた人にとって、本プロジェクトは配列言語の基本的な構成要素を提供します。
- Core Data Types: 整数、浮動小数点、文字、シンボル、入れ子リストをサポートし、64 ビットの長整数も扱えます。
- The Adverb System: Over (
/)、Scan (\)、Each (') を含む反復処理の完全実装に加え、複雑な入れ子反復もサポートします。 - Iterative Indexing: 「動詞化された名詞」と組み合わせて使用する副詞をサポートし、散布選択、推移閉包、状態遷移を実現します。
- The Function System: 無名関数、射影、複数文からなる関数をサポートします。
ksharp の最も注目すべき技術的成果の一つは Long Right Scope (LRS) パーシングシステムです。K は演算子固有の優先順位(PEMDAS のような)ではなく、位置による優先順位で知られています。ksharp は動詞の右側にあるすべてを右引数として扱うことで、言語特有の右から左への優先順位を維持しています。
K と .NET の橋渡し: Foreign Function Interface (FFI)
K3 への忠実さは重要ですが、ksharp の主な価値提案は .NET との統合です。孤立したインタプリタとして存在するのではなく、ksharp は強力な Foreign Function Interface (FFI) を備えており、K コードが .NET オブジェクトと直接やり取りできるようにします。
アセンブリのロードとメソッド呼び出し
ユーザーは特定の構文(assembly_name 2: type_name)を用いて K コードから直接 .NET アセンブリをロードできます。ロード後、システムは .NET 型を K の辞書にマッピングし、ドット表記で静的メソッドやインスタンスメソッドを呼び出すことが可能です。例えば、ユーザーは .NET の Complex オブジェクトを生成し、そのメソッドを K REPL から直接呼び出すことができます。
ヒントシステム
K の動的型付けと .NET の静的型付けの間の移行を管理するため、ksharp は Hint System(_gethint と _sethint)を採用しています。これにより開発者はインタプリタに明示的なマーシャリング指示を提供でき、K の整数が .NET メソッドに渡される際に System.Boolean や System.Int32 として扱われることを保証します。
オブジェクトライフサイクル管理
C# のような管理言語とベクトル言語を統合するには、慎重なメモリ管理が必要です。ksharp はスレッドセーフなグローバルオブジェクトレジストリを実装し、.NET オブジェクトハンドルを追跡します。また、IDisposable パターンを組み込み、_dispose 動詞を通じてリソースが適切にクリーンアップされるようにしています。
アーキテクチャと現在の状況
プロジェクトの開発は驚くほど速く、6 ヶ月未満でベータ版に到達しました。アーキテクチャは古典的なインタプリタパイプラインに従っています:Lexer → Parser → AST → Evaluator。
現在の機能
- Test Success: 1,549 件のユニットテストすべてで 100% の合格率を誇ります。
- IPC System: Michal Wallace の貢献により、ksharp は完全な Inter-Process Communication (IPC) システムを備えており、
3:と4:動詞を通じて TCP ベースのメッセージングやリモート実行が可能です。 - Cross-Platform: .NET 8.0 SDK を使用して、Windows、macOS、Linux 上でビルドおよび実行できます。
既知の制限と技術的負債
著者は AI 支援開発で蓄積された「技術的負債」について率直に述べています。今後の改善が期待される主な領域は次のとおりです:
- Parsing Robustness: 現在のパーサは、極端に長いまたは複雑なワンライナーに時折混乱することがあります。
- Performance: .NET はガベージコレクションと安全性を提供しますが、ネイティブ K 実装の生の速度には太刀打ちできません。将来的な最適化としては、グローバルシンボルテーブルのハッシュセットや Linq-to-objects のステートマシン最適化が考えられます。
- UI: 元の K UI(
showとhide)は意図的に省かれ、WinForms や Unity など .NET のネイティブ UI フレームワークを活用する方針です。
コミュニティの視点
ksharp のリリースは、現代における K の有用性について興味深い議論を呼び起こしました。1990 年代の言語の relevancy を疑問視する声もあれば、K のパラダイム—特にデータを第一級のベクトルとして扱うアプローチ—が現代のデータサイエンスや金融工学に依然として高く評価されていると認識する声もあります。
あるユーザーは、ベクトル的言語に対して F# がより自然な適合性を持つ可能性を指摘し、別のユーザーは K の「禁欲的美学」—意図的に最小限に抑えられたデザイン—を指摘しました。実装言語が何であれ、ksharp は橋渡しとして機能し、開発者がコンピューティング史上最も影響力のある(ニッチではあるが)言語の一つを、モダンで管理された環境で試すことを可能にします。