功能性编程语言(Erlang,F#,Haskell,Scala)

27
  1. 函数式语言适合Web应用程序开发吗?
  2. 函数式语言适合商业/ERP/CRM类型的应用程序吗?

5
请查看:《函数式编程的商业应用》-- http://cufp.galois.com - nlucaroni
5
这应该是社区维基。 - Onorio Catenacci
10个回答

30

像您所描述的这种功能性编程语言是通用编程语言,可用于各种事情,包括 Web 应用程序和商业应用程序。(我使用Haskell)。

正如 gabor 所示,归根结底取决于库。Scala 有一个 Web 框架:lift。Haskell 有happstack,以及 2010 2012 年发布在Hackage上的 21004400 种用于各种事情的库。

因此,在考虑特定的专业领域时,问题并不是语言,而是工具链。


17

函数式编程语言适用于任何你想要使用它们的领域。

然而,如今开发应用程序并不像使用一种编程语言那么简单。Java、C#等语言的优势在于它们带有大量库和其他环境便利,这些在构建商业软件时绝对是必需的。大多数函数式编程语言目前还没有很好的支持(至少目前为止是这样的)。

F#可能很有前途,因为它在.NET环境中,并且可以利用那里可用的工具(如果我说错了,请纠正我)。

这篇文章描述了Lisp,一种早期的函数式编程语言,如何成功地创建了一个基于Web的应用程序。


5
F#确实可以通过无缝互操作使用所有.NET库。然而,我在工业界使用过OCaml和F#,不得不说OCaml的库比.NET更加优秀。 F#的优势不在于您可以访问出色的库(您并没有),而是您可以销售出色的库。 - J D
你能否提供一个比它的.Net等效库更优秀的例子,@JD?您认为这个问题今天是否仍然适用? - julealgon

11

函数式编程语言非常适合Web应用程序开发,尤其是Scala。

更多信息请查看Lift框架。


1
请看另一个精彩的Scala Web框架,play-framework http://play-framework.org - Jay Taylor

9
为了回答关于商业/ERP/CRM应用的第二个问题:我个人认为,像Haskell这样的“纯”函数式语言或Clojure这样的动态函数式语言不适合实现这些应用。另一方面,我目前正在使用Scala实现ERP,它当然是混合OOP/FP和静态编译的。
我之所以这么说,是因为像ERP这样的商业应用基本上是面向记录的:有一个数据模式表达不同的记录类型,应用程序逻辑则几乎完全围绕着这些记录进行CRUD操作并将自定义业务工作流应用于它们。而从根本上讲,我认为这些数据中心的业务应用并不非常适合函数式模型。
人们可以谈论OOP-关系不匹配,但最终OOP和数据库都是面向记录的:具有良好ORM的OOP语言可以让您将不同的数据模型映射到代码中,然后附加处理每个模型的代码。而且,这种静态类型(理想情况下使用像Scala的squeryl这样的强类型ORM)大大降低了运行时错误或例如未正确应用代码的数据模型更改的风险。
别误会我的意思——我很喜欢FP(我越来越多地在Haskell中进行系统编程),但对我来说,OOP的面向记录方法比FP的面向函数方法更适合处理商业ERP或类似应用的数据对象。 (Scala是一个很好的例外,因为您可以使用OOP范例与质量ORM进行记录操作,但也可以在一般的应用程序编程中使用FP好处。)

8

耶!芝加哥老板、Zotonic等,人们需要学更多的Erlang以实现伟大的目标。 - Muzaaya Joshua

4

Yaws是Erlang的一个出色的Web服务器。


3
虽然我不会说任何特定的函数语言都是为做Web开发量身定制的,但我也不会说你不能用函数语言做Web开发。我认为这完全取决于你选择的语言是否有可用的Web框架以及是否有任何支持该语言的Web服务器。
例如,我相信你可以使用F#和ASP.Net在IIS上进行Web开发。我怀疑模板引擎中没有对F#的支持,但你绝对可以用F#编写业务逻辑。
同样地,Apache有一个叫做"mod_haskell"的模块,应该可以让Haskell有动态输出。虽然我从未亲自使用过它。同时,如果Apache有一个适用于Erlang或Scala的"mod_",那么这些语言也将变得容易。
最终,我认为函数语言无状态的本质应该很适合无状态的MVC风格的Web框架。然而,我认为真正重要的是什么工具和框架可用来让你在使用这些语言时更轻松。例如,Ruby直到Rails流行起来才成为Web开发的主流语言,我在找到Django之前并不喜欢用Python做任何与Web相关的事情。

2
看起来Erlang更常被托管在原生的Erlang服务器上,比如YAWS(http://yaws.hyber.org/)。 - Chuck
1
一个Scala的Web应用程序将会托管在像Tomcat这样的Servlet容器中。 - Blake Pettersson
3
F# 在 ASP.NET 页面 (aspx) 中的使用是完全正常的。我们正在使用 ASP.NET MVC,没有任何地方用到 C#。 - MichaelGG
@MichaelGG 太棒了!我希望我能说服别人让我试试,同时还能得到报酬。不幸的是,这里没有其他人玩过 F#。因此,只有我能够维护它。我想这算是工作保障吧。 - dustyburwell
1
我不会说任何特定的函数式语言都是为了进行Web开发而量身定制的。JavaScript? :-) - J D
显示剩余2条评论

3

函数式语言提供了新的抽象方式,可用于Web开发。基于Continuation的Web服务器是函数式语言中流行的一种选择。例如,PLT Scheme Web服务器支持此类Web应用程序开发。您可以在维基百科上了解有关continuations及其在Web开发中的使用的更多信息。


3

大多数函数式语言,包括你提到的这些,被认为是通用编程语言。在Web开发方面,我强烈建议使用Clojure或Scala。它们都有非常好的Web框架,并且都可以在JVM上运行。我完全推荐Clojure和Scala,但不太推荐其他语言。

Haskell也有一个Web框架,但我从未使用过。

商业应用?当然可以。函数式语言几乎适用于任何领域。


-2
函数式语言的支持者声称,它们最大的优势之一是可以更容易地编写可以并行执行的程序。但是,Web应用程序通常不会遇到并行性问题。通常,Web服务器/应用服务器维护一个线程池,每个用户请求分配给不同的线程,可以在不同的物理处理器上运行。因此,您可以轻松利用多个处理器。关键在于,Web应用程序以大量小请求为特征,并且线程和命令式语言在这方面表现良好。当您有少量计算密集型请求时,命令式语言开始崩溃。
函数式语言的另一个重要优点是,由于函数没有副作用,因此测试更容易。您可以在几个输入中隔离地测试每个函数,然后您就知道系统将正常工作。但是,有一个问题。如果您的操作涉及输入或输出,则使用单子而不是函数,您将失去该代码部分的可测试性优势。
但是,通常Web应用程序涉及从请求中读取信息,向数据库发出请求,读取数据库的响应并格式化响应。这是大量的IO或单子,而函数的机会很少。
鉴于这些Web应用程序的特征,函数式语言对Web应用程序编程带来了哪些好处?

11
它们带来了它们通常所带来的好处:代码更易读,错误更少,并且编写速度更快。 - MichaelGG
3
我同意Clint的观点,我认为大多数开发人员更容易阅读面向对象的代码。 - Michael Ellick Ang
7
如果你不懂一种语言,那么你可能无法阅读它。例如,如果你了解Clojure,那么阅读Clojure代码就很容易。如果你了解Java,阅读Java代码相对容易。如果你了解Java,阅读SmallTalk就不会很容易,你的观点是无效的。 - Rayne
3
“更快地编写” - 别误会,我很喜欢函数式编程,但是以函数式思维来思考会更慢。 - igorgue
1
我认为目前工业界绝大多数开发人员会持不同意见。看看.NET世界中Lambda的普及就是一个明显的反例。 - J D
显示剩余11条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接