我正在编写我希望最终在 PC、Xbox 和 Android 平台上执行的代码,如果可能的话,还有 Mac 和 Linux。我不想为每个平台重写它,而是想用一种可以在所有这些平台上工作的语言编写一次。我考虑过 Fantom,但显然它不适用于 Android,并且对静态类型和泛型的支持有限,而且我听说 Scala 将在 CLR 上工作,但它目前不支持 CLR泛型,这会阻止它与 XNA 一起使用。我不想使用动态类型语言,因为动态类型运行速度较慢(在智能手机上尤其重要)并且更难调试。
2 回答
为什么需要针对 JVM?如果这个需求只是为了处理 Android,那么可能会看看MonoTouch,它是一个 .NET 堆栈,用于由 Xamarin 开发的流行移动平台(那些在当时 Novell 开发 Mono 时支持 Mono 的人)。Mono 本身是一种针对 Mac 和其他使用X Window System进行图形交互的 POSIX 平台(您称之为“Linux”)的方法。
您应该意识到,您仍然可能需要为各种平台重新编写 GUI 部分:首先,触摸屏设备上使用的界面方法与“桌面”设备上使用的界面方法有很大不同,其次,MonoTouch 可能会提供用于其目标平台(Android、iOS、WinPhone)上的统一 UI 桌面 Windows、Mac 和基于 X 的平台有自己的首选GUI 堆栈,可通过 .NET 或 Mono—Windows 上的 WPF 或 Winforms, Mac OS X 上的MonoMac(使用Cocoa) 和Gtk#在使用 X 的 POSIX 平台上。Mono 似乎为所有这些桌面平台提供统一的 GUI 堆栈,因为它确实支持 Winforms,但整体外观可能在 Windows 以外的平台上不是最理想的,所以你必须看看。
但至少核心程序逻辑不需要移植到每个平台。
PS 另请注意,我设法在各种场合看到的大多数基于 JVM 的现代软件堆栈都通过IKVM支持 CLR ,这种“包装”CLR 假装它是 Java 代码眼中的 JVM。