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、巴克莱的 COMET 或普通的 PDF 条款清单,金融行业的通用语言。
解决方案
在每种情况下,LexiFi 都开发了小型组合器库来解析、分析和将这些导入的文档转换为基于合约代数的 LexiFi 内部表示形式。它们通过利用 OCaml 生态系统中现有的成熟库来实现这一点,例如 camlpdf
用于解析 PDF 文档,xmlm
用于解析 XML 等。
结果
再一次,OCaml 出色的符号处理能力使开发这些连接器成为一项相当愉快的任务,从而产生了易于维护和随时间推移而演变的代码。
案例研究:UI 构建
挑战
由于 LexiFi 的最终用户主要是没有特殊编程经验的金融操作员,因此为我们的软件提供简单明了的用户界面至关重要。
解决方案
LexiFi 使用 OCaml 的元编程功能,直接从 OCaml 代码声明自动推导出用户界面,使开发人员能够同时无缝地编写代码及其相关用户界面。这允许一种极其敏捷的开发风格,其中用户界面可以与代码同步发展。这种将用户界面“绑定”到代码的能力意味着两者永远不会不同步,并且通过构建,一整类错误都被排除在外。
此外,通过用 OCaml 代码描述用户界面,LexiFi 可以将此描述重新定位到不同的后端,从单个描述生成 Web 和原生版本的相同 UI。
结果
这种方法极大地提高了快速开发新功能的能力,以至于单个开发人员可以在一天的时间内为新功能奠定基础,并为其提供相应的用户界面,无论是在桌面端还是 Web 端,而无需将注意力从关键业务逻辑上移开。这绝非易事!