Programming languages 为什么对冲基金和金融服务经常使用OCaml?

Programming languages 为什么对冲基金和金融服务经常使用OCaml?,programming-languages,ocaml,quantitative-finance,Programming Languages,Ocaml,Quantitative Finance,在与许多Quant/Hedgie交谈时,我得出的结论是,他们中的许多人似乎正在使用自制语言或OCaml来完成许多任务。他们中的许多人无法回答的是为什么 我当然可以理解为什么他们不想使用C++,但是为什么OcAML比其他脚本语言更优越,比如Python,露比等?< /P> < P>,因为它是快速的(比C++更简洁)。 :更快 :更快 :速度较慢但代码较少 现在,我们都听到了关于谎言、该死的谎言和基准的台词,所以推荐了盐粒——但这是一个相当好的比较。归根结底,如何处理自己的问题和数据很重要 与P

在与许多Quant/Hedgie交谈时,我得出的结论是,他们中的许多人似乎正在使用自制语言或OCaml来完成许多任务。他们中的许多人无法回答的是为什么


<>我当然可以理解为什么他们不想使用C++,但是为什么OcAML比其他脚本语言更优越,比如Python,露比等?< /P> < P>,因为它是快速的(比C++更简洁)。
  • :更快
  • :更快
  • :速度较慢但代码较少

现在,我们都听到了关于谎言、该死的谎言和基准的台词,所以推荐了盐粒——但这是一个相当好的比较。归根结底,如何处理自己的问题和数据很重要

与Python/Ruby相比,并行化微不足道?至少对于F#来说是这样,但对于Caml/OCaml来说应该是这样,原因大致相同

尽管我非常喜欢Ruby,但对于主要是数学或聚合的繁重任务来说,它并不是我的首选,Python和Ruby都还没有真正强大的多线程支持


由于模式匹配和对不变性的偏好,相对复杂的计算管道的简洁性(在Ruby中更难实现,在Python中稍容易实现,但比基于ML的语言更难实现)对于大型数据集上的计算最有价值。

作为一种函数式语言,它本质上是数学语言,这很可能符合这些公司需要解决的问题。正如其他人所指出的,它具有良好的性能


也许这就是为什么微软为F#

选择OCaml的原因,我不在这样的地方工作,所以这些只是猜测为什么我会在他们的位置上这么做:


它通常比Ruby和Python等语言快一点,而且作为一种静态类型的函数式语言,它通常更容易对代码进行推理,并且知道它不包含细微的bug。(是的,单元测试也应该有助于抓住这些问题,但额外保证你的财务数据不会被搞砸是件好事。)此外,函数式编程与数学的关系非常密切,比大多数高级语言范例(比如,没有数学的OO分支)更为密切,因此,它很擅长对他们在那里实际做的事情进行建模。

根据我对Quants的经验,它是VBA(读:Excel)与c#或f#有时也是如此

编辑:

我要说的是,对于否决票,我个人不知道有任何定量人士使用caml…

请阅读Yaron Minsky和Stephen Weeks的文章(抱歉,虽然这篇文章过去是在Jane Capital免费发布的,但现在已经不存在了,所以我将ACM链接留作参考)。他们详细地了解了他们认为OCAML的优点和缺点,尽管它们大部分是作为一个给定的,它比他们考虑的大多数其他选项(即不是很多直接与C++,Python,你有什么比较)更好。 作者在Jane Street Capital工作,该公司在OCaml代码方面投入了大量资金

更新:另请参见线程。其中一个提到了Yaron Minsky在CMU上关于Jane Street Capital使用Caml的介绍。大约一个小时,非常有趣


更新二:Yaron写了另一篇概述,这次是关于ACM队列的,名为。

在Don的帖子上,Jane Street Capital甚至有一篇文章,有更多关于他们OCaml参与的链接(包括一篇文章)。OCaml的性能通常是一个很大的争议,但我认为“量子”也喜欢它,因为功能范式非常适合他们的分析工作,所以我认为他们是早期采用者。然后公司发现它同样适用于系统编程。

首先要记住的是,尽管OCaml具有REPL和清晰、简洁的语法,但它不像Python或Ruby那样是一种动态语言。它具有静态类型并编译为本机代码

对于定量分析,脚本语言更方便。您可以访问许多库,可以轻松地编写快速而肮脏的脚本来管理信息,并且即使对于非程序员来说,构建中小型程序也很容易

为了创建真正参与交易的算法和系统,您需要类似于OCaml的东西。OCaml的主要优点是它的功能性、可读性(它的可读性几乎和Python这样的动态语言一样好)、可靠性,但主要是速度。OCaml比大多数人想象的快得多——它是C快的(实际上比C慢一点,但比动态语言快很多很多倍)。OCaml的速度足以创建HFT系统,这对于Python或Ruby来说都不是什么好东西


此外,请记住,在Scala和Clojure出现之前,Jane Street(最有发言权的OCaml布道者)就采用了OCaml

这是+1!这就是他们渴望的速度,他们喜欢将函数作为一类对象和多尾递归。似乎不是针对
OCaml vs Python
,而是针对
OCaml vs Haskell
并行化在OCaml中实际上有点笨拙-整个语言都有一个全局锁,因此一次只能有一个线程执行OCaml代码。你必须分离额外的进程才能使用多个核心或CPU。哇,这太糟糕了。我想这意味着它与Python的基础大致相同,除了所有优秀的模式匹配功能和更普遍的不变性。@Chuck:您现在有了多核Ocaml:多核Ocaml即将到来,但我也希望看到Ocaml采用Libuv库,这样我们就可以创建事件服务器la Node.js,看:你不能说范畴理论是数学的OO分支吗?然而,范畴理论的建模有很多函数方法。如果范畴理论是数学的面向对象分支