函数式语言(Erlang、F#、Haskell、Scala)
-
03-07-2019 - |
其他提示
功能语言适用于您想要使用它们的任何内容。
然而,如今开发应用程序并不像使用编程语言那么简单。 Java,C#等的优势在于它们带有大型库和其他环境细节,这些都是构建业务软件时绝对需要的。大多数函数式语言都没有那么大的支持(到目前为止?)。
F#可能很有前途,因为它在.NET环境中并且可以利用那里可用的工具(如果我错了,请纠正我)。
此文章介绍了如何使用早期函数式语言Lisp创建基于Web的语言申请成功。
功能语言非常适合Web应用程序开发,特别是Scala。
有关详细信息,请查看电梯框架。
2)功能语言是否适合商业/ ERP / CRM类型的应用程序?
要解决关于商业/ ERP / CRM应用程序的第二点:我个人不会在“纯粹”的情况下实现这些。像Haskell这样的函数式语言,或像Clojure这样的动态函数式语言。另一方面,我 am 目前正在Scala中实施ERP,当然这是混合OOP / FP和静态编译。
我之所以这么说是因为像ERP这样的商业应用程序基本上是面向记录的:有一个表达不同记录类型的数据模式,然后应用程序逻辑几乎完全围绕CRUD这些记录并应用自定义业务工作流程给他们。从根本上说,我不相信这些以数据为中心的商业应用程序非常适合功能模型。
人们可以谈论他们喜欢的OOP关系不匹配,但最终OOP和数据库都是面向记录的:带有良好ORM的OOP语言允许您将这些不同的数据模型映射到您的代码中,然后附加代码来处理每个型号。并且具有静态类型(理想地具有类似Scala的squeryl的强类型ORM)大大减少了运行时错误的可能性,例如,对通过代码未正确应用的其中一个数据模型的更改。
不要误会我的意思 - 我是FP的忠实粉丝(我在Haskell中做了越来越多的系统编程),但对我来说,面向记录的OOP方法比函数更有意义FP的方法,用于处理业务ERP或类似的数据对象。 (Scala是一个很好的例外规则,因为你可以使用OOP范例和质量ORM进行记录操作,还可以使用FP优于你的常规应用程序编程。)
- 是的,氮是功能性网络框架的一个很好的例子。它也可以扩展。 醇>
Yaws 是Erlang的精彩网络服务器。
虽然我不会说任何特定的功能语言是为网络开发量身定制的,但我也不会说你不能用功能语言进行网页开发。我认为这完全取决于您选择的语言可以使用哪些Web框架,以及是否有任何支持该语言的Web服务器。
例如,我确信您可以在IIS上使用F#和ASP.Net进行Web开发。我怀疑在模板引擎中是否支持F#,但你绝对可以在F#中编写业务逻辑。
类似地,Apache的 mod_haskell
,这使得使用haskell进行动态输出相对容易。虽然,我从未亲自使用它。同时,如果Apache有 mod_(erlang或scala)
,那么这些语言同样容易。
最终,我认为函数式语言的无状态特性应该使它非常适合无状态的MVC风格的Web框架。但是,我认为这实际上取决于哪些工具和框架可以使您在使用这些语言时更轻松。例如,在rails变得流行之前,Ruby并不是很受Web开发的欢迎,在发现django之前,我并不喜欢用Python做任何webby。
功能语言提供了可用于Web开发的新型抽象。基于连续的web服务器例如在功能语言中很流行。 PLT Scheme Web服务器支持这种Web应用程序开发。您可以在维基百科上阅读有关延续及其在网页开发中的使用的更多信息
大多数函数式语言,即您包含的语言,都被认为是通用语言。对于Web开发,我会深深考虑使用Clojure或Scala。它们都有非常好的Web框架,它们都运行在JVM上。我完全可以推荐Clojure和Scala,但不能推荐其他人。
Haskell有一个Web框架,但我从未使用它。
商业应用?当然,为什么不呢。功能语言几乎适合任何事情。
函数式语言的支持者声称的最大优势之一是它们可以更容易地编写可以并行执行的程序。但是Web应用程序通常没有并行性问题。通常,Web服务器/应用程序服务器维护一个线程池,并且每个用户请求被分配给不同的线程,该线程可以在不同的物理处理器上运行。因此,您可以毫不费力地利用多个处理器。诀窍在于,Web应用程序的特点是大量的小请求,而线程和命令式语言在那里运行良好。命令式语言开始崩溃的地方是你有少量计算成本高昂的请求。
函数式语言的另一大优势是,由于函数没有副作用,因此测试更容易。您可以在几个输入中单独测试每个函数,并且您知道系统可以正常工作。但是,有一个问题。如果您的操作涉及输入或输出,则使用monad而不是函数,并且您的代码部分将失去此可测试性优势。
但是,通常Web应用程序涉及从请求中读取信息,向数据库发出请求,从数据库读取响应以及格式化响应。这是很多很多的IO,或monad,而且功能很少。
鉴于Web应用程序的这些特性,函数式语言为Web应用程序编程带来了哪些好处?