Clojure语言叫板Scala语言 我们不怕内存溢出

开发 开发工具
Scala还没有完全主流,已经有新的语言向他叫板了。Clojure语言宣称他们更能承受巨大的压力,不怕内存溢出。事情果真如此?

  我在这里是想跟大家分享一些从World Singles 系统里获得的经验 …

  早在2009年11月,我们就开始使用Scala语言了。我们有一个需要运行很长时间的操作,把大量的数据变更信息从会员信息数据库中取出,以XML打包文件的形式发送到自定义搜索引擎里。把一大堆的数据表从数据库中映射到XML规则文件里是一个相当复杂的操作。在过去,公司尝试了各种方法,有的好用,有的不好用。我向公司推荐使用Scala语言,原因是他的高效、并行性、类型安全,以及方便适用(特别是XML在Scala语言里有一种相对应的基本数据类型)。

  我们使用Scala编程作为产品的后台发布程序已经有差不多两年了。大多时候,它运行的非常好,但在压力大的时候,它会出现内存溢出的现象,经过大量的观察和测试,我们慢慢的确认,(至少部分原因)是Scala语言本身的实现导致了这个问题。Scala正准备要收编Akka程序库,我们一直在考虑把程序迁移到Akka上…

  因为今年我们开始使用Clojure语言(大概是去年5月我们就开始尝试这种语言),我们认为应该集中兵力开发出一个Clojure版本的Scala程序,看看它运行起来表现如何。

  这个Clojure版的后台发布程序的开发耗费了我们大概15个小时,并通过了所有测试。今天我们进行了一次“疲劳测试”,让它一次处理将近30万个会员的信息。如果是Scala程序,当一次处理的数据量达到5万份时(有时会更少),它就会报内存溢出错误。而Clojure程序却一气呵成,十分顺利——于是,我们就决定在下一次产品发布里用它把Scala程序给替换下来了。

  另外一个有趣的方面是,Scala版的程序长度总共大约有1000行(大概有3.1万个字符)。而Clojure版的只有260行(大约1.15万个字符)。就连注释也简单了(*呃哼*—这并不是我想炫耀的,只是想说这种比较没有偏向)。我们的比较还没有把单元测试代码计算入内,因为Clojure版写的很仓促。Clojure的代码形式非常的接近Scala代码,很多函数都相同——Clojure是一种更强大的Scala——它对一些辅助函数进行的重构,使其变的更加模块化和可维护。

  结果是很显然,我将在产品里采用Clojure版的发布程序,完全的放弃Scala。

  这是Rich Hickey(Clojure语言的发明人) 和 Clojure/core 开发团队的功劳,他们创造了这样一种精彩适用的编程语言,帮人们解决了大问题——谢谢你们!

【编辑推荐】

  1. Scala语言编程入门指南
  2. Scala编程指南 更少的字更多的事
  3. Scala编程指南 揭示Scala的本质
  4. Scala编程指南 了解Traits功能
  5. 51CTO专访Scala创始人:Scala拒绝学术化
责任编辑:彭凡 来源: 外刊IT评论
相关推荐

2009-08-26 10:39:01

Scala和Cloju

2009-07-08 12:43:59

Scala ServlScala语言

2014-05-23 10:25:48

Clojure

2012-04-23 14:35:29

JVMJavaClojure

2010-09-14 13:22:17

Scala编程指南Scala

2020-10-31 17:33:18

Scala语言函数

2013-03-04 09:30:38

ClojureJVM

2014-03-26 14:19:00

ClojureJVM

2009-08-27 17:12:04

Clojure编程语言Java

2009-07-08 14:51:10

2009-07-08 16:42:57

Scala语言设计

2009-12-11 10:44:00

Scala讲座函数 scala

2010-08-18 08:53:53

Scala

2018-05-07 09:09:13

编程语言 C 语言Java

2012-06-08 09:28:15

EclipseScalaAndroid

2009-02-06 09:08:04

Scala函数语言轻量级

2014-01-07 10:12:15

Spark

2010-04-13 15:05:03

安腾

2021-05-30 19:29:12

内存Go语言

2020-12-29 06:44:18

GoScala编程语言
点赞
收藏

51CTO技术栈公众号