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