【问题标题】:What is Haskell used for in the real world? [closed]Haskell 在现实世界中的用途是什么? [关闭]
【发布时间】:2010-12-08 22:53:57
【问题描述】:

围绕 Haskell 有很多炒作,但是,很难获得有关它如何在实际应用程序中使用的信息。 Haskell 最受欢迎的项目/用途是什么?为什么它擅长解决这些问题?

【问题讨论】:

  • 不,我不会,因为这是一个明确的答案。意见等没有回旋余地。我只是想知道语言是为了什么而创建的。
  • @Papuccino1,等等,你想知道它有用的用途,还是创建的用途?前者是问题所在,那里有很大的意见空间......
  • @Papuccino1 - 你标题中多余的词对这个问题有什么好处?另外,我认为您在这种情况下误解了“功能”一词的使用,但很难说清楚。
  • 根据他们自己的网站,许多公司将其用于不同的目的...haskell.org/haskellwiki/Haskell_in_industry

标签: haskell functional-programming programming-languages


【解决方案1】:

这有什么常见的用途 语言?

快速的应用程序开发。

如果您想知道“为什么选择 Haskell?”,那么您需要考虑函数式编程语言的优势(取自 https://c2.com/cgi/wiki?AdvantagesOfFunctionalProgramming):

  • 函数式程序往往比其 ImperativeLanguage 对应程序更简洁。这通常会导致增强 程序员生产力

  • FP 鼓励快速原型设计。因此,我认为它是 ExtremeProgrammers 的最佳软件设计范例……但我知道什么?

  • FP 在功能维度上是模块化的,而 ObjectOrientedProgramming 在不同维度上是模块化的 组件。

  • 拥有你的蛋糕并吃掉它的能力。想象一下,您有一个复杂的 OO 系统来处理消息——每个组件都可能创建状态 根据消息更改,然后将消息转发给某些人 它有链接的对象。能不能太酷了 如果调用中的某些对象很容易回滚每个更改 层次结构决定消息有缺陷?有历史怎么办 不同的州?

  • 为您完成了许多内务处理任务:解构数据结构(PatternMatching)、存储变量绑定(LexicalScope 和 闭包)、强类型(TypeInference)、GarbageCollection、存储 分配,是使用装箱的(指向值的指针)还是未装箱的(值 直接)表示...

  • 安全的多线程!不可变数据结构不受数据竞争条件的影响,因此不必受保护 锁。如果你总是分配新的对象,而不是 破坏性地操纵现有的,锁定可以隐藏在 分配和垃圾收集系统。

除此之外Haskell还有自己的优势如:

  • 受数学符号启发的清晰、直观的语法。
  • 基于现有列表创建列表的列表推导。
  • Lambda 表达式:创建函数而不给它们明确的名称。因此更容易处理大公式。
  • Haskell 完全是referentially transparent。任何使用 I/O 的代码都必须这样标记。这样,它鼓励您将具有副作用(例如,将文本放在屏幕上)的代码与没有(计算)的代码分开。
  • 惰性求值是一个非常好的功能:
    • 即使某些事情通常会导致错误,只要您不使用结果,它仍然可以工作。例如,您可以将1 / 0 作为列表的第一项,如果您只使用第二项,它仍然有效。
    • 编写诸如sudoku solver 之类的搜索程序会更容易,因为它不会一次加载所有组合——它只是在执行过程中生成它们。您可以使用其他语言执行此操作,但只有 Haskell 会这样做默认情况下

您可以查看以下链接:

【讨论】:

  • 我经常想到以下想法:在纯语言中,一个函数在传递相同的参数时总是返回相同的结果。这是一个保证。相比之下,命令式语言将所有内容构建在“语句”之上。语句没有任何形式的保证(除了它的执行会消耗时间并产生热量)。因此,基础已经摇摇欲坠,而建立在它之上的一切都将继续摇摇欲坠。对我来说,这是学习 haskell 的原因之一。
  • 自问这个问题到 Go 编程语言问世已经 6 年了。尽管具有较弱的类型系统并且通常“客观上处于劣势”(根据功能/ ML 粉丝),但它在这 6 年中成功地交付了比 Haskell 在其 26 年中更多(和更重要)的软件。我的意思是作为一个案例研究;很明显,有一些事情阻碍了函数式语言,它们不能全部归咎于炒作。
  • 你忘了一点 - 在 haskell 中编码绝对是一场爆炸;)我在尝试解决 haskell 中的一些问题时玩得很开心。
  • @MartinDrautzburg 当然,声明带有保证。什么样的有用语言会有没有保证的陈述?例如在 C 中,x = 5; 保证在它执行之后,x 包含值 5
  • @E4z9 是的,但在 C++ 中,它保证调用 operator =。它保证如果你不定义 operator = 会发生什么
【解决方案2】:

对于像 Haskell 这样的通用语言有什么好处,有一个很好的答案:编写一般程序。

对于它在实践中的用途,我有三种方法来确定它:

表示它适用于图形、网络、系统编程、数据结构、数据库、开发、文本处理......

最后,我对它真正的强项的看法:

如果要以任何具体的方式回答,我希望这能让您了解您的问题有多广泛。

【讨论】:

  • 标签云坏了
  • 标签云是使用wordcloud生成的吗?
【解决方案3】:

例如,用于开发交互式、实时 HTML5 Web 应用程序。见Elm,它的编译器是用Haskell实现的,语法借鉴了很多Haskell的。

【讨论】:

    【解决方案4】:

    Haskell 的一个示例是 xmonad,这是一个“不到 1200 行代码的功能强大的窗口管理器”。

    【讨论】:

      【解决方案5】:

      这是一个很好的关于 Haskell 及其用途的信息来源:

      Open Source Haskell Releases and Growth

      【讨论】:

      • 仅链接的答案并不理想。也就是说,由于此问题已关闭,因此编辑可能比删除更好。
      • 好像这个资源自 2009 年以来就没有更新过。
      【解决方案6】:

      我有一个很酷的,facebook 创建了一个用于重写 PHP 代码的自动化工具。他们将源代码解析为抽象语法树,进行一些转换:

      if ($f == false) -> if (false == $f)
      

      我不知道为什么,但这似乎是他们特有的风格,然后他们把它印出来了。

      https://github.com/facebook/lex-pass

      我们使用 haskell 来制作小型领域特定语言。海量数据处理。 Web开发。网络蜘蛛。测试应用程序。编写系统管理脚本。与其他方通信的后端脚本。监控脚本(我们有一个与 munin 很好地协同工作的 DSL,可以更轻松地为您的应用程序编写正确的监控代码。)

      实际上所有类型的东西。它只是一种日常通用语言,具有一些非常强大和有用的特性,如果你有点数学倾向的话。

      【讨论】:

      • Re: FB 风格,将 false 放在 == 之前意味着如果你忘记并且只写一个 = 则结果行为将更明显是错误的,而不是默默地执行意外的赋值操作并继续通常
      • 一个聪明的,你的力量,特别是错误要知道编译时间。
      • @EdgarKlerks,PHP 没有编译时间。这会强制在错误所在的地方引发异常,而不是在遥远的代码中导致奇怪的行为或错误。
      • 虽然我看到在左边写 false 的好处,但我看不出使用工具自动完成它的意义:如果你已经有一个 == 运算符,那么你已经知道你没有 lex-pass 的那部分要捕获的错误,如果你有一个 = 反而没有确定的方法来判断它是否是故意的。
      • @JeremyList 也许他们对编码风格非常严格。我可以看到格式整齐的代码邀请编写格式更整齐的代码。只是一个疯狂的猜测。
      【解决方案7】:

      我认为这篇文章中的人们错过了对于从未使用过函数式编程语言的人来说最重要的一点:扩展你的思维。如果你是函数式编程的新手,那么 Haskell 会让你以前所未有的方式思考。结果,您在其他领域和其他语言中的编程将得到改善。多少钱?难以量化。

      【讨论】:

      • 我使用的是 iPhone、Mac。 Haskell 用在什么地方?我的意思是对于我使用的应用程序,它们是用 Objective-C 或 Swift + 为数据库和服务器编写的。 Swift 也可以是函数式的。所以我再次对它的使用地点感到困惑
      • Facebook 使用它进行垃圾邮件检测:code.facebook.com/posts/745068642270222/…
      • 这个答案用不同的语气写成,说 Haskell 对程序员来说是一个很好的练习,而 IMO 并不能成为一种很好的通用语言
      • 在 Keera Studios,我们使用 Haskell 编写 iOS 和 Android 游戏和应用程序。
      • 我完全同意这一点。几十年来,我用命令式语言编写了很多代码。几个月来我一直在探索 Haskell,它让我对以前从未想过的事情敞开心扉。
      【解决方案8】:

      Haskell 是一种通用编程语言。它可以用于您使用任何其他语言做的任何事情。除了你自己的想象力之外,你不受任何限制。至于它适合什么?嗯,几乎所有的东西。函数式语言在少数任务中表现出色。

      是的,我是 Dreamincode 的 Rayne。 :)

      我还想提一下,如果您还没有阅读 Wikipedia 页面,函数式编程是一种范式,就像面向对象编程是一种范式一样。以防万一你不知道。 Haskell 在它工作的意义上也是功能性的。它在这方面工作得很好。

      仅仅因为一种语言不是面向对象的语言并不意味着该语言受到任何限制。 Haskell 是一种通用编程语言,与 Java 一样通用。

      【讨论】:

        【解决方案9】:

        来自the Haskell Wiki

        Haskell 有多种用途 商业,从航空航天和 国防、金融、网络创业公司, 硬件设计公司和割草机 制造商。本页收集 工业利用资源 哈斯克尔。

        根据维基百科,Haskell 语言的创建是为了将现有的函数式语言整合为一种通用的语言,以用于未来的函数式语言设计研究。

        根据现有信息,很明显它已经超出了最初的用途,并且不仅仅用于研究。它现在被认为是一种通用的函数式编程语言。

        如果您仍然在问自己“我为什么要使用它?”,请阅读 Haskell Wiki 简介的 Why use it? 部分。

        【讨论】:

          【解决方案10】:

          来自Haskell

          Haskell 是一个标准化、通用的纯函数式 编程语言,与 非严格语义和强静态 打字。它以逻辑学家的名字命名 哈斯克尔咖喱。

          基本上,Haskell 可用于创建您通常使用其他通用语言(例如 C#、Java、C、C++ 等)创建的几乎所有内容。

          【讨论】:

            猜你喜欢
            • 2010-11-04
            • 2010-11-09
            • 1970-01-01
            • 2010-09-15
            • 2013-09-16
            • 1970-01-01
            • 2012-01-31
            • 1970-01-01
            • 2010-10-21
            相关资源
            最近更新 更多