>可移植性:至少我希望Linux和Windows。关于手机,有没有人成功地让它运行在那里?
是。在Android上有一些关于Scala的运动。至于J2ME,我在这方面看到了一些东西,但不是很多。在源代码库上有一些与J2ME相关的代码。我不知道它是多么可行,但它看起来对我没有太多的需求。
我还会提到在Scala-Lang上有一个关于所需目标平台的池,J2ME是其中之一,在图腾柱上非常低。
> C兼容性:我可以将C代码与Scala混合吗? (JNI 2)
以及你可以混合C与Java,无论什么是值得的。如果你没有任何经验,你可以阅读Java资源,因为它们中的任何内容都适用于Scala,没有任何更改(除了Scala语法)。
>编程范例:我现在不愿意切换到FP。我可以首先使用OO和程序与一些FP,然后改变比例,因为我学习?
当然,是的。 Scala走出来的方式,以确保你不需要编程的功能风格。这是Scala从功能性人士的主要批评,事实上:一些不认为一种语言功能,除非它强迫程序员写功能风格。
无论如何,你可以去做事情你的方式。我打赌,但是,你会拾起功能习惯,甚至没有意识到他们是功能。
也许你可以在我自己的博客中看看Matrices系列写一个Matrix类。即使它看起来像标准的OO代码,它是,事实上,非常实用。
>工具链成熟度:你对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都不能很好地识别需要重新编译的内容。从那个问题sprung SBT(简单构建工具),写在Scala,它通过使用Scala编译器插件解决了这个问题。 SBT使用与Maven相同的项目布局,以及Maven / Ivy存储库,但项目配置使用Scala代码而不是XML – 同时支持Maven / Ivy配置文件。
>学习速度:考虑到我的经验,你认为我能用Scala达到一个可行的水平有多快?
非常快。作为纯粹的OO语言,Scala已经引入了一些不错的功能,类似于C中存在但不是Java的一些东西,尽管它们以不同的方式工作。在这方面,一旦你意识到这样的功能是和它们相关的C的东西,你会远远领先于Java程序员,因为你已经知道该怎么做。
>部署:如何部署Scala程序?是一个jar,是一个可执行文件?
与Java一样的东西。您可以部署JAR,WAR或任何其他Java目标,因为scala编译器生成类文件。实际上,您使用Java的jar从类文件生成Scala的JAR文件,并使用Lift支持构建WAR文件的Maven目标。
但是,有一个替代脚本文件。您可以调用“scala”直接运行Scala源代码,类似于Perl的Shell脚本。它也可以在Windows上完成。然而,即使使用编译守护程序来加快执行速度,启动时间也足够慢,以至于在重脚本环境中有效使用Scala需要类似于Nailgun。
至于Scala的缺点,看看我的答案(和其他人的)在this Stack Overflow问题。