函数式语言本质上很难与非函数式语言建立接口吗
Is it true that functional languages are intrinsically hard to make interface with non functional languages
有人告诉我是这种情况,但一直不太明白为什么也不相信。检查 https://en.wikipedia.org/wiki/Foreign_function_interface 似乎是这样。这是真的?如果是,为什么?
没有。函数式编程语言只是一种鼓励将函数本身视为值的语言。这与它是否与其他语言很好地集成是正交的。实际上,Clojure、Scala 和 F# 旨在分别与 Java、Java(再次)和 C# 进行互操作。
可能需要一些工作才能使 API 适应目标语言的习语。但这个问题并不是函数式语言独有的——大多数 C 接口在 Python 中看起来也不会像现在这样好!这项工作是可选的:Haskell network
包只是 Berkeley 套接字的薄包装,但人们非常乐意使用它。
I think 100% pure functional language can by its definition not interface at all with the outside world
这是一个常见的误解。
纯函数式语言不会禁止副作用;它 注释 它们——无论是通过 IO
单子 (Haskell)、线性类型 (Mercury) 还是代数效应 (Idris)。在这样的语言中,调用外部函数与任何其他 I/O 操作没有什么不同。
此外,如果程序员知道外部函数是纯函数(例如 LAPACK 例程),那么他们可以否决编译器并将其声明为纯函数。在 Haskell 中,这可以通过从函数签名中省略 IO
来完成。
有人告诉我是这种情况,但一直不太明白为什么也不相信。检查 https://en.wikipedia.org/wiki/Foreign_function_interface 似乎是这样。这是真的?如果是,为什么?
没有。函数式编程语言只是一种鼓励将函数本身视为值的语言。这与它是否与其他语言很好地集成是正交的。实际上,Clojure、Scala 和 F# 旨在分别与 Java、Java(再次)和 C# 进行互操作。
可能需要一些工作才能使 API 适应目标语言的习语。但这个问题并不是函数式语言独有的——大多数 C 接口在 Python 中看起来也不会像现在这样好!这项工作是可选的:Haskell network
包只是 Berkeley 套接字的薄包装,但人们非常乐意使用它。
I think 100% pure functional language can by its definition not interface at all with the outside world
这是一个常见的误解。
纯函数式语言不会禁止副作用;它 注释 它们——无论是通过 IO
单子 (Haskell)、线性类型 (Mercury) 还是代数效应 (Idris)。在这样的语言中,调用外部函数与任何其他 I/O 操作没有什么不同。
此外,如果程序员知道外部函数是纯函数(例如 LAPACK 例程),那么他们可以否决编译器并将其声明为纯函数。在 Haskell 中,这可以通过从函数签名中省略 IO
来完成。