『kabini』SD2.0 大会分享(四)

原文链接:http://blog.csdn.net/kabini/archive/2009/11/24/4860183.aspx

 

作者:kabini

 

 Bill Venners

宽宽的额头,蓬松的头发,黑框眼镜和温和的笑容,初识Bill Venners还以为他是个学究式的人物,但是轻松诙谐口吻和同声传译根本赶不上的语速让我们见识到了一个严谨而不失幽默感的演讲大师的风采。他的经典书《深入Java虚拟机》是我学习JVM内部运转机制的第一手资料,内容翔实而准确,例子代码也相当有价值,特此广告一下。

Bill本次的演讲为我们带来了《Scala: 一种Java平台的新语言》。众所周知,在Java平台上,语言方面自然是Java语言为我独尊。但是随着Java语言功能日益强大的同时复杂性也随之水涨船高,再加上其静态语言的特质,使得其在完成某些功能的时候显得较为繁琐。于是便出现了JRuby、Groovy这样的动态语言来弥补Java语言在这方面的弱项。而Scala则是将二者优点相结合而产生的一个Java平台上的新语言,它融合了面向对象和函数式编程的理念,简洁的语法和良好的表达性让人感觉所使用的好像是一个动态语言;另一方面,scala本质上是一个静态语言,拥有一切静态语言带来的编译期类型检查等好处。更重要的是,Scala可以不加修改地直接使用Java现有的类库,避免了重新造轮子的苦恼。

虽然是基于Java平台的静态语言,我们可以预期它编译完之后就是java字节码,但是在语言层面scala和Java的差异还是相当大。举两个最明显的例子:首先是在Scala中,一切操作都是函数调用。不要惊讶,+和-是函数名,甚至连for也是函数调用,所以scala里面a+b实际就是a.+(b)。其次是在Scala中,没有所谓的primary type,即Java中的int、float等原生类型,而代之以经过wapper的类型,所以scala里面不需要所谓的boxing和unboxing。具体的语言细节这里就不多说了,Scala的官方网站资料很全,我只想分享一下我在听了这个Session之后的几点感受:

(1)Scala虽然是静态语言,但是使用起来无论是书写还是命令行编译执行的过程都很像在使用一个动态语言一样方便,当然这要归功于scala的设计理念。

(2)Scala语法上较Java更为简洁,扩展性更强

(3)可以使用现成的Java类库,避免了重复开发

(4)还不成熟,没有什么成功的应用成果(据传twitter是用scala写的)

(5)编译之后的代码采用了大量的Wrapper和Reflection,效率上是否会有影响尚未可知

作为一个新语言,Scala的应用场景还不广泛,Bill的演讲实例都是以JUnit的应用为主的,当时给人的感觉好像只能用在做junit上似的:),而且目前市场上没有什么成功的应用实例。这个应该是其软肋,因为一个语言成功与否最后还是要以其产出品为检验标准的。其次就是在Bill的演示过程中我发现其编译出来的代码很多地方使用了Wrapper和反射操作,我当时提问说这些反射会否影响系统运行效率,但是Bill没有正面回答,只是说有人测了说和Java一样快而有人说会慢一些,所以在效率方面还是让人有一些疑虑。

就我个人而言,这门语言最令我感兴趣的是类似动态语言的书写方式和可以直接使用java类库,不过这些好处和让重新学习一门新语言而且又不能确定其效率是否满足要求的门槛比起来还是缺乏进一步的吸引力,可能会让我觉投入和付出达不到预期。所以虽然目前呼声很高,也只能在有时间的时候“把玩”一下了。还有一位自由软件开发者邓草原先生也开了一个Session介绍了Scala的详细语法和代码实例,其题目是《Scala带来了什么,Scala会是Java的继承者吗?》,不过这部分内容相对枯燥乏味,题目和内容相去甚远,有些标题党的嫌疑。一觉醒来基本忘了大半,头脑中只记住一些琐碎复杂的东西,反倒让我感觉语言本身的魅力有所下降。

 

以上就是我参加本次SD2.0大会的各个Session中觉得比较有价值、值得分享的一些内容,可能记录得并不是特别全面,但是里面有相当部分加入了我自己的理解,希望能够起到抛砖引玉的作用,给各位带来一些新的想法,认识一下新的工具,掌握一些新的经验。有问题欢迎与我讨论

你可能感兴趣的:(网友见闻,2009年SD2C)