斯卡拉作为新的Java?
我在空闲时间开始探索Scala。
我不得不说,到目前为止,我印象非常深刻。 Scala位于JVM之上,与现有的Java代码无缝集成,并具有Java不支持的许多function。
除了学习一门新的语言之外,切换到Scala还有什么缺点?
那么不利的一面是,你必须为Scala做好准备,
- 你会得到奇怪的Scala编译器内部错误
- IDE支持不如Java(不支持debugging)
- 在未来的发行版中将会有一些向后兼容的function(尽pipe这些function会受到限制)
你还必须冒一些风险,Scala作为一种语言将失败。
这就是说, 我不认为你会回头看 ! 我的经验是总体积极的; IDE是可用的,你习惯了隐含的编译器错误的意思,而你的Scala代码库很小,向后兼容性突破并不是一个主要的麻烦。
这是值得的Option
,集合, 闭包 , 演员模型,提取器,协变types等monadfunction,这是一个很棒的语言。
能够从不同的angular度来处理问题也是非常有益的,这是上述结构允许和鼓励的。
斯卡拉的一些缺点与语言的相对年轻没有任何关系。 毕竟,斯卡拉已经有5年的时间了,而Java在5年的时间里已经非常不同了。
特别是因为斯卡拉没有一个企业的支持,认为这是一个战略重点,所以对它的支持资源相当缺乏。 例如:
- 缺乏广泛的教程
- 文件质量差
- 不存在文档的本地化
- 本地库(Scala使用Java或.NET库作为自己的基础)
另一个重要的区别是由于Sun看到Java和EPFL看到Scala。 Sun将Java看作是获得企业客户的产品。 在某些特定方面(EPOfunction集成和types系统devise,大多数情况下),EPFL认为Scala是一种比现有语言更好的语言。
因此,在Sun使JVM具有冰川稳定性并且Java完全向后兼容的情况下,极慢的弃用和删除function(实际上是删除?),使用一个版本的Scala生成的JAR文件根本无法与其他版本(对于第三方库来说是一个严重的问题),语言不断获得新的function,以及实际删除已弃用的function,Scala的库也是如此。 Scala 2.x的修订历史令人印象深刻,我认为它只有3年的历史。
最后,由于以上所有,第三方对Scala的支持刚刚起步 。 但是,重要的是要注意,通过销售IntelliJ IDEA IDE 赚钱的 JetBrains已经支持了Scala很长一段时间,并且不断改进对它的支持。 对我来说,这意味着有第三方支持的需求,支持必然会增加。
我指着书的情况。 一年前,市面上没有Scala书。 现在市场上有两三本Scala的介绍性书籍,在今年年底之前应该会有相同数量的书籍,还有一本关于基于Scala, Lift的非常重要的Web框架的书。
我敢打赌,将来我们会看到一本关于ESME的书,以及关于Scala和并发的书。 出版市场显然已经到了临界点。 一旦发生这种情况,企业就会跟随。
去年我从J2EE牵引中挣脱了,想在Java的12年之后做一些新的事情,在为一些世界上最大的公司构build非常大的系统的企业中。
过去我曾尝试Ruby on Rails。 在构build了一些示例应用程序之后,我不太喜欢它的感觉,或者我将不得不编写大量的unit testing来覆盖通常由编译器完成的东西。
关于Grails的Groovy是我的下一个停靠点。 我不得不说,我这样做,但它遭受与ROR相同的dynamic打字问题。 不要误解我的意思我不会把Grails放在眼里,因为它是一个很好的框架,我仍然会使用它。 每个都有自己的地方IMO。
然后我跳上了Scala,现在已经构build了基于Scala和Spring MVC的混合应用程序。 起初和斯卡拉一起工作很困难,但是随着时间的推移,它变得越来越容易和高效。 我已经达到了一个临界点,现在我想在Lift中投入时间。
“Scala编程”和David Pollak的“Beginning Scala”书籍相结合,对于学习语言很有帮助,后者的学术倾向较小。
斯卡拉还年轻,还有一段路要走。 我认为这是一个光明的未来,我看到势头已经起来。 最近,Groovy语言的创build者之一在一篇博客文章中说,如果Scala在当时一直在使用,他就不会为deviseGroovy而烦恼。
我认为更好的Java API集成/封装方面的更多工作将使Scala获得更多追随者的支持。 基本的整合已经在那里了,但是我认为它可以被磨光一点。
是IDE支持,但目前是基本的。 Intellij的有力的重构支持还没有,我非常想念这个。 编译器+ IDE支持与其他插件的混合还不成熟。 我有时会得到非常奇怪的内部编译器错误,这些错误是由于Scala如何与Goggle应用程序引擎的JDO增强function所引起的。 但是,这些都是可以轻易修复的小事情。 新技术和语言的早期适应总会带来一点痛苦。 但是,这一点痛苦可以在未来产生很大的乐趣。
如果我看看Scala的function,比较早期的Java, 当我从C ++转移到Java时,JVM还没有准备好关于可伸缩性。 曾经有很多奇怪的崩溃,并在各种操作系统上刻录JVM核心转储。 所有这些现在已经在Java中被修复了,而且JVM是坚实的。 Scals在JVM上运行,所以在本地平台集成方面已经有了巨大的开端。 它站在巨人的肩膀上!
经过多年的构build和支持企业应用程序,我的投票是在编译器能够在构buildunit testing之前捕获大部分非function性错误的语言。 我喜欢混合function编程的力量types检查。 我喜欢我正在做OO ++的事实。
我认为开发社区将决定是否Scala是未来。 现在采用Scala的缺点是,如果它没有采取动力和适应。 很less有Scala开发人员维护一个Scala代码库是非常困难的。 不过我看到Java从臭名昭着的企业中走进了企业,取而代之的是C ++,而开发者社区则是自下而上的。 时间会告诉斯卡拉,但目前它有我的投票。
我会告诉你我个人的经验,以及我如何发现将Scala与现有的Java库集成起来并不那么容易:
我想开始一些简单的事情,正如我认为Scala非常适合科学计算,我想围绕JAMA(Javamatrix库)做一个小包装…我最初的方法是扩展MatrixtypesScala类,然后重载算术运算符并调用Java本地方法,但是:
- Matrix类不提供默认构造函数(不带参数)
- Scala类需要一个主构造函数
- 我认为一个好的主构造函数可以是一个接受Array [Array [Double]]的函数(首先,这个语法比Double [] []更加冗长和难以理解)
- 据我所知,通过阅读手册,主要构造函数的参数也是类的隐式字段,所以我会在Scala子类中以一个Array [Array [Double]]结尾,而在另一个double [] []中结束Java超类,这是相当多余的。
我想我可以使用一个空主构造函数来初始化超类的一些默认值(例如,[[0]]),或者只是创build一个使用Jama.Matrix作为代理的适配器类,但是如果一种语言应该是优雅和无缝融合的另一种,这种事情不应该发生。
那是我的两分钱。
我不认为有任何缺点。 实际上,学习新的语言对扩大你的编程知识非常有帮助。 您可能从Scala中获得诸如generics类,方差注释,上下types边界,内部类和抽象types等对象成员,复合types,明确types的自引用,视图和多态方法。
除了学习一门新的语言之外,切换到Scala还有什么缺点?
思考,思考,思考…..没有,没有:-)
它始终打破向后兼容性。 社区规模很小。 IDE支持还没有。
否则罚款。
这只是一个年轻的语言,它最终会到达那里。 伟大的业余爱好者,没有准备好企业。
这两个,我的意思是四个,我看到的最大的缺点是:
-
许多在专业社区开发人员都没有接受过培训,不愿意学习如何使用function语言,他们甚至不会放弃,所以他们可以理解为什么这是一个更好的方法。 这意味着你将一直在进行艰苦的斗争,直到获得公司的授权。
-
RDBMS集成仍然有点参差不齐。 很多解决scheme,但没有什么真正成为一个标准。 对我来说,这可能是一个优势,而不是一个劣势。 JPA2是一团糟,导致更多的问题比解决问题。 Hibernate条件查询并不好多less。
-
IDE的支持还是比较滞后,但是大部分都是在这个时候debugging的地方。 代码检查是相当不错的(至less在IntelliJ)。
-
你永远不会想再写一行Java! 当被迫回到Java的尴尬语法时,您可能会想要打破墙壁或破坏某些东西。