首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >作为Hacklang和Flow背后的编程语言,OCaml有什么好处?

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

Stack Overflow用户
提问于 2014-11-19 17:11:45
回答 1查看 4K关注 0票数 35

最近,Facebook发布了Flow,它是JavaScript的静态类型检查器,主要在OCaml (https://code.facebook.com/posts/1505962329687926/flow-a-new-static-type-checker-for-javascript/)中实现。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-22 07:55:43

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

  • 最大的原因是OCaml对定义自己的数据类型它们上的模式匹配都有出色的支持。Hack和Flow所做的大部分工作是对各种形式的AST进行操作,并且有一种非常好的方式来表达“如果您看到这种节点中有这样的节点,那么做这件事”是非常宝贵的。看看Hack中子类型的定义 --它确实很复杂,但从本质上讲,它只是一对类型之间的大模式匹配,而且在任何语言中,如果没有模式匹配,都会非常复杂。
  • OCaml很大程度上是一种函数式语言,对一流的函数和不可变的数据结构有很大的支持。与上面类似,当你做打字时,你最终会在AST节点上做很多不同类型的映射和折叠,而函数式语言会简洁地表达这一点。例如,输入代码块实际上是它包含的语句
  • 但它并不是纯功能性的。它是“不纯的”--有时,可变状态使用异常或类似的东西是表达某事的最好的方式。但最重要的是,这意味着您不需要任何复杂的杂技或心智模式切换或任何东西调用C函数通过一个FFI。Hack和Flow都使用相同的多线程模型:在不同的mmap'd进程之间共享一个特殊的fork'd区域,其中包含一个共享的、没有锁的哈希表。这是我不想用任何语言表达的东西,除了C -- 这正是我们所做的。OCaml代码可以调用几个神奇的函数,而不需要知道它实际上是C。(顺便说一句,我将在1月份进行一次技术讲座,讨论我们的多线程工作原理以及其他一些黑客实现细节-这真的很酷,但如果没有介绍就很难理解,即使代码是开源的!)
票数 51
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27022835

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档