互联网的发展怎样改变了编程语言的发展方向?
052015-09
2015-09-05 09:53浏览:次
计算机编程语言未来的发展是怎样的?这是一个充满争议的永恒话题。
Facebook 的工程师路易斯 (Louis Brandy) 和他的同事们在过去两年里重新打造了垃圾信息清除系统,这个系统可以从全球最大的社交媒体中移除掉恶意的、有攻击性的或是其他不受欢迎的信息。这可不是一个小工程——全球有超过 15 亿用户在 Facebook 上发布信息——为了搞定这个问题,路易斯和团队做出了一个不寻常的选择:他们使用了一种被称为 Haskell 的编程语言。
Haskell
90 年代初,由学术人员组成的某个委员会发明了 Haskell,将其作为一种语言设计上的试验,许多年之后,Haskell 仍旧处在主流编程语言之外的状态。在互联网最大的软件代码平台之一 GitHub 上面,Haskell 位列最受欢迎编程语言的第 23 位。即便如此,Facebook 仍旧选择这种语言用来设计其庞大复杂的反垃圾信息系统。笔者在 Facebook 位于加州 Menlo Park 的总部采访了路易斯,试图理解这个技术选择从整体来看对于程序语言的发展意味着什么。
可能这个问题看上去很幼稚,但是针对一种程序语言某些优点优于另一种语言的直接讨论,都不可避免地会让人感觉有那么一点点尖刻,尤其是还会涉及到一个更广泛的软件开发者社区。程序员决定使用某个编程语言基于一系列的技术原因,但是同样也有个人因素在内——两种原因又互相联系。如果笔者的采访对象过于称赞 Haskell ——或是过分批评——那么有许多人会叫喊这不公平。他们很可能无论如何都会这么做。
路易斯是这么说的,他认为 Haskell 非常适合处理 Facebook 上的垃圾信息,因为这种语言在同时处理许多不同的任务时,非常高效——而且能够让工程师可以随时对这些计算任务进行编程。Facebook 这个社交网络实在是庞大了,垃圾消息的发送者变幻方法的速度很快,Facebook 的反垃圾引擎需要一边设计完善,一边能够正常运作,而且要快。“延迟是最关键的,我们希望能够马上阻止垃圾消息的攻击,”他说道,“我们希望在最短的时间里做更多的检查,Haskell 在这一点上很有帮助。”
前瞻
如果我们认为 Facebook、Google 和 Amazon 的发展方向代表了整个互联网行业的话——也就是说,随着互联网的不断发展,许多其他在线服务也将会遇到这几家公司现在遇到的问题——Facebook 的 Haskell 项目无疑为整个程序开发领域指出了一个方向。这并不意味着 Haskell 在未来几年会大量普及,因为 Haskell 和传统编程语言相比差异太大,经常有程序员用起来有问题;毫无疑问,这一点将会阻碍广泛普及。但是 Facebook 的工作标志着,其他编程语言将会向 Haskell 的大方向上靠拢。
一些新的程序语言已经在这样做了。Google Go 和 Mozilla 的 Rust 能够让开发者设计大规模并行代码,迅速搭建项目。一些编程项目也在为其他语言设计类似 Haskell 的软件库,比如“反应式”(reactive) 的编程项目 RxJava。
对于一些程序员来说,像 Go 和 Rust 这样的编程语言并不像 Haskell 那么高效,但是它们更容易学习。而且 Go 和 Rust 至少也在贯彻 Haskell 社区过去 25 年来始终坚持的理念。“Haskell 推进了许多程序语言的发展,”资深程序员 Mathias Biilmann 这样认为,“我想未来也会继续如此。”
纯函数式 (purely functional)
Biilmann 在旧金山一家创业公司工作,为网站设计软件。有一次,他在设计一个能够让用户打开网站时自动调整图像大小的工具,发现 Haskell 是最理想的编程语言,很大程度上是因为在并发运行程序的时候效率非常高。在一个互联网站点为如此多用户完成如此多不同任务的世界,Haskell 的这个特性非常有价值。“你会收到特别多的图像缩放请求,”Biilmann 介绍说,“必需要能够处理许多并发链接才行。”
Haskell 之所以能做到这一点,是因为它是一种“纯函数式程序语言”。从本质上来讲,开发者基于一系列函数功能设计程序,每一个函数都能够独立于其他来运行。也就是说,你能够用任何需要的方式执行计算,而不需要依序运行程序。
这样做会改进速度,也能帮助开发者想清楚他们在干什么。“大部分编程语言是,你要写:‘首先,做这个。之后,再做那个,’”他解释说,“一旦你用上百个线程同时来做这件事的时候,人类就很难弄清楚到底在发生什么,程序执行的先后顺序又是什么。”