【问题标题】:comparing F# and OCaml比较 F# 和 OCaml
【发布时间】:2016-08-13 15:49:52
【问题描述】:

我大致知道 F# 和 OCaml 在“功能”方面有何不同(例如函子、camlp4、度量单位......)。

我想知道以下几点:关于不包含上述功能的代码,F# 和 OCaml 之间的编码风格(除了命名约定之外)是否存在差异?换句话说,如果某些(惯用的)F# 代码可以直接(可能是微不足道地)翻译成 OCaml,那么这种转换是否必然会导致惯用的 Ocaml?

编辑:从 Guy Coder 提供的链接中,我猜一些“惯用的”OCaml 代码可能不会直接转换为“惯用的”F# 代码,因为 F# 中的异常要慢得多(并且在 OCaml 中使用更广泛) .另一个方向呢?一些 F#ish OCaml 代码是否会引起“不要那样做 XX,OCaml 做 XX 的方式是例外而不是 XY..”的反应。

一般来说,在 OCaml 中使用异常与在 F# 中的典型用法相比有什么不同。两种语言中是否还有其他不同使用的结构(例如,由于一种语言的性能损失)?

【问题讨论】:

  • 感谢您花时间真正探索这个问题,而不是简单地浏览一下我提供的链接。我没有积极使用 OCaml,因此我可以提供的内容存在漏洞,但是我认为使用选项类型而不是异常不会是惯用的,我认为使用异常作为 ML 的保留。
  • 如果您以我所拥有的知识来看这个问题,要真正更深入地理解这个问题,那么您不能只看 F# 和 OCaml,而是看整个 ML 系列,ML,CAML,OCaml,和 F#。我相信 CAML 不再活跃,甚至不再用于主流,但出于历史原因,我将其包括在内。
  • 如果您真的想了解更多详情,请尝试联系ICFP 或CUFP 的成员,因为我不是其中任何一个成员。
  • 您可能感兴趣的更多链接来自我提出的有关将 OCaml 转换为 F# 的问题。看我的questions,以Converting OCaml to F#:开头
  • Are there other constructs that are differently used in the two languages 正如我在回答中指出的那样,最大的差异是库和环境的差异,例如.Net 和 Visual Studio 与 batteries included。类型系统也是一个必须更详细了解的东西。我知道一个很好的详细页面,但目前我找不到对它的参考,但它在我的一些 SO cmets 中。此外,Jon Harrop 可以提供更好的答案,因为他多年来一直使用这两种语言进行咨询。

标签: f# ocaml


【解决方案1】:

是的,大部分 OCaml 用户会认为该翻译是惯用的。由于惯用语不是一个精确的标准,因此无法衡量惯用语的程度。

需要注意的是,您必须修改一些代码才能使用一种语言中没有的另一种语言的功能。特别是如果仿函数是在 OCaml 中执行此操作的惯用方式,那么您必须将 F# 代码转换为仿函数。或者,如果 F# 广泛使用 .Net 库代码,那么您将不得不在 OCaml 中重新创建这些函数或找到等效的函数。

我已将我在 ML 和 OCaml 中的份额翻译为 F#,正如您所指出的,我所说的环境和精神才是真正的重大差异,例如函子、camlp4、度量单位、Visual Studio、时间旅行、NUnit、WPF等。

请记住,F# 在移植时以 OCaml 开始,因此在大多数情况下仍有很多共同点。

如果您想看到大量使用 OCaml 和 F# 完成的代码几乎逐行翻译,请查看 John Harrison 的“实用逻辑和自动推理手册”的代码

F#

OCaml

那你自己判断吧。

我必须注意,“实用逻辑和自动推理手册”的代码没有使用类、记录、事件等。它几乎是纯函数。

比较任何两种语言的惯用性的另一种方法(好吧,我创造了这个词)是使用Rosetta Code。 Rosetta Code 包含以多种语言编写的programming task 的解决方案。所以找到一个编程任务,例如create a class,然后查看OCaml 和F# 版本。

并非所有任务都以所有语言完成,但任何人都可以贡献甚至建议新任务。

【讨论】:

猜你喜欢
  • 2013-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-21
相关资源
最近更新 更多