LexiFi 成立於 2000 年代,將這篇論文的概念發展成工業級的產品。如今,LexiFi 是領先的軟體解決方案供應商,用於管理衍生性合約。
自成立以來,LexiFi 的軟體一直以 OCaml 編寫。最初也曾考慮過 SML/NJ 作為潛在選項,但選擇 OCaml 的主要原因是其 FFI(能夠輕鬆存取現有的 C 函式庫)的品質,以及使用 make
等標準建置工具的可能性。
事後來看,押注 OCaml 被證明是非常棒的決定。它使 LexiFi 能夠開發出具有無與倫比的敏捷性和穩健性的軟體。OCaml 使一小群開發人員能夠在二十年的演變過程中推動龐大的程式碼庫,同時保持程式碼的簡單易讀。它還有效地為我們的客戶解決了日益增多的問題。
最後,OCaml 工具鏈出色的跨系統支援一直是簡化 Unix、Windows 和 Web(歸功於出色的 js_of_ocaml
)軟體開發和部署的關鍵優勢。
總而言之,OCaml 是實用主義、效率和堅實理論基礎的完美結合,這種組合完全符合 LexiFi 的需求和願景。
案例研究:合約代數
挑戰
LexiFi 軟體堆疊的關鍵技術構建模組之一是其合約代數。這是一種具有正式語義的領域特定語言(DSL),用於描述複雜的衍生性合約。
解決方案
作為論文中描述的組合語言的延伸,這種語言在整個過程中起著關鍵作用。一旦合約進入系統,它就會由一個代數項表示。然後,可以跨各種格式和用於任何數量的目的來儲存、轉換、翻譯、傳達和轉換這個項。
舉個簡單的例子,合約代數轉換的一種方式是將其項編譯為低階位元組碼表示,以便進行非常快速的蒙地卡羅模擬,從而計算合約價格和其他相關數量。
結果
OCaml 非常擅長執行這些任務,這些都是它的拿手好戲。由此產生的程式碼不僅效率高,而且穩健、清晰且簡單。
案例研究:合約匯入和交換
挑戰
LexiFi 必須解決的挑戰之一是如何讓使用者盡可能輕鬆地將新合約輸入系統。這意味著要開發解決方案,以匯入其他格式描述並由現有平台使用的合約,例如 SIX 的 IBT、Barclays 的 COMET 或普通的 PDF 條款清單,這是金融業的通用語言。
解決方案
在這些案例中,LexiFi 都開發了小型組合器函式庫,以剖析、分析和轉換這些匯入的文件,成為基於合約代數的 LexiFi 內部表示。他們透過利用來自 OCaml 生態系統的現有成熟函式庫來做到這一點,例如使用 camlpdf
來剖析 PDF 文件、使用 xmlm
來剖析 XML 以及其他工具。
結果
再次強調,OCaml 出色的符號處理能力使得開發這些連接器成為一項相當愉快的事業,產生了易於維護和隨著時間演進的程式碼。
案例研究:UI 建構
挑戰
由於 LexiFi 的終端使用者大多是沒有特殊程式設計經驗的金融操作員,因此為我們的軟體提供簡單明瞭的使用者介面至關重要。
解決方案
LexiFi 使用 OCaml 的元程式設計功能,直接從 OCaml 程式碼宣告自動衍生使用者介面,使開發人員能夠無縫地同時撰寫程式碼及其相關的使用者介面。這允許一種非常敏捷的開發風格,其中使用者介面可以與程式碼同步演變。這種將使用者介面「綁定」到程式碼的能力意味著兩者永遠不會不同步,而且可以透過建構排除一整類錯誤。
此外,以 OCaml 程式碼描述使用者介面意味著 LexiFi 可以將此描述重新定位到不同的後端,從單一描述產生相同 UI 的 Web 和原生版本。
結果
這種方法大大提高了快速開發新功能的能力,以至於單一開發人員可以在一天內建立新功能的基礎,以及桌面和 Web 上相應的使用者介面,而無需將視線從關鍵的業務邏輯上移開。這絕非易事!