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