OCaml作为Hacklang和Flow背后的编程语言有什么好处?

OCaml作为Hacklang和Flow背后的编程语言有什么好处?,ocaml,Ocaml,最近,Facebook发布了Flow,这是一种JavaScript的静态类型检查器,主要在OCaml()中实现 Hacklang(带有静态类型检查器的PHP)也主要用OCaml编写。因此,我想知道OCaml对于制作静态类型检查器有什么独特的好处?作为一种编程语言,OCaml有什么好处?这确实是一个基于观点的问题,我在这里不打算讨论。然而,我在Facebook的Hack团队工作,并且与Flow团队密切合作,因此我可以回答我想你想问的问题:“Facebook为什么选择OCaml来构建Hack and

最近,Facebook发布了Flow,这是一种JavaScript的静态类型检查器,主要在OCaml()中实现

Hacklang(带有静态类型检查器的PHP)也主要用OCaml编写。因此,我想知道OCaml对于制作静态类型检查器有什么独特的好处?

作为一种编程语言,OCaml有什么好处?这确实是一个基于观点的问题,我在这里不打算讨论。然而,我在Facebook的Hack团队工作,并且与Flow团队密切合作,因此我可以回答我想你想问的问题:“Facebook为什么选择OCaml来构建Hack and Flow?”

  • 最大的原因是OCaml对和有着卓越的支持。Hack和Flow所做的大部分工作都是在各种形式的AST上进行的操作,并且有一种非常好的方式来表达“如果你看到这种节点,里面有这种节点,就做这件事”是非常宝贵的。看看-,它确实很复杂,但它的核心只是一对类型上的一个大模式匹配,如果没有模式匹配,在任何语言中都是难以想象的复杂
  • OCaml在很大程度上是一种函数式语言,非常支持一流的函数和不可变的数据结构。与上面类似,当您执行类型检查时,您最终会在AST节点上执行许多不同类型的映射和折叠,函数式语言会非常简洁地表达这些内容。例如,键入一段代码就是字面意思
  • 但它不是纯粹的功能。它是“不纯的”——有时、、或类似的东西是表达某种东西最好的方式。但最重要的是,这意味着您不需要任何复杂的杂技或心智模型切换,也不需要任何东西通过FFI调用C函数。Hack和Flow都使用相同的多线程模型:在不同的
    fork
    'd进程之间共享一个特殊的
    mmap
    'd区域,其中包含一个共享的无锁哈希表。这是我不想用任何语言表达的东西,除了C--。OCaml代码可以调用几个神奇的函数,而不必知道它实际上是C。(作为旁白,我将在一月份做一个技术讲座,讨论我们的多线程是如何工作的,以及一些其他的黑客实现细节——这确实很酷,但是没有介绍就很难理解,即使代码是开源的!)

这是一个好问题,我不明白为什么会被否决。我不知道OCaml,但据说它是编写编译器的一个很好的工具(我会将HaXe添加到您的列表中),并且(另请参阅)简要介绍了原因。因为它主要基于观点。几周前我做了一次关于Hack内部的演讲;第三部分是魔法mmap'd区域。我建议你看整个演讲,但如果你想直接跳到那一部分,这里有一个带时间戳的链接: