我对函数式语言非常感兴趣,因为它们有很多优点,但我不知道它们是否真的用于实践,以及它们如何被集成到主流的Java,C#或C ++环境中。程序员是否可以与其他不懂任何功能语言的程序员一起工作,并将其与其他语言结合使用?当其他人不理解一个团队成员生成的代码时,这是一个问题,但是用Scala编写的Java字节代码可以很容易地反编译为纯Java。
我知道Java和Clojure以及Java和Scala之间的集成非常有效, 但是像C ++这样的其他语言呢?
答案 0 :(得分:4)
我对函数式语言非常感兴趣,因为它们有很多优点,但我不知道它们是否真的在实践中使用
它们肯定是,但不像面向对象或程序语言那么多。
如何将它们集成到主流的Java,C#或C ++环境中。
“融入另一个环境”有三种不同的定义。我按照优先顺序列出它们。第一个比上一个更健全。
常见的事情是在前端使用Java或C#,然后在后端使用Erlang或Scala或其他东西。这意味着两个不同的团队使用两种不同的语言并完成不同的事情。集成在产品层面,两个不同的部分通过网络协议进行通信。
第二种集成是关于使用例如Scala中的Java库,即使使用其他语言也会发生很多事情。这要求调用语言能够从库语言中调用函数。
还有“整合”,即同一个团队在C ++和Scala中使用相同的程序,这既困难又罕见。
与其他不懂任何功能语言的程序员合作的程序员是否可以将其与其他语言结合使用?
莫非?当然。应该?当然不。为了团队合作,团队必须就他们所知的语言达成一致。团队是那些要审查,帮助记录和修复代码的人,所以他们应该能够阅读它。
当其他人不理解一个团队成员生成的代码时,这是一个问题,但是用Scala编写的Java字节代码可以很容易地反编译为纯Java。
不是一种远程实用的阅读方式。由于Scala的工作方式不同,它的字节代码看起来也很奇怪。
我知道Java和Clojure以及Java和Scala之间的集成非常有效,但是像C ++这样的其他语言呢?
许多语言提供FFI(外部函数接口),这是一种用您的语言调用用其他语言编写的函数的方法。 Haskell有一个用于C代码的FFI,这意味着您可以将任何C库与Haskell代码一起使用。这取决于语言,很难给出任何一般性答案。
It is apparently possible to call C/C++ from Java,因此可以从Scala或Clojure获得它。
答案 1 :(得分:2)
Haskell有一个相当成熟的C foreign function interface。我只是用它来调用C库,但反过来也是可能的。
答案 2 :(得分:2)
与其他不懂任何功能语言的程序员合作的程序员是否可以将其与其他语言结合使用?
是。这通常通过“外部功能接口”实现。根据您的语言实施情况,可以或多或少地支持从其他语言拨打或拨打您的语言。