有C ++生态系统的功能语言吗?

时间:2020-03-05 18:42:35  来源:igfitidea点击:

Java具有Scala,.NET具有F#。这两种语言都高度集成到各自的Java和.NET平台中。可以使用Scala编写类,然后使用Java进行扩展。

是否存在与C ++高度互操作的等效功能语言?

解决方案

回答

C ++没有Java或者.NET的生态系统。没有虚拟机,甚至没有运行时环境,只有一个高度专业化的标准库,该库在设计上不能在纯功能环境中很好地运行。 C ++甚至没有ABI标准。

考虑所有事情,我不确定意思/期望。

回答

由于Scala编译成Java字节码,而F编译成.NET字节码,因此可以在各自的虚拟机上运行。正确的比较是,是否有某种功能语言可以编译为与机器相关的代码,可以在计算机上运行,​​并且可以。

我认为这不是意思,但是我所能提供的最好的是FC ++。 Boost是另一个具有很多功能的库,这些功能可以识别为从函数式编程派生而来。

但是,我敢打赌,那里没有"真正的"函数式编程C ++。

回答

啊,还有别的。尽管这当然不是意思,但是C ++中的模板元编程纯粹是功能。

回答

如前所述,我不太确定C ++的"生态系统"。但是Haskell确实有一个外部函数接口,该接口允许我们从Haskell调用C函数和从C调用Haskell函数。

再说一遍,那就是C,我不太确定C ++ FFI有多远...

回答

C ++可能不是纯函数式语言,但是STL的某些部分肯定是函数式的。

请参阅Bjarne Stroustrup常见问题解答(C ++的发明者)

回答

" D"语言被设计为C ++的后继者。 Andrei Alexandrescu正在为D 2.0开发D的纯功能子集。我猜想D与C ++可以很好地互操作。

回答

我同意我不确定C ++的生态系统。 OCaml在.NET外部进行函数式编程非常受欢迎。 Fis也基于此。

回答

John Skaller编写的Felix语言旨在与C ++互操作并提供功能范例。

但是这样做有问题。函数式语言提供了允许创建闭包的一流函数:从定义的环境中捕获并携带值的函数。这使得无法静态确定值的生存期(因为闭包可能会将值带出一个值)。它的范围),因此有效地需要一个垃圾收集器,但C ++不会被垃圾收集。