注:原文来自Wired,虎嗅编译。
计算机编程语言未来的发展是怎样的?这是一个充满争议的永恒话题。
Facebook的工程师路易斯(LouisBrandy)和他的同事们在过去两年里重新打造了垃圾信息清除系统,这个系统可以从全球最大的社交媒体中移除掉恶意的、有攻击性的或是其他不受欢迎的信息。这可不是一个小工程——全球有超过15亿用户在Facebook上发布信息——为了搞定这个问题,路易斯和团队做出了一个不寻常的选择:他们使用了一种被称为Haskell的编程语言。
Haskell
90年代初,由学术人员组成的某个委员会发明了Haskell,将其作为一种语言设计上的试验,许多年之后,Haskell仍旧处在主流编程语言之外的状态。在互联网最大的软件代码平台之一GitHub上面,Haskell位列最受欢迎编程语言的第23位。即便如此,Facebook仍旧选择这种语言用来设计其庞大复杂的反垃圾信息系统。笔者在Facebook位于加州MenloPark的总部采访了路易斯,试图理解这个技术选择从整体来看对于程序语言的发展意味着什么。
可能这个问题看上去很幼稚,但是针对一种程序语言某些优点优于另一种语言的直接讨论,都不可避免地会让人感觉有那么一点点尖刻,尤其是还会涉及到一个更广泛的软件开发者社区。程序员决定使用某个编程语言基于一系列的技术原因,但是同样也有个人因素在内——两种原因又互相联系。如果笔者的采访对象过于称赞Haskell——或是过分批评——那么有许多人会叫喊这不公平。他们很可能无论如何都会这么做。
路易斯是这么说的,他认为Haskell非常适合处理Facebook上的垃圾信息,因为这种语言在同时处理许多不同的任务时,非常高效——而且能够让工程师可以随时对这些计算任务进行编程。Facebook这个社交网络实在是庞大了,垃圾消息的发送者变幻方法的速度很快,Facebook的反垃圾引擎需要一边设计完善,一边能够正常运作,而且要快。“延迟是最关键的,我们希望能够马上阻止垃圾消息的攻击,”他说道,“我们希望在最短的时间里做更多的检查,Haskell在这一点上很有帮助。”
前瞻
如果我们认为Facebook、Google和Amazon的发展方向代表了整个互联网行业的话——也就是说,随着互联网的不断发展,许多其他在线服务也将会遇到这几家公司现在遇到的问题——Facebook的Haskell项目无疑为整个程序开发领域指出了一个方向。这并不意味着Haskell在未来几年会大量普及,因为Haskell和传统编程语言相比差异太大,经常有程序员用起来有问题;毫无疑问,这一点将会阻碍广泛普及。但是Facebook的工作标志着,其他编程语言将会向Haskell的大方向上靠拢。
一些新的程序语言已经在这样做了。GoogleGo和Mozilla的Rust能够让开发者设计大规模并行代码,迅速搭建项目。一些编程项目也在为其他语言设计类似Haskell的软件库,比如“反应式”(reactive)的编程项目RxJava。
对于一些程序员来说,像Go和Rust这样的编程语言并不像Haskell那么高效,但是它们更容易学习。而且Go和Rust至少也在贯彻Haskell社区过去25年来始终坚持的理念。“Haskell推进了许多程序语言的发展,”资深程序员MathiasBiilmann这样认为,“我想未来也会继续如此。”
纯函数式(purelyfunctional)
Biilmann在旧金山一家创业公司工作,为网站设计软件。有一次,他在设计一个能够让用户打开网站时自动调整图像大小的工具,发现Haskell是最理想的编程语言,很大程度上是因为在并发运行程序的时候效率非常高。在一个互联网站点为如此多用户完成如此多不同任务的世界,Haskell的这个特性非常有价值。“你会收到特别多的图像缩放请求,”Biilmann介绍说,“必需要能够处理许多并发链接才行。”
Haskell之所以能做到这一点,是因为它是一种“纯函数式程序语言”。从本质上来讲,开发者基于一系列函数功能设计程序,每一个函数都能够独立于其他来运行。也就是说,你能够用任何需要的方式执行计算,而不需要依序运行程序。
这样做会改进速度,也能帮助开发者想清楚他们在干什么。“大部分编程语言是,你要写:‘首先,做这个。之后,再做那个,’”他解释说,“一旦你用上百个线程同时来做这件事的时候,人类就很难弄清楚到底在发生什么,程序执行的先后顺序又是什么。”
随时编码
这些基本的语言特性正是Haskell吸引Facebook的地方,后者需要一种程序语言来帮助工程师编写“规则”,判断网站上的垃圾信息。判断垃圾信息需要从来自Facebook庞大计算中心中的大量机器提取数据,Haskell提供了一种快速实现的方式。“在Haskell里,同时运行两个函数是很安全的,你知道不会有任何副作用。可对于大部分程序语言来说就不行了,”路易斯说,“Haskell能够让你将看起来依序排列的代码提出,同时运行他们。”
不仅如此,Facebook的工程师还可以在不必担心代码将如何运行的情况下去编写“规则”。“我们希望从并发的状态中抽象出来,”Haskell大师SimonMarlow介绍说,“尽管并行处理对于效率很重要,我们却不希望写反垃圾系统的工程师去担心这一点。Haskell很擅长抽象化。”
Instagram也使用Facebook的系统处理垃圾信息,该公司的工程师介绍,在遭受垃圾信息攻击的时候会随时编写规则,“如果我们使用的是纯函数式的编程语言,完全没有副作用,那么就能更快做出行动。”
对于更大范围的程序世界来说,这一点也很重要。现代互联网服务一定要快速进化,不仅是为了服务不断扩大、变化的用户群,而且要保持竞争状态。
“不是坏事”
现状是:Biilmann已经不再用Haskell了。Haskell并非完全实用。使用该编程语言的人不够多,而且很难改变这一点。“Haskell就像一个来自未来的程序语言,但这是一个永远不会到来的未来,”Biilmann说道,“它解决了所有声称要解决的问题。但是它太过与众不同,不可能成为通用语言。”
如今,在设计需要并发性能的服务时,Biilmann更倾向于使用Go或者Rust。他说这两种语言不如Haskell强大,但是发展方向是对的。而且对于主流程序员来说更适合。“如果今天我要重写图像缩放器的话,很可能会用Go,”他这样说,“Go解决了80%的问题,而且基本上没有学习曲线。”
在Facebook,路易斯承认Haskell的并行计算风格并不适用于所有任务,而且对于一些程序员来说,学起来很困难。但是他很有信心,未来几年这项技术会变得更加重要。“这种技术肯定有潜力,”他说,“每家公司基本上都在写类似的代码。你必须这么做。你会看到许多程序语言出现,感觉和它一样,在底层机制上。”
那么Haskell呢?从长远来看,它是否能发展成一个更普遍的程序语言呢?程序员群体又是否能更大程度地接受它呢?“我不知道,”路易斯这样说,“不过我不认为那是件坏事。”
虎嗅个人北京中科白癜风医院怎么样北京中科白癜风医院郑华国
转载请注明地址:http://www.yujinxiangqiangzhi.com/rjlc/10158.html