【问题标题】:Is there a functional language for C++ ecosystem?是否有适用于 C++ 生态系统的函数式语言?
【发布时间】:2010-09-06 16:51:22
【问题描述】:

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

是否存在与 C++ 高度互操作的等效函数式语言?

【问题讨论】:

    标签: c++ functional-programming


    【解决方案1】:

    啊,还有别的。虽然这肯定不是您的意思,但 C++ 中的 template metaprogramming 是纯粹的函数式。

    【讨论】:

      【解决方案2】:

      John Skaller 的 Felix 语言旨在与 C++ 互操作并提供函数式范例。

      虽然这样做有问题。函数式语言提供了允许创建闭包的一流函数:从定义它们的环境中捕获并携带值的函数。这使得静态确定值的生命周期成为不可能(因为闭包可能会携带一个值)它的作用域),因此实际上需要垃圾收集器,但 C++ 不是垃圾收集器。

      【讨论】:

      • Felix 与 C++ 完美集成。
      【解决方案3】:

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

      考虑到所有因素,我不确定您的意思/期望。

      【讨论】:

      • 我提出这个问题的原因是寻找一种简洁易用(即人类可理解代码的最少行)的 C++ 语言。
      【解决方案4】:

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

      再说一次,那是 C,我不确定 C++ FFI 到底有多远......

      【讨论】:

        【解决方案5】:

        由于 Scala 编译成 Java 字节码,而 F# 编译成 .NET 字节码,可以在各自的虚拟机上运行。正确的比较是,如果有一些函数式语言可以编译成机器相关的代码,准备在计算机上运行,​​是的,有。

        我不认为那是你的意思,但我能提供的最好的是FC++Boost 是另一个库,它具有许多可以被识别为源自函数式编程的特性。

        但是,我敢打赌,没有“真正的”函数式编程 C++:es。

        【讨论】:

          【解决方案6】:

          “D”语言被设计为 C++ 的继承者。 Andrei Alexandrescu 正在为 D 2.0 开发 D 的纯功能子集。我猜 D 与 C++ 的互操作性很好。

          【讨论】:

          • D 实际上不适用于 C++。您几乎总是必须编写 C 包装器。
          【解决方案7】:

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

          【讨论】:

            【解决方案8】:

            这个问题发布于 2008 年。作为参考,C++11 及更高版本支持函数式编程。请参阅为此 Functional Programming in C++ 更新的另一个讨论

            【讨论】:

              【解决方案9】:

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

              Bjarne Stroustrup FAQ(c++ 的发明者)

              【讨论】:

              • 并非如此:C++ 没有具有自动环境捕获功能的一流功能。您所指的内容非常乏味,而且表现力要差得多。此外,Bjarne Stroustrup 和 Alex Stepanov 在函数式编程方面通常是完全错误的。
              • C++0x 确实具有一流的函数,以 lambdas 的形式自动捕获环境,但通常的 C++ 资源管理警告也适用(因为缺少 GC)。
              猜你喜欢
              • 1970-01-01
              • 2021-05-22
              • 1970-01-01
              • 1970-01-01
              • 2015-01-13
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2017-08-10
              相关资源
              最近更新 更多