ksharp: 將 K 版本 3 的向量力量帶入 .NET 生態系統

K 程式語言,由 Arthur Whitney 創造,因其極簡潔和強大的向量運算而在高效能運算與金融領域傳聞遐邇。根植於 APL 家族,K 將資料視為向量與矩陣,使開發者能以少數符號表達在命令式語言中需要數十行才能完成的複雜資料轉換。

ksharp 是一個以 C# 編寫的現代且全面的 K 版本 3 實作。透過將此陣列導向範式帶入 .NET 生態系統,ksharp 不僅提供執行 K 程式碼的方式;它還連接了向量程式的嚴肅、高密度世界與 Microsoft .NET 豐富的程式庫生態系統之間的差距。

全面的 K3 實作

在其核心,ksharp 是 K 版本 3 參考手冊的忠實解譯器。它實作了原生動詞、副詞及核心函式系統的完整套件。對於熟悉 K 的人來說,該專案提供了陣列語言的基本構建塊:

  • 核心資料類型:支援整數、浮點數、字元、符號及巢狀列表,包括 64 位長整數。
  • 副詞系統:完整實作迭代,包括 Over (/)、Scan (\)) 和 Each ('`),以及複雜的巢狀迭代。
  • 迭代索引:支援與「動詞化名詞」搭配使用的副詞,使得分散選擇、傳遞閉包和狀態轉換成為可能。
  • 函式系統:支援匿名函式、投射及多語句函式。

ksharp 最顯著的技術成就之一是其 Long Right Scope (LRS) 解析系統。K 以位置優先級而非運算子特定優先級(如 PEMDAS)著稱。ksharp 透過確保動詞右側的所有內容被視為其右引數來實現此特性,從而保持該語言特有的由右至左優先級。

連接 K 與 .NET:外部函式介面 (FFI)

雖然對 K3 的忠實度是首要任務,但 ksharp 的主要價值主張在於其與 .NET 的整合。ksharp 不僅僅是一個孤立的解譯器,它還包含一個強大的外部函式介面 (FFI),使得 K 程式碼能直接與 .NET 物件互動。

組件載入與方法呼叫

使用者可以使用特定語法 (assembly_name 2: type_name) 直接從 K 程式碼載入 .NET 組件。載入後,系統會將 .NET 類型映射為 K 字典,以點號表示法呼叫靜態與實例方法。例如,使用者可以直接從 K REPL 建立一個 .NET Complex 數字物件並呼叫其方法。

提示系統

為了管理 K 的動態類型與 .NET 的靜態類型之間的轉換,ksharp 使用 提示系統 (_gethint_sethint)。這使開發者能向解譯器提供明確的編組指令,確保傳遞給 .NET 方法時,K 整數會被視為 System.BooleanSystem.Int32

物件生命週期管理

將像 C# 這樣的管理語言與向量語言整合時,需要謹慎處理記憶體。ksharp 實作一個執行緒安全的全域物件登記冊,用來追蹤 .NET 物件控制碼,並透過 _dispose 動詞整合 IDisposable 模式,以確保資源得到適當清理。

架構與目前狀態

專案開發進展驚人,僅六個月內即達到 Beta 版。架構遵循經典的解譯器管線:Lexer $ ightarrow$ Parser $ ightarrow$ AST $ ightarrow$ Evaluator

目前功能

  • 測試成功:該專案在 1,549 個單元測試中達成 100% 通過率。
  • IPC 系統:感謝 Michal Wallace 的貢獻,ksharp 包含完整的程序間通訊 (IPC) 系統,透過 3:4: 動詞實現以 TCP 為基礎的訊息傳遞與遠端執行。
  • 跨平台:該專案可透過 .NET 8.0 SDK 在 Windows、macOS 和 Linux 上建置與執行。

已知限制與技術債

作者對在 AI 輔助開發期間累積的「技術債」保持透明。未來改進的主要領域包括:

  • 解析穩健性:目前的解析器偶爾會被極長或複雜的一行程式的一行程式所混淆。
  • 效能:雖然 .NET 提供垃圾回收與安全性,但無法與原生 K 實作的原始速度競爭。未來的最佳化可能包括全域符號表雜湊集以及 Linq-to-objects 狀態機最佳化。
  • 使用者介面:原始的 K 使用者介面 (showhide) 已被刻意省略,以利用 .NET 原生的 UI 框架,如 WinForms 或 Unity。

社群觀點

ksharp 的發布引發了關於 K 在現代時代實用性的有趣討論。一些觀察者質疑來自 1990 年代語言的相關性,而另一些人則認識到 K 的範式——特別是其將資料視為一級向量的方法——對現代資料科學與金融工程仍具有高度相關性。

有一位使用者指出 F# 可能是向量類語言更自然的選擇,而其他人則指出 K 的「嚴肅美學」,這是有意保持極簡的。無論具體的實作語言為何,ksharp 都充當一座橋樑,讓開發者能在現代受管理的環境中實驗計算歷史上最具影響力( albeit 可能是小眾)的語言之一。

Sources