我是从头开始新开发项目的团队的一员.目前它基于业余爱好,但我们的目标是在1 - 2年的时间内生活.我们是高级开发人员,他们来自多种语言和技术,过去几年一直关注Java.
现在,我们正在考虑选择工具集和语言(从头开始,未来是光明的).我们希望能够有效地使用现代架构,并在Java和其他基于JRE的技术方面拥有良好的经验.
该项目简而言之就是许多I/O,数据库和一个体面的用户界面,可能需要基于网络并且感觉非常高效.
一条路线是使用GWT的经典Java和构建UI(或GWT之上的层),另一条是Scala + lift.
然后还有其他基于Ruby,Groovy等的技术.
那么我的问题是:鉴于上述情况,您会选择什么作为新长期项目的工具.Scala在这里是留下来还是仅仅暂时炒作的人之一?
您从头开始考虑对大型项目采用哪些其他技术?
可能你最大的二元选择是你决定是通过Java还是编译成字节码的其他语言之一留在Java虚拟机(JVM)上,或者转移到其他平台上,可能是Ruby或Python(具有复杂性)使用不同的架构/操作系统,这可能需要).就个人而言,我认为我非常想坚持使用JVM,因此您的语言选择将是......
我可以给出的只是我自己从Java背景中获得的经验:通过自然地集成到Java生态系统中以及以相同方式继续使用几乎相同的工具集的能力,迁移到scala变得容易.
通过这最后一点,我的意思是scala的静态类型性质意味着所有重构和代码导航机会仍然可供开发人员使用,但scala的类型推断意味着这不会在代码中散布不必要的类型声明冗长.
我仍然可以使用我最喜欢的东西,如春天,蚂蚁,IDEA,我仍然可以使用所有我曾经用Java编写的库(这是采摘它在一个完全新的一个像Ruby,Smalltalk中与Java集成了语言的争论或Python).
从scala是否作为JVM语言保留的角度来看,这是我最关心的问题.但是考虑到有多少关于SO的问题被标记为Jython(161),JRuby(176),clojure(388)和Groovy(661),假设您希望留在JVM上.scala现在不仅远远超过这些(815),而且它正以相当快的速度增长.
最后,虽然我没有使用过Lift,但是同事对它的印象非常深刻(如果我正在编写Web应用程序,我可能会考虑它).我发现脂肪 - 客户替代品(scala swing)不仅可以使用(无论如何都比原始摆动更好!).
值得注意的是,Groovy的创建者最近说,如果他知道Scala的存在,他就永远不会打扰创建Groovy!
我将这两种语言混为一谈,因为它们都代表了将动态语言的语法移植到JVM上的尝试.除非您已经熟悉这种语法,为什么还要费心去沿着这条路走?我必须说,SO统计数据(上图)并未表明这些动力目前具有动力.
我也认为现时从静态编译成动态语言运动是一个很大的进步,你可能会被你错过了什么(在重构和发展助手等方面)感到惊讶-你可能还关心的事实,解释这些语言的性质使它们比Scala慢一个数量级.
我对clojure没有真正的意见,除了说具有强制性的背景,它的语法是可怕的,它的流程非常陌生.功能范式给我留下了更深刻的印象,但我觉得clojure对我来说太过分了; 我将成为一种用水语言的鱼,没有以前的LISP/Scheme经验.