Haskell在现实世界中有什么用途?

有很多关于Haskell的宣传,然而,很难获得关于它如何在现实应用程序中使用的信息。Haskell最流行的项目/用法是什么?为什么它能出色地解决这些问题?

227971 次浏览

从# EYZ0:

Haskell是一个标准化、通用的纯功能性产品 编程语言,用 语义不严格,静态强 打字。它以逻辑学家的名字命名 Haskell Curry . < / p >

基本上,Haskell可以用来创建几乎任何你通常使用其他通用语言(例如c#, Java, C, c++等)创建的东西。

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

开源Haskell发布和增长

它的一些常见用途是什么 语言吗?< / p >

快速应用程序开发。

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

    函数式程序往往比命令式语言简洁得多。这通常会导致增强 李程序员的工作效率< / p > < / >
  • FP鼓励快速创建原型。因此,我认为这是ExtremeProgrammers最好的软件设计范例……但我知道什么?

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

  • 鱼与熊掌兼得的能力。假设您有一个处理消息的复杂OO系统——每个组件都可能生成状态 根据消息的变化,然后将消息转发给一些人 它链接到的对象。如果能做到这一点岂不是太酷了 如果某个对象在调用的深处,则很容易回滚每个更改 高层认为信息有缺陷?有历史吗 不同的国家吗?李< / p > < / >

  • 许多内务工作为您做:解构数据结构(PatternMatching),存储变量绑定(LexicalScope with 闭包),强类型(TypeInference), GarbageCollection,存储 分配,是否使用盒装(指向值)或未盒装(值 直接表示…< / p > < /李> <李> < p >多线程安全!不可变数据结构不受数据竞争条件的影响,因此不需要通过 锁。如果你总是分配新对象,而不是 破坏性地操作现有的,锁定可以隐藏在 分配和垃圾收集系统。

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

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

从# EYZ0:

Haskell的用途非常广泛 商业上,从航空航天和 国防,金融,网络创业, 硬件设计公司和割草机 制造商。本页收集 资源在工业上的利用 Haskell . < / p >

根据维基百科的说法,Haskell语言的创建是为了将现有的函数式语言整合为一种通用的语言,以供将来在函数式语言设计方面的研究使用。

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

如果你还在问自己,“为什么我要使用它?”,那么请阅读Haskell Wiki介绍中的为什么使用它?< / em >部分。

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

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

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

  • 工业领域 -很多dsl, web应用程序,编译器设计,网络,分析,系统编程,…

最后,我认为它真正的强项是:

我希望这能让你知道你的问题有多宽泛,如果要具体回答的话。

Haskell是一种通用编程语言。它可以用于任何你使用其他语言做的事情。除了你自己的想象力,你不受任何东西的限制。至于它适合做什么呢?嗯,几乎所有的事情。几乎没有什么任务是函数式语言不擅长的。

没错,我是Dreamincode的Rayne。:)

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

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

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

我有一个很酷的,facebook创建了一个自动重写PHP代码的工具。他们把源代码解析成一个抽象的语法树,做一些转换:

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

我不知道为什么,但这似乎是他们的特殊风格,然后他们漂亮地印刷它。

https://github.com/facebook/lex-pass < a href = " https://github.com/facebook/lex-pass " > < / >

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

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

例如,用于开发交互式、实时的HTML5 web应用程序。请参阅榆树,它的编译器是用Haskell实现的,其语法大量借鉴了Haskell的语法。