- 可移植性:至少要支持Linux和Windows。那么对于手机呢?有人成功地在手机上运行过吗?
是的。Scala在Android上有相当多的动态。至于J2ME,我看到了一些相关的内容,但并不多。源代码库中有一些与J2ME相关的代码。我不确定它有多可行,但在我看来,似乎没有太多的需求。
我还要提到,在Scala-Lang上有一个关于期望目标平台的调查,其中J2ME是其中之一,但非常低。
- C++兼容性:我能在Scala中混合使用C++代码吗?(JNI?)
就像你可以将C++与Java混合使用一样,这也是值得注意的。如果你没有任何经验,你可以阅读Java资源,因为其中的任何内容都适用于Scala,不需要进行任何更改(除了Scala语法)。
- 编程范式:我现在不想切换到FP。我能一开始使用面向对象和过程化编程,然后随着学习而改变比例吗?
绝对可以。Scala竭尽全力确保您无需以函数式风格编程。事实上,这是来自函数式人士的主要批评:某些人认为,除非强制程序员以函数式风格编写代码,否则一种语言不应被视为函数式。
无论如何,您可以按照自己的方式继续做事情。但我打赌,您会在不知不觉中养成函数式的习惯。
也许你可以看一下我自己博客中关于编写矩阵类的Matrices系列。尽管它看起来像标准的面向对象代码,但实际上它非常函数化。
- 工具链成熟度:你对IDE和调试器有何经验?我现在正在使用Eclipse,感觉还不错。
IDEA(IntelliJ),NetBeans和Eclipse都对Scala提供很好的支持。似乎IDEA的支持最好,而NetBeans / Eclipse则相互跳跃,尽管NetBeans最近显然比Eclipse更稳定。另一方面,Eclipse上的支持正在采取非常有前途的路线,在接下来的6个月左右应该会产生结果,只是这是一个颠簸的路线。 :-)
这些环境中Scala工具的一些有趣迹象是开发中的Eclipse插件使用AOP与整个IDE更无缝地融合,NetBeans插件正在完全重写为Scala,并且IDEA上有一个Scala Power Pack,支持将Java代码转换为Scala代码,等等。
EMACS的人员也对Scala有广泛的工具支持,许多较小的编辑器也支持它。例如,我非常喜欢jEdit对小型程序和脚本的支持。
还有很好的Maven支持--实际上,安装Lift的标准方式是安装maven,然后构建一个Lift原型。这将拉入适当的Scala版本。也有一个scala:cc
目标,可以进行触发式重新编译。
说到重新编译,无论是Maven还是Ant都不能很好地识别需要重新编译的内容。因此,Scala编写的SBT(Simple Build Tool)应运而生,通过使用Scala编译器插件解决了这个问题。SBT使用与Maven相同的项目布局以及Maven/Ivy存储库,但项目配置是在Scala代码中完成的,而不是XML——同时支持Maven/Ivy配置文件。
- 学习速度:根据我的经验,您认为我可以多快达到可用的Scala水平?
非常快。作为一种纯面向对象的语言,Scala已经引入了一些很好的功能,类似于C++中存在但Java中不存在的一些东西,尽管它们的工作方式不同。在这方面,一旦您意识到这些功能的用途并将其与C++中的内容相关联,您将比Java程序员更具优势,因为您已经知道如何使用它们。
- 部署:您如何部署Scala程序?是jar文件还是可执行文件?
与Java相同。您可以部署JAR、WAR或任何其他Java目标,因为Scala编译器生成类文件。实际上,您使用Java的jar从类文件生成Scala的JAR文件,并且Lift的Maven目标支持构建WAR文件。
不过,对于脚本文件有一个替代方案。您可以调用“scala”直接运行Scala源代码,类似于Perl或Shell脚本。这也可以在Windows上完成。但是,即使使用编译守护程序来加速执行,启动时间仍然很慢,因此在重型脚本环境中有效使用Scala需要像Nailgun这样的工具。
至于Scala的缺点,请参阅我在this Stack Overflow问题中的回答(以及其他人的回答)。