OCaml作为Hacklang和Flow背后的编程语言,有哪些优点?

35

2
这是一个好问题,我不明白为什么会被踩。虽然我不懂OCaml,但据说它是编写编译器的绝佳工具(我还要将HaXe添加到您的列表中),而且这篇旧文章(也可以看看这里)简要概述了原因。 - georg
3
由于这主要是基于个人观点的。 - user3477804
1个回答

52
"

OCaml作为一种编程语言的好处是什么?" 这确实是一个基于观点的问题,我不会在这里回答。然而,我在Facebook的Hack团队工作,并与Flow团队密切合作,所以我可以回答你想问的问题:“为什么Facebook选择使用OCaml构建Hack和Flow?”

"
最大的原因是OCaml对定义自己的数据类型在其上进行模式匹配有着出色的支持。Hack和Flow大部分操作都是针对各种AST形式的操作,而拥有一种非常好的表达方式,即“如果你看到这种节点并且里面有那种节点,则执行此操作”,是非常宝贵的。看一下Hack中子类型定义--它确实很复杂,但本质上只是在一对类型上进行了大量的模式匹配,在任何没有模式匹配的语言中,这将变得难以理解。
OCaml在很大程度上是一种函数式语言,支持一流函数和不可变数据结构。类似于上面的情况,当您进行类型检查时,最终会在AST节点上做很多不同类型的映射和折叠,而函数式语言可以非常简洁地表达这种操作。例如,编写代码块的类型就是仅仅是对其包含的语句进行fold_left操作
但它并不是纯函数式的。它是“不纯”的--有时,可变状态, 使用异常或类似的东西只是表达某些内容的最好方式。但最重要的是,这意味着您不需要任何复杂的特技、心理模型转换或任何东西来通过FFI调用C函数。Hack和Flow都使用相同的多线程模型:一个特殊的mmap区域,在不同的fork进程之间共享,包含一个共享的无锁哈希表。这是我不想在除了C以外的任何语言中表达的事情--这正是我们所做的。OCaml代码可以调用一些神奇的函数,而不必知道它实际上是C。 (顺便说一下,我将在1月份做一个技术讲座,介绍我们的多线程工作原理,以及Hack实现细节的其他部分--这真的很酷,但如果没有介绍,即使代码是开源的,也很难理解!)

4
几周前我做了一个有关Hack内部机制的演讲;其中第三个部分是关于神奇的mmap映射区域。我建议你可以观看整场演讲,但如果你只想跳到这一部分,这里是时间戳链接:https://youtu.be/aN22-V-b8RM?t=39m - Josh Watzman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接