论坛首页 Java企业应用论坛

Scala-对Java的修正和超越-Presentation

浏览 11036 次
该帖已经被评为良好帖
作者 正文
   发表时间:2009-10-23   最后修改:2009-10-26
这是在SD2China上的中文Presentation,对Scala在设计时的一致性作了些介绍
   发表时间:2009-10-24  
支持一下。看了你一些其它关于Scala IDE的文章,很佩服你在这方面对Scala作出的贡献 ,希望今后能够互相交流。另外我在Scala圈子里建立了一个本文的链接,还请包涵。
0 请登录后投票
   发表时间:2009-10-25  
fineqtbull 写道
另外我在Scala圈子里建立了一个本文的链接,还请包涵。


好的。我虽然不怎么加入圈子,但经常也去看看。

这次会上讲PPT时间有点不够,但这个PPT中提到的每句话都是仔细想过的,强调的是Scala中一些概念的一致性,比如,有关Scala的文章中常提到“值都是对象”,准确地说,应该是“值都是对象的实例”,还有,“操作、函数、参数可以互相转化,都是值,都是实例的对象”,这其实是Scala可以扩展的关键,也是OO+FP能够比较好地在Scala中结合的关键。

还有就是Scala的类型体系,看上去复杂,其实是为了修正Java中类型体系的一些问题,并且带了了一个JVM上的完整一致的类型体系。弄清了几个概念后,也就不觉得复杂了,反倒是比Java的简单。

总之,我看到的Scala的简单性都是由其一致性带来的,虽然设计者为了开发人员的习惯作了一点点妥协,但还是非常坚持他的设计理念。

Martin不是一个简单的人,为了在JVM上实现他的设计理念,其后台的具体实现其实是相当复杂和困难的,但他坚持并不断实践,有时候甚至不惜把原来的实现推倒重来,终于在2.6以后有了我们现在看到的相当理想的结果。

后台的具体实现复杂到什么程度呢?这么说吧,Scala的编译器从词法分析到最后产生JVM的Bytecode大约要做24遍扫描。这也是为什么Scala的IDE比较难做的原因之一,因为,IDE必须考虑用户键入时的反应速度,但同时提供尽可能多的信息,那么对于IDE来说,扫描的步骤什么时候做、做到哪一步,都必须仔细权衡。比如为了判断debugger的断点应该设置到哪个位置(类名、源文件名、行号等),可能需要做到第13遍扫描才能得到全部的信息,但那样的话,性能就很差了。还有就是Java/Scala混合的项目中的互可见性,也需要做一系列的映射,这些工作也不能等到全部扫描完成才做。

新的NetBeans插件中,我比较好地解决了大部分问题,并且,至少在此刻,我可以说,这个插件是现在世界上最好的Scala IDE。

另外,我刚发了NetBeans 6.8beta下的版本,配合Scala-2.8.0 snapshot的,详情请看:
http://wiki.netbeans.org/Scala68v1
3 请登录后投票
   发表时间:2009-10-25  
dcaoyuan 写道
好的。我虽然不怎么加入圈子,但经常也去看看。

Scala圈子的目的就是提供je上Scala爱好者的交流场所,欢迎经常来看看

对于你所提到的一致性我也颇有同感,与Java相比,虽然由于Scala融合了OO和FP带来了不可避免的复杂度,但是理解了这些Java所欠缺的一致性之后,自我感觉在很大程度上能够提高学习(特别是统一概念加深理解方面)效率,并且就语言本身而言也多了一分美感。

dcaoyuan 写道
后台的具体实现复杂到什么程度呢?这么说吧,Scala的编译器从词法分析到最后产生JVM的Bytecode大约要做24遍扫描。

强!要是JVM方面也能做相应的改善就好了,不知Java7上会不会好一点,比较担心扫描过多影响编译速度。

dcaoyuan 写道
另外,我刚发了NetBeans 6.8beta下的版本,配合Scala-2.8.0 snapshot的,详情请看:
http://wiki.netbeans.org/Scala68v1

scala-2.8我个人还没有用过,不过强烈期待中,特别是scala.swing方面的改善。非常高兴,世界领先的Scala IDE是由中国人开发的,如有需要,很乐意为她的发展和推广做一些力所能及的支持。
0 请登录后投票
   发表时间:2009-10-25  
讲一次多少钱啊,能透露下么……
0 请登录后投票
   发表时间:2009-10-26  
PDF第11页,不是不写错了?

“如果Tsub或Tsup是T的子类或超类,C[Tsub]或C[Tsup]都不是List[T]类”

List[T] 是不是应为 C[T] ?

注,我第一次看Scala,也可能是我理解问题了
0 请登录后投票
   发表时间:2009-10-26  
很好的资料,对Scala还不是十分了解
0 请登录后投票
   发表时间:2009-10-26  
starfeng 写道
PDF第11页,不是不写错了?

“如果Tsub或Tsup是T的子类或超类,C[Tsub]或C[Tsup]都不是List[T]类”

List[T] 是不是应为 C[T] ?


你提的对,是我写错了。新上载的文件改过来了,谢谢。
0 请登录后投票
   发表时间:2009-10-26  
fineqtbull 写道
强!要是JVM方面也能做相应的改善就好了,不知Java7上会不会好一点,比较担心扫描过多影响编译速度。


scalac的编译速度比javac肯定要慢,但还是可以接受的,我的一个项目从java改为scala后,编译时间大约为原来的3-4倍
0 请登录后投票
   发表时间:2009-10-26  
草原兄,听了你的课,对scala有点兴趣,有没有入门的推荐教程?
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics