0

我对函数式语言有浓厚的兴趣,因为它们有很多优点,但我不知道它们是否真的在实践中使用,以及它们可以如何集成到主流的 Java、C# 或 C++ 环境中。与其他不懂任何函数式语言的程序员一起工作的程序员可以将它与其他语言结合使用吗?当其他人不理解某个团队成员生成的代码时,这是一个问题,但是用 Scala 编写的 Java 字节码可以很容易地反编译为纯 Java。

我知道 Java 和 Clojure 以及 Java 和 Scala 之间的集成效果很好,但是 C++ 等其他语言呢?

4

3 回答 3

4

我对函数式语言有浓厚的兴趣,因为它们有很多优点,但我不知道它们是否真的在实践中使用

它们肯定是,尽管不如面向对象或过程语言那么多。

它们与主流 Java、C# 或 C++ 环境的集成程度如何。

“集成到另一个环境中”有三种不同的定义。我在这里按优先顺序列出它们。第一个比最后一个要理智得多。

  1. 一个常见的做法是在前端使用 Java 或 C#,然后在后端使用 Erlang 或 Scala 或其他东西。这意味着两个不同的团队使用两种不同的语言并做完全不同的事情。集成在产品层面,两个不同的部分通过网络协议或其他方式进行通信。

  2. 第二种集成是关于在 Scala 中使用例如 Java 库,这种情况经常发生,即使使用其他语言也是如此。这要求调用语言能够调用库语言中的函数。

  3. 从某种意义上说,还有“集成”,即同一个团队在 C++ 和 Scala 中处理同一个程序,这既困难又罕见。

与不了解任何函数式语言的其他程序员一起工作的程序员可以将它与其他语言结合使用吗?

可以?当然。应该?当然不。为了使团队合作发挥作用,团队必须就他们所知道的语言达成一致。团队是要审查、帮助文档和修复代码的人,所以他们应该能够阅读它。

当其他人不理解某个团队成员生成的代码时,这是一个问题,但是用 Scala 编写的 Java 字节码可以很容易地反编译为纯 Java。

不是以一种远程实用的方式阅读。由于 Scala 的工作方式如此不同,它的字节码看起来也很奇怪。

我知道 Java 和 Clojure 以及 Java 和 Scala 之间的集成效果很好,但是 C++ 等其他语言呢?

许多语言提供 FFI(外来函数接口),这是一种从您的语言调用以其他语言编写的函数的方法。Haskell 有一个用于 C 代码的 FFI,这意味着您可以将任何 C 库与您的 Haskell 代码一起使用。这取决于语言,很难给出任何一般性的答案。

从 Java 调用 C/C++ 显然是可能的,因此它也应该可以从 Scala 或 Clojure 调用。

于 2013-06-10T17:14:56.813 回答
2

Haskell 有相当成熟的C 外函数接口。我只用它来调用 C 库,但反之亦然。

于 2013-06-08T23:26:42.053 回答
2

与不了解任何函数式语言的其他程序员一起工作的程序员可以将它与其他语言结合使用吗?

是的。这通常是通过“外部函数接口”实现的。根据您的语言实现,将或多或少地支持从您的语言或从其他语言调用。

于 2013-06-10T16:31:55.777 回答