Freewind @ Thoughtworks scala java javascript dart 工具 编程实践 月结 math python english [comments admin] [feed]

(2011-09-13) scala一周研究成果

广告: 云梯:翻墙vpn (省10元) 土行孙:科研用户翻墙http proxy (有优惠)

其实有十五天了,但这些天过年比较忙,实际能看书编码的时间不多,算一周吧。回家后没网可上,便专门从卓越上买了本书,叫“scala编程”,花了60多。前面翻译的还行,后面就有点拗口,看着郁闷了。

对于scala,我的感觉真是非常之好。在结合了函数式编程风格之后,与java相比,scala在代码的简洁性方面,有了质的提高。从前在与java代码时,经常会有一些代码写了千百遍,但是每次都不得不写,而现在,通过新的语法,一下子就简化了,再没有什么废话。在scala中新增加的那些特性,比如伴生类伴生对象,trait,case class,函数值的传递,闭包,以及DSL,都让人爱不释手。记得看到有人说:用了一段时间的scala之后,java代码都不会写了。我也觉得使用了scala之后,不想再去写java了。

之前使用的play因为魔术代码太多而不再使用,这段时间又去寻找新的东西。scala下的新东西很多,但是成熟的不多,毕竟真正流行起来的时间还不长,不过还是发现了很多让人振奋的东西。现在在寻找一套基于scala的web开发框架,正在尝试以下各库及框架:

一、sbt

这是一个基于scala的项目生成、管理工具,有点像scala版的ant,但是远比ant好用且智能。进入其控制台后,可以自动去下载依赖文件、编译、运行、测试、发布等。还可以设置“当源代码发生变化时,立刻执行某操作(如编译、测试)”等。通过它,大大简化了编译、运行及测试scala代码的难度,相当好用,有前途。

二、circumflex-orm

这是一个由俄罗斯人写在的一站式的web开发框架,里面有mvc模块、orm模块等,网址是http://circumflex.ru。当前基于scala的orm有两个,一个circumflex-orm,一个是squeryl,两者相比,我觉得circumflex的代码风格更好一些,看过它们两个的使用示例即可感觉到。我下载了circumflex的源代码,大略看了一下,感觉它的文档和注释写得很不错,代码的构造也相当的巧妙。这段时间便开始使用它,写一些简单的类,以及相关的单元测试,通过单元测试来学习它的使用。其中遇到了不少问题,好在通过在google group中的交流,基本上都得到了解决,也学到了不少。感觉作者对于scala的研究很深,所以才能写出这么好用的api。

有一点需要注意,circumflex只提供了对postgresql的直接支持,如果使用别的数据库,还需要提供额外的dialet(可到网上搜搜看有没有别人已经写好了)。好在我一直用的是postgresql,所以这不是问题。

三、circumflex-web

基于scala的web框架,目前有4个比较好。一是官方推荐的liftweb,二是playframework,三是scalatra,四是circumflex-web。经过我的研究与比较,我觉得liftweb太笨重难用,其代码看起来很费力,pass;playframework虽然支持scala,但是底层还是java,还是有大量的魔术代码,pass;scalatra和circumflex-web差不多,都是很简洁明了的风格,功能也都差不多,所以就选择了circumflex-web。这样有问题了在一处问即可,还是很看好circumflex的(除了这个名字,没起好,不好读不好记)

四、view层

scalate比较火热,提供了多种风格的语法供使用,其中的jade风格我比较喜欢,所以到时候就尝试使用它吧。如果不行,再试试freemarker,毕竟它的“宏”功能我比较喜欢,eclipse有编辑器插件支持,circumflex也提供了直接的支持。

五、单元测试

scalatest这个东西不错,我很喜欢,提供了多种DSL,供喜欢不同风格的人使用。稍加练习之后,即可上手。现在还是通过sbt来运行测试代码的,改天有空研究一下,如何让它在eclipse中直接运行。

六、编辑器

又简单尝试了一下各编辑器的表现,eclipse,idea,netbeans,vim,notepad++等等,都简单用了一下。发现相对于eclipse,idea和netbeans的支持也都差不多,好不到哪儿去,而vim,notepad++又没法利用编辑器的实时查错功能,所以到最后还是使用eclipse来吧。

七、版本控制

回家时,把代码都拷到了移动硬盘上,这段时间在笔记本上,不同的网吧的电脑上编码,真是多亏了git。分布式提交版本控制,的确是使用方便啊。同时又经常使用github.com,那就继续使用git吧,不用再看到那一大堆讨厌的.svn目录了。

上面七个差不多把web开发需要的东西都包含了,剩下的时间就是继续学习、继续研究,继续搞我的网站。

说到scala的不方便之处,有:

  1. 编辑器支持不佳,除了实时查错外,其它的功能基本无用,并且编辑器会经常卡一下。

  2. 编译速度慢。相比java,要慢不少,感觉明显。

  3. 函数式风格,与面向对象的风格,相差巨大,需要一段时间的学习和适应。

comments powered by Disqus