gpt4 book ai didi

programming-languages - 寻找函数式语言

转载 作者:行者123 更新时间:2023-12-03 14:30:40 24 4
gpt4 key购买 nike

就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the help center为指导。




9年前关闭。




我是一名主要使用 C++ 的科学家,但我想找到一种更好的语言。我正在寻找建议,我什至不确定我的“梦想语言”是否存在(还),但这是我的愿望 list ;

重要功能(按重要性排序)

1.1:性能:对于科学来说,性能非常重要。我完全理解生产力的重要性,不仅是执行速度,而且当您的程序必须运行数小时时,您无法用 Python 或 Ruby 编写它。它不需要像 C++ 一样快,但它必须相当接近(例如:Fortran、Java、C#、OCaml...)。

1.2:高级优雅:我希望能够尽可能地专注于科学并获得清晰的代码。我也不喜欢像 Java 这样冗长的语言。

1.3:主要是函数式:我喜欢函数式编程,我认为它非常适合我的风格和科学编程。我不在乎该语言是否支持命令式编程,它可能是一个加分项,但它必须关注并鼓励函数式编程。

1.4:可移植性:应该在 Linux(尤其是 Linux!)、Mac 和 Windows 上运行良好。不,我不认为 F# 在带有单声道的 Linux 上运行良好,而且我不确定 OCaml 在 Windows 上运行良好;)

1.5:面向对象,最好在“一切都是对象”的理念下:不久前,当我不得不处理纯C时,我意识到我是多么喜欢面向对象编程。我喜欢对面向对象编程有强烈 promise 的语言,而不仅仅是胆小的支持。

不是很重要,但事情会很好

2.1:“不太强”的类型:我发现 Haskell 的强类型系统很烦人,我喜欢能够进行一些隐式转换。

2.2:工具:好的工具总是加分项,但我想这真的取决于语言。我使用轻量级编辑器 Geany 与 Haskell 一起玩,我从未感到有障碍。另一方面,我不会用 Java 甚至 Scala 做同样的事情(尤其是 Scala,似乎缺乏好的工具,这真的很遗憾)。 Java 确实是这里的第一语言,有了 NetBeans 和 Javadoc,使用 Java 编程既简单又有趣。

2.3:垃圾收集,但在没有虚拟机的情况下翻译或编译。我对虚拟机没有任何异议,但是领域内的两大巨头都有他们的问题。从理论上讲,.net 框架似乎要好得多,特别适合函数式编程,但实际上它仍然以 Windows 为中心,并且对 Linux/MacOS 的支持很糟糕,没有应有的那么好,所以它真的不值得考虑。 Java 现在是一个成熟的 VM,但它在某些方面让我很恼火:我不喜欢它处理可执行文件、泛型的方式,并且它编写了糟糕的 GUI(尽管这些东西还不错)。

最佳答案

在我看来,有三个可行的候选者:Haskell、Standard ML、OCaml。 (Scala 被淘汰的理由是它可以编译为 JVM 代码,因此当程序必须运行数天时它不太可能足够快。)
所有这些都主要是功能性的。我会在我有知识的地方发表评论。

高性能

  • OCaml 在所有情况下都能提供最稳定的性能,但性能很难提升。你得到的就是你得到的:-)
  • Haskell 有 最佳并行性能 并且可以很好地利用 8 核或 16 核机器。如果你的 future 是并行的,我敦促你克服对类型系统的厌恶,并学习有效地使用 Haskell,包括 Data Parallel Haskell 扩展。

    Haskell 性能的缺点是很难预测评估惰性函数式程序所需的空间和时间。有出色的分析工具,但可能仍需要付出大量努力。
  • 带有 MLton 的标准 ML编译器提供了出色的性能。 MLton 是一个完整的程序编译器,并且做得非常好。

  • 高贵典雅
  • 从语法上来说,Haskell 是明显的赢家。然而,类型系统中充斥着最近实验的残余。然而,类型系统的核心是高级和优雅的。 “类型类”机制特别强大。
  • 标准 ML 有丑陋的语法,但非常干净的类型系统和语义。
  • 从语法和类型系统的角度来看,OCaml 是最不优雅的。过去实验的遗迹比 Haskell 更引人注目。此外,标准库并不像您期望的那样支持函数式编程。

  • 主要功能

    Haskell 是纯函数式的;标准机器学习非常实用; OCaml 主要是函数式的(但要注意可变字符串和库中一些令人惊讶的遗漏;例如,列表函数对于长列表是不安全的)。

    可移植性

    这三个都在 Linux 上工作得很好。 Haskell 开发人员使用 Windows 并且它得到了很好的支持(尽管这让他们很痛苦)。我知道 OCaml 在 OSX 上运行良好,因为我使用了一个用 OCaml 编写的已移植到 OSX 的应用程序。但我在这里的信息很差。

    面向对象

    在 Haskell 或 SML 中找不到。 OCaml 有一个嫁接在核心语言上的沼泽标准 OO 系统,与其他语言没有很好地集成。

    你没有说你为什么热衷于面向对象。 ML 仿函数和 Haskell 类型类提供了 C++ 中的一些封装和多态性(又名“泛型编程”)。

    可以颠覆的类型系统

    所有三种语言都提供不安全的强制转换。在所有三种情况下,它们都是获取核心转储的好方法。

    I like to be able to do some implicit casting.



    我想你会发现你喜欢 Haskell 的类型类系统——你可以获得一些类似于隐式转换的效果,但安全。特别是,数字和字符串文字可以隐式转换为您喜欢的任何类型。

    工具

    Haskell 有非常好的分析工具。标准机器学习有蹩脚的工具。 OCaml 基本上具有标准的 Unix 分析和一个无法使用的调试器。 (调试器拒绝跨越抽象障碍,它不适用于 native 代码。)

    我的信息可能已经过时;工具图片一直在变化。

    垃圾收集并编译为 native 代码

    查看。没有什么可以选择的。

    推荐

    克服对安全、可靠的类型系统的厌恶。研究 Haskell 的类型类(Wadler 和 Blott 的原始论文和 Mark Jones 的教程可能很有启发性)。 深入了解 Haskell ,请务必在 Hackage 了解相关软件的庞大集合。 .

    关于programming-languages - 寻找函数式语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1148631/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com