scala的一些感想(1) -- 开发环境
作者:小猪
4043字节
点击:51681
回复:5467
所属分类:挨踢的人
创建时间:2012-02-28 16:59:31
最后修改时间:2012-02-28 16:59:31
用scala做开发做了两个月,有一些粗浅的体会,觉得可以记下来。因为主要是用lift做开发,所以也会顺便写一些对lift的感想。
Maven还是SBT?
scala的官方编译工具是SBT,但是lift的标准工具却是Maven,因此,可能还是用Maven的人比较多,如果大多数人都主要是用lift做web开发的话。但是,我个人的感受却觉得,maven实在是一个鸡肋,的确,maven很强大,一个命令行,自动下载所有依赖库,然后自动编译,运行,wow!一分钟就可以把lift的sample跑起来啦!如果不计算下载时间的话。网上看了一下,很多人对maven的不满源于下载时间太长,这个完全是天朝特色问题,鉴于我这里下载网速超过500M/s,所以我对这些“细节”问题是完全无所谓的。
但是我仍然不喜欢maven,maven是一个完全基于命令行的工具,和IDE的集成完全是一个畸形,IDEA和Eclipse都有maven插件,但是它的功能仅仅是调用maven的任务而已,没有maven,我们就做不了这些事情了么?IDEA稍微好一点,它不做及时编译,本来就需要手工编译,但就eclipse而言,maven的编译任务和eclipse的及时增量编译过程完全是冲突的,在eclipse下导入maven工程之后,保存代码简直是个噩梦,scala编译本来就慢,基本上一按保存键,eclipse就开始咣当咣当的跑maven任务了,等着吧。。。
另外一点,对于单一web app,maven还算是方便,但如果有多个web app同时开发的时候,就很麻烦了,要么为每一个app配置一个单独的maven工程,要么。。。哦,我看不懂maven的文档应该怎么办。。。
如果我有一个需要share的lib project,我目前所看到的maven的办法,似乎就是自己建一个本地的repository server,然后把编译好的jar包发布上去。。。我实在是觉得,这把一件简单的事情,搞得复杂了。。。
就maven所做的事情而言,我的感觉是它很方便,很强大,就是对开发不友好,对于一个vi+command控来说,大概maven就像是人间大炮一般给力,而对我这样的IDE控来说,IDE提供的那么多方便的特性都没法使用的话,那简直才是噩梦。。。
顺便说一下,我手上的项目的maven工程,到现在都做不到增量编译,每次都要重新编译整个工程,我不知道是我们的配置问题,还是maven就是这样,或者说单纯是maven的scala插件的问题,我无从得知,望达人告之。
还有一件事情大概也可以佐证我对maven的厌恶之情了,现有的工程中追加了几个命令行启动的程序,怎么调试呢?使用maven的标准做法是,先用maven编译,然后用maven启动程序。。。且不说我需要敲两次命令才能启动程序,万一忘记编译会遇到的奇怪状况了,我在eclipse下只需要简单的右键run就可以的事情,为啥一定要折磨自己去编辑maven的pom文件?至于产品环境下使用的命令行程序启动脚本,用maven你就不写了么。。。。
回过来说说SBT,老实说,我对SBT在scala的工具栈中到底是一个什么角色,至今还不是特别清楚,eclipse的插件设置表明它是用SBT来编译的,那我姑且认为,我是在用SBT吧,没有特别的感受,只是觉得,没有maven,真好。。。
IDEA还是eclipse?
netbeans没有用过,就不讨论了,至于各种功能强大的文本编辑器,我也不予评价,只说说IDEA和eclipse。从功能完善度和稳定性上来说,IDEA的确是超过Eclipse的,我在坚持了一个月之后抛弃IDEA的原因有两点,实在不习惯IDEA的编辑器以及我很怀念eclipse的及时增量编译。但是scala的eclipse插件的确功能还不够完善,只能说是刚好够用而已,稳定性上也比IDEA有很大差距,但既然现在eclipse是scala官方支持的IDE,而且已经搞到钱进行商业运作了,那eclipse还是很值得期待的,虽然现在的eclipse插件的确问题还很多,但毕竟还是刚好够用,经常会有一些不便,但倒不至于严重影响开发。鉴于我作为一个接近10年的ec控的确习惯不了IDEA的编辑器的风格和习惯,因此我还是会留在eclipse上。
scala 2.8还是2.9,或者2.10?
叹口气,这大概是scala最大的问题了,版本不稳定,几乎没有向前兼容性,以至于lift 2.4都要专门分别提供2.8的编译版本和2.9的编译版本,但lift的上一个稳定版本2.3却不提供2.9的编译版本,所以,基于lift2.3的程序如何升级到2.9呢?先把lift升级到2.4吧,老实说,这还算好的,如果要升级基于lift1.0(基于scala多少我也不知道,只知道现在的公司里好几个站点都是lift1.0的。。。)的程序呢?答案只有一个,男人哭吧哭吧不是罪。。。。
我不知道2.10会有怎样的兼容性,但如果scala一直保持这样大幅度的不兼容的变动的话,那么scala的推广将会面临很大的困难,我个人觉得如果两年之内scala还不能承诺向前兼容性的话,我会考虑放弃scala的,旧代码的升级成本太高了。对于一个商业公司而言,两年时间应该足够他们把事情做好了。
另外一个小小的怨念,scala的eclipse插件的下一个版本,将不支持2.8,只支持2.9,在我现有的项目升级到2.9之前,我还是只能用现在这个刚好够用的eclipse插件版本了。。。