比较 F# 和 OCaml
comparing F# and OCaml
我大致知道 F# 和 OCaml 在 "features" 方面有何不同(例如仿函数、camlp4、度量单位...)。
我想知道以下问题:关于不包含所述功能的代码,F# 和 OCaml 之间的编码风格(除了命名约定之外)是否存在差异?换句话说,如果一些(惯用的)F# 代码可以直接(可能是平凡的)翻译成 OCaml,这种转换是否一定会导致惯用的 Ocaml?
编辑:根据 Guy Coder 提供的链接,我猜某些 "idiomatic" OCaml 代码可能不会直接转换为 "idiomatic" F# 代码,因为 F# 中的异常要慢得多(并且在 OCaml 中使用更广泛)。另一个方向呢?某些 F#ish OCaml 代码是否会根据 "Don't do XX that way, the OCaml way to do XX is with exceptions instead of XY.."
引起反应?
一般来说,与 F# 中的典型用法相比,在 OCaml 中使用异常有何不同。是否有其他结构在两种语言中使用不同(例如,由于一种语言的性能损失)?
是的,大多数 OCaml 用户认为翻译是地道的。由于惯用不是一个精确的标准,因此无法衡量惯用程度。
需要注意的是,您必须修改一些代码才能使用一种语言中没有的功能,而另一种语言中没有。特别是如果仿函数是在 OCaml 中执行此操作的惯用方式,那么您必须将 F# 代码转换为仿函数。或者,如果 F# 广泛使用了 .Net 库代码,那么您将不得不在 OCaml 中重新创建这些函数或找到等效函数。
我已经将我的 ML 和 OCaml 部分翻译成 F#,正如你所注意到的,我所说的环境和精神才是真正的大区别,例如仿函数、camlp4、度量单位、Visual Studio、时间旅行、NUnit、WPF 等
请记住,F# 在移植时以 OCaml 开始,因此在大多数情况下仍有很多共同点。
如果您想查看在 OCaml 和 F# 中完成的大量代码,几乎逐行翻译,请查看 John Harrison "Handbook of Practical Logic and Automated Reasoning" 的代码
那你自己判断吧
我必须注意 "Handbook of Practical Logic and Automated Reasoning" 的代码没有使用 类、记录、事件等。它几乎是纯函数。
另一种比较任何两种语言的惯用性(好的,所以我创造了这个词)的方法是使用 Rosetta Code. Rosetta Code contains solutions to programming task written in many languages. So find a programming task, e.g. create a class and then look at the OCaml and F# 版本。
并非所有任务都以所有语言完成,但任何人都可以贡献甚至建议新任务。
我大致知道 F# 和 OCaml 在 "features" 方面有何不同(例如仿函数、camlp4、度量单位...)。
我想知道以下问题:关于不包含所述功能的代码,F# 和 OCaml 之间的编码风格(除了命名约定之外)是否存在差异?换句话说,如果一些(惯用的)F# 代码可以直接(可能是平凡的)翻译成 OCaml,这种转换是否一定会导致惯用的 Ocaml?
编辑:根据 Guy Coder 提供的链接,我猜某些 "idiomatic" OCaml 代码可能不会直接转换为 "idiomatic" F# 代码,因为 F# 中的异常要慢得多(并且在 OCaml 中使用更广泛)。另一个方向呢?某些 F#ish OCaml 代码是否会根据 "Don't do XX that way, the OCaml way to do XX is with exceptions instead of XY.."
引起反应?一般来说,与 F# 中的典型用法相比,在 OCaml 中使用异常有何不同。是否有其他结构在两种语言中使用不同(例如,由于一种语言的性能损失)?
是的,大多数 OCaml 用户认为翻译是地道的。由于惯用不是一个精确的标准,因此无法衡量惯用程度。
需要注意的是,您必须修改一些代码才能使用一种语言中没有的功能,而另一种语言中没有。特别是如果仿函数是在 OCaml 中执行此操作的惯用方式,那么您必须将 F# 代码转换为仿函数。或者,如果 F# 广泛使用了 .Net 库代码,那么您将不得不在 OCaml 中重新创建这些函数或找到等效函数。
我已经将我的 ML 和 OCaml 部分翻译成 F#,正如你所注意到的,我所说的环境和精神才是真正的大区别,例如仿函数、camlp4、度量单位、Visual Studio、时间旅行、NUnit、WPF 等
请记住,F# 在移植时以 OCaml 开始,因此在大多数情况下仍有很多共同点。
如果您想查看在 OCaml 和 F# 中完成的大量代码,几乎逐行翻译,请查看 John Harrison "Handbook of Practical Logic and Automated Reasoning" 的代码
那你自己判断吧
我必须注意 "Handbook of Practical Logic and Automated Reasoning" 的代码没有使用 类、记录、事件等。它几乎是纯函数。
另一种比较任何两种语言的惯用性(好的,所以我创造了这个词)的方法是使用 Rosetta Code. Rosetta Code contains solutions to programming task written in many languages. So find a programming task, e.g. create a class and then look at the OCaml and F# 版本。
并非所有任务都以所有语言完成,但任何人都可以贡献甚至建议新任务。