函数式编程与Web开发相关吗?[关闭]


88

我最近在函数式编程方面见过很多,Clojure看起来特别有趣。尽管我“理解”了它的基本描述,但我完全不知道自己将如何作为Web开发人员每天使用。我读过的很多书都集中在函数式编程的数学方面,而不是常规OO中常见的编程情况。

我的手杖弄错了吗?函数式编程是否与Web开发完全无关?如果没有,是否有“将其用于网络”的示例?

Answers:


31

举几个例子:

  • 雅虎!商店由Lisp(最初在收购前命名为Viaweb)提供动力
  • Reddit在Lisp中完全原型化,尽管他们在2005年改用Python
  • 黑客新闻完全用Arc(一种Lisp方言)撰写

7
雅虎!几年前,商店用C ++进行了重写。
助攻

5
语言!=编程范例。
phkahler 2010年

58
奇怪的例子... Yahoo! Store由Lisp的拥护者Paul Graham撰写。他还写了Hacker News,这实际上是Reddit的克隆。据推测,HN是为响应Reddit从Lisp转换为Python而编写的,而Reddit的人是YCombinator的一部分:这是由Paul Graham运行的加速器程序。我认为这是一个例子,而不是三个。
布兰登·布鲁姆

@ShermPendley服务器配置,网络设置和数​​据库访问也是性能的主要因素。Web应用程序的脚本执行时间通常只占总成本的一小部分。
AgmLauncher 2015年

62

函数式编程非常适合Web应用程序。该Web应用程序接收HTTP请求并产生HTML结果。这可以被认为是从请求到页面的功能。

与台式机应用程序相比,台式机应用程序通常需要长时间运行,有状态的UI和多个方向的数据流。这更适用于OO,它关注具有状态和消息传递的对象。


20

我不明白为什么不这样做-只要您向浏览器提供符合标准的HTML,它们就不会在乎您用来生成HTML的内容,无论是功能语言,命令式语言还是训练有素的猴子。


20

函数式编程可能无法很好地映射到Web编程环境中。但是主要的障碍只是缺乏基础架构(框架和API)。功能语言要拥有像Java,Python或Ruby一样丰富的Web编程环境,这将需要很长时间(可能永远不会)。

也就是说,有一些选择。

我没有任何经验。也许评论者可以权衡哪些对他们有效。



4

对于Clojure,有一个有趣的创业公司(TheDeadline),它是使用Clojure和Google App Engine开发的。他们对Slideshare的评价很高,对InfoQ的采访也不错。

有关使用GAE部署Clojure的良好讨论,请访问:http : //news.ycombinator.com/item? id= 1239788

据我所知,Clojure有一些Web开发库。Compojure戒指召唤

希望这能回答您的一些问题=)(我也刚开始..)

最好,瑞安


3

它并非与Web开发完全无关。坐在服务器上的应用程序可以很好地利用闭包,高阶函数,不变性,参照透明性等功能,例如,您肯定需要以任何方式转换或操作集合。函数式编程在这里有所帮助,并且其成语正在渗透主流语言是有原因的。功能特性有助于简洁,可测试性,并行化,它们还可以提供本机解决方案,以解决您可能会使用模式解决的问题。

更新:也有用于功能语言的Web框架。Weblocks用于Common Lisp,Lift用于Scala。这些是我听说过的,可能还有更多……但是您不一定必须是纯粹的功能性-例如Scala不是纯粹的,应该与任何Java框架一起使用,您仍然可以将功能性编程用于业务层等



3

Erlang在可伸缩Web应用程序的某些基础结构中似乎正在得到大量使用。CouchDB和Riak数据库大多用Erlang编写,RabbitMQ消息队列服务器也是如此。它成功的关键之一是它通过消息传递来处理并发,没有共享的可变状态。这种思考问题的方法比任何特定的函数式编程语言都更有用。

或者,查看MapReduce。即使您的map和reduce函数恰好是内部有状态的,这也是一种非常实用的计算方法,因此,它非常适合以容错的分布式方式查询大型数据集。

无论如何,选择最适合您的方法。但是请始终将函数式编程放在脑海中,因为您永远不知道什么时候可能会派上用场。



2

语言和范例对于Web应用程序无关紧要,它们都是一样的好坏。如果您正在寻找学习新范式的原因,那就深入研究。我的建议是分析您要解决的问题并选择适当的工具集。


2

Javascript(Web的FE部分的语言,以及越来越多的BE)本身就不起作用,但是功能是一阶功能


2

我们刚刚启动了一个在线电子表格,其中后端完全用Erlang编写。

http://hypernumbers.com

从任何标准来看,这都是您可以使用具有复杂性的巨大GUI构建的最复杂的Web应用程序之一。


2

这是使用Haskell构建Web应用程序的Web开发人员经验。尽管函数式语言非常安全,并且具有良好的并发性,但是它们一直缺乏同类API的精华,因为它很久以来一直是学术界的宠儿,但在现实世界中却受到广泛欢迎。我希望不会太远。Erlang已经进入了。


1

函数式编程之所以在Web编程中流行,是因为它明确了共享和不断变化的状态,并允许程序员将纯函数部分表达为纯函数。纯函数具有并行运行非常简单的优点-因为它们没有副作用。

至少那是我的原因。


1

另一个简短的答案:http : //www.mlstate.com-基于FP的完整的Web开发平台。语言的简洁语义允许进行各种自动化的安全性和安全性分析,优化等。

警告:我在那里工作。


1

函数式语言可能对构建出色的应用程序不是直接有用的,但是我们在构建应用程序时大量使用了函数式编程范例。纯函数式编程提出了“无副作用”的约束。这样可以确保纯函数调用按调用顺序产生相同的结果。对于Web开发而言,这不是理想的选择,但是如果将功能编程与状态更改系统结合使用,则可以构建强大的Web应用程序。请查看我的文章以获取更多详细信息:FAST Server 以及这些幻灯片


0

是的,因为可以使用任何语言进行功能编程,所以您可以每天将其用作Web开发人员。

你应该?这取决于您要解决的问题。函数式编程是一种编程范例,应在哪里使用取决于您要解决的问题。

为了使决策更简单,请考虑使用OOP概念是否更容易解决某些问题,在这些概念中封装,多态,继承等特性可以使您的生活更轻松?

如果是,则不要在那里进行功能编程,而只需使用OOP。如果您的应用程序要执行复杂的计算/计算/业务逻辑并涉及大量并发处理,那么在这种情况下,函数式编程可以提供许多工具和优势。

这些只是构建程序的结构和元素的不同样式,因此,使用正确的工具完成正确的工作就可以了。

Web开发中的函数式编程:

JavaScript支持函数式编程,当我们处于Web开发环境中时,它非常有帮助.React框架在很大程度上受到函数式编程原理的影响,并在许多Web应用程序中使用。

此外,您会发现许多Web应用程序是使用以下功能编程语言开发的框架构建和运行的:

•WebSharper(F#)

•Snap(Haskell)

•升降机(斯卡拉)

•Ocsigen(OCaml)

•芝加哥老板,佐顿(erLang)

希望所以我的答案会帮助任何人。


-2

您可能不会使用它,也不应该使用它,但是当您说某人总是会发现该规则的异常(Viaweb等)时。基本上没有“超级语言”,只有工作代码行,通常在“ Blub”中。甚至Paul Graham都说,Lisp的主要(实际上只是)好处是一个人快速原型制作的能力。

同样,“超级语言”通常会影响而不是提高代码的可读性,这意味着编写此“天才”的那个“天才”必须永远维护它,因为其他人都无法理解它,尤其是因为他很可能以自己的修改后的方言来编写它。这减少了任何项目的可能范围,这意味着即使可以完成新的创新工作,它们也无法扩展,因此规模相对较小(例如Arctic中的Hacker News)。

这并不是说某人无法拥有一个天才的想法,而无法以一种难以理解的风格来实施它,然后可以用Blub重写并扩展它,以便许多人可以从中受益。实际上,这就是所有Lisp成功案例中发生的事情,更不用说曾经生活过的每个著名哲学家。但是,当然,如果您是“天才”,您也许还可以通过其他方式对产品进行原型制作。

对于JVM上的FP,可能有有限但很酷的事情。尽管我个人仅将其用于原型制作,但您可能会有一个用例(通常与多线程有关),在此方面有所改进。


1
实际上,Paul Graham说Lisps的一大优势是它是可用的“最强大”的语言。他通过说四分之一的viaweb(按行)是L​​isp宏来支持他的论点。大多数语言(尤其是90年代中期可用的语言)的元编程都很困难。如果将其推送到生产服务器,则它不是原型。
nmichaels 2010年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.