f# - 比较 F# 和 OCaml

标签 f# ocaml

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

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

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

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

最佳答案

是的,在大多数情况下,许多 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然后看OCamlF#版本。

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

关于f# - 比较 F# 和 OCaml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36752742/

相关文章:

ocaml - SML 和 OCaml 有什么区别?

iterator - OCaml 树迭代器

F# 类型推断遗漏给定信息

c# - 如何声明一个以元组列表作为参数的 f# 方法?

asynchronous - 如何让所有核心参与异步并行化?

datetime - 如何在 F# 中将 DateTime 转换为 Unix TimeStamp?

debugging - 如何跟踪OCaml程序的错误?

node.js - 如何使用 js_of_ocaml 正确编译 OCaml 程序?

.net - 在 F# 中运行 Monogame 的问题

operators - 如何修改 OCaml 中的一元运算符?