例如,如果我开始学习Haskell,我可以发现自己使用它.我听说这种语言的一些常见用途是功能性的吗?
这种语言有哪些常见用途?
快速应用开发.
如果你想知道"为什么是Haskell?",那么你需要考虑函数式编程语言的优点(取自http://c2.com/cgi/wiki?AdvantagesOfFunctionalProgramming):
功能性课程往往比他们的ImperativeLanguage同行简洁得多.通常这会提高程序员的工作效率
FP鼓励快速原型设计.因此,我认为它是ExtremeProgrammers最好的软件设计范例......但我知道什么?
FP在功能方面是模块化的,其中ObjectOrientedProgramming在不同组件的维度上是模块化的.
有蛋糕吃的能力.想象一下,您有一个复杂的OO系统处理消息 - 每个组件可能会根据消息进行状态更改,然后将消息转发给它已链接到的某些对象.如果调用层次结构中的某个对象确定消息存在缺陷,那么能够轻松回滚每个更改都不是太酷吗?拥有不同国家的历史怎么样?
为您做的许多内务处理任务:解构数据结构(PatternMatching),存储变量绑定(带闭包的LexicalScope),强类型(TypeInference),GarbageCollection,存储分配,是否使用盒装(指向值)或未装箱(直接值)代表......
安全的多线程!不可变数据结构不受数据争用条件的限制,因此不必受锁的保护.如果您总是分配新对象,而不是破坏性地操纵现有对象,则可以在分配和GarbageCollection系统中隐藏锁定.
除此之外,Haskell还有自己的优势,例如:
清晰,直观的语法灵感来自数学符号.
列出构建以基于现有列表创建列表.
Lambda表达式:创建函数而不给它们显式名称.所以处理大公式更容易.
Haskell完全是透明的.任何使用I/O的代码都必须标记为这样.这样,它鼓励您在没有(计算)的情况下将代码与副作用(例如,在屏幕上放置文本)分开.
懒惰评估是一个非常好的功能:
即使某些东西通常会导致错误,只要您不使用结果,它仍然会起作用.例如,您可以将其1 / 0
作为列表的第一项,如果您仅使用第二项,它仍然可以使用.
编写像这个数独求解器这样的搜索程序更容易,因为它不会立即加载每个组合 - 它只是随着它一起生成它们.您可以使用其他语言执行此操作,但只有Haskell 默认执行此操作.
您可以查看以下链接:
http://c2.com/cgi/wiki?AdvantagesOfFunctionalProgramming
http://blogs.msdn.com/wesdyer/archive/2007/01/18/why-functional-programming-is-important-in-a-mixed-environment.aspx
http://blog.kickino.org/archives/2007/05/22/T22_34_16/
http://useless-factor.blogspot.com/2007/05/advantage-of-functional-programming.html
我认为这篇文章中的人对于从未使用过函数式编程语言的人来说是最重要的一点:扩展你的思想.如果您不熟悉函数式编程,那么Haskell会让您以前所未有的方式思考.因此,您在其他领域和其他语言的编程将得到改进.多少?难以量化.
对于像Haskell这样的通用语言来说,有一个很好的答案:一般编写程序.
对于它在实践中的用途,我有三种方法来确定:
Haskell库和应用程序区域的标签云,按Hackage频率加权.
表明它适用于图形,网络,系统编程,数据结构,数据库,开发,文本处理......
它在工业中使用的领域 - 许多DSL,网络应用程序,编译器设计,网络,分析,系统编程,......
最后,我对它真正强大的看法是:
正确性问题,域特定语言以及并行和并发编程
我希望这可以让你了解你的问题有多广泛,如果要以任何特异性回答.
Haskell实际应用的一个例子是xmonad,一个"少于1200行代码的特色窗口管理器".
来自Haskell Wiki:
Haskell具有多种商业用途,从航空航天和国防到金融,再到网络初创公司,硬件设计公司和割草机制造商.该页面收集有关Haskell工业用途的资源.
根据维基百科的说法,Haskell语言的出现是因为需要将现有的功能语言合并为一个可用于未来功能语言设计研究的通用功能语言.
很明显,根据可获得的信息,它已经超出了它的原始目的,并且不仅仅用于研究.它现在被认为是一种通用的函数式编程语言.
如果你还在问自己,"我为什么要使用它?",然后阅读为什么要使用它?Haskell Wiki介绍部分.
Haskell是一种通用编程语言.它可以用于您使用任何其他语言的任何事情.除了自己的想象力,你不受任何限制.至于它适合什么?好吧,几乎所有的东西.功能语言不能胜任的任务很少.
是的,我是来自Dreamincode的Rayne.:)
我还想提一下,如果您还没有阅读维基百科页面,函数式编程就像面向对象编程这样的范例.以防你不知道.Haskell在它工作的意义上也是有用的; 它在那方面运作得很好.
仅仅因为语言不是面向对象语言并不意味着语言受到任何限制.Haskell是一种通用编程语言,与Java一样通用.
我有一个很酷的,Facebook创建了一个重写PHP代码的自动化工具.他们将源解析为抽象语法树,进行一些转换:
if ($f == false) -> if (false == $f)
我不知道为什么,但这似乎是他们特殊的风格,然后他们打印它.
https://github.com/facebook/lex-pass
我们使用haskell制作小域特定语言.大量的数据处理.Web开发.网络蜘蛛.测试应用.编写系统管理脚本.后端脚本,与其他方通信.监控脚本(我们有一个与munin很好地配合使用的DSL,可以更轻松地为您的应用程序编写正确的监控代码.)
实际上是各种各样的东西.它只是一种日常的通用语言,具有一些非常强大和有用的功能,如果你有点数学倾向.
来自Haskell:
Haskell是一种标准化的,通用的纯函数式编程语言,具有非严格的语义和强大的静态类型.它以逻辑学家Haskell Curry的名字命名.
基本上,Haskell可用于创建您通常使用其他通用语言创建的任何内容(例如C#,Java,C,C++等).
例如,用于开发交互式实时HTML5 Web应用程序.参见Elm,其编译器在Haskell中实现,其语法从Haskell中借鉴了很多.