- 可移植性:至少我希望 Linux 和 Windows。手机呢,有没有人成功让它在那里运行?
是的。Android 上的 Scala 有相当多的变化。至于 J2ME,我在这方面看到了一些东西,但不多。源代码存储库中有一些与 J2ME 相关的代码。我不确定它的可行性,但在我看来,对此的需求并不多。
我还要提到,Scala-Lang 上有一个关于所需目标平台的池,J2ME 就是其中之一,在图腾柱上非常低。
- C++ 兼容性:我可以将 C++ 代码与 Scala 混合使用吗?(JNI?)
您也可以将 C++ 与 Java 混合使用,无论其价值如何。如果您对此没有任何经验,您可以阅读 Java 资源,因为其中的任何内容都将适用于 Scala,无需更改(Scala 语法除外)。
- 编程范式:此时切换到 FP 让我感到不舒服。我可以先使用一些 FP 的 OO 和程序,然后在我学习的过程中改变比例吗?
肯定的,是的。Scala 竭尽全力确保您不需要以函数式风格进行编程。事实上,这是函数式人对 Scala 的主要批评:有些人不认为语言是函数式的,除非它迫使程序员以函数式风格编写。
无论如何,您可以按照自己的方式做事。不过,我敢打赌,你会养成功能性习惯,甚至没有意识到它们是功能性的。
也许您可以在我自己的博客中查看有关编写 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 都不能很好地识别需要重新编译的内容。从这个问题中出现了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 的 Maven 目标支持构建 WAR 文件。
不过,脚本文件还有另一种选择。您可以调用“scala”直接运行Scala 源代码,类似于Perl 的Shell 脚本。它也可以在 Windows 上完成。然而,即使使用编译守护进程来加速执行,启动时间也足够慢,以至于在繁重的脚本环境中有效使用 Scala 需要像Nailgun这样的东西。
至于 Scala 的缺点,看看我在这个Stack Overflow 问题中的回答(和其他人的回答)。