2

这个问题的背景是 C 和 java 用户之间的辩论。C 用户声称 C 后端比 JVM 更便携。如果我们遇到一个没有预先存在的 JVM 支持或相对较弱的支持的平台,情况就是如此。堆栈溢出的人有没有遇到过这样的平台?我们可以汇总一个示例列表吗?

4

6 回答 6

4

在这种情况下,我不理解 C 的“可移植性”。如果你的意思是你可以为任何 cpu 编译“hello world”——那么是的,C 更便携。但是你能用 C 制作任何便携式 GUI 或网络、多线程等吗?是的,你可以使用 QT 或类似的东西。但它是一种便携性吗?Java 是一个平台,但 C 是一种语言。恕我直言,这是非常不同的事情

于 2010-11-22T18:42:18.730 回答
2

任何运行 ARM 或 MIPS 的东西都不太可能有完整的 JDK,尽管它可以访问 J2ME。

于 2010-11-22T17:50:44.680 回答
2

“更便携”可能不是最好的问题。您需要做的是确定您可能合理需要支持的平台,并确定 C 和/或 Java 是否可用于它们。如果两者都可用,那么便携性对您来说不是问题。C 可以在更多平台上使用(可能是这样),其中许多平台可能非常晦涩,这一事实是无关紧要的。

如果这只是一个抽象的辩论,那么合适的答案是“谁在乎”?

编辑:回应评论。

这不仅仅是“本周推出产品”。如果您的目标是桌面,那么 Windows、Mac 和 Linux 覆盖了大约 99.999999999% 的所有安装(给或取几个 9),并且都具有 Java。

如果您的目标是移动设备,那么您可以查找哪些具有 Java,但您仍然需要在它们之间进行移植,并且使用 C 对您没有帮助。

您还考虑针对哪些其他平台?IBM 370?十二月 VAX? 操作系统9?如果您想不出一个不是上述之一的目标平台,那么额外的可移植性就是在浪费您自己的时间。请记住,在其他条件相同的情况下,C 开发将比 Java 慢。如果您打算将宝贵的时间用于编写 C 语言,那么您最好从中获得一些您可能需要的东西。

如果您希望创建一个可以在未来十年内用于不同项目的“通用工具包”,那么“一种语言”将无济于事。如果您正在处理一个 Java 项目,那么合并 C 代码就足够复杂了,即使安全考虑允许您这样做也可能不值得这样做。对于您打算使用的每种语言,您可能需要一个不同的工具包——一个用于 Java,一个用于 C 等。C 工具包可能包括可扩展数组之类的东西,以及 Java 中免费提供的其他东西。无论哪种方式:首先为每个项目选择语言,然后为该语言提取适当的工具包。

于 2010-11-22T18:12:12.433 回答
1

可以在此处找到JVM 下载列表。

我在 JVM 支持方面没有特别的专业知识,但从表面上看,它似乎都支持 Windows、Linux、Solaris 和 OS X。我想如果你正在运行其他任何东西,那么 Java 不是要走的路......

这是所有操作系统的非常全面的列表。很抱歉,Amiga 或 ProDOS 没有 JVM。

于 2010-11-22T17:49:54.750 回答
1

除 x86 和 x86_64 之外的任何平台都倾向于缺乏对 JVM 的支持。

于 2010-11-22T19:16:03.947 回答
-1

只有当您以可移植的方式对其进行编码时,C 才是可移植的。但是在执行此操作时,字长、库支持等都很重要。您几乎总是需要为目标平台重新编译程序。

Java 被设计成一种可移植的语言;您可以使用 32 位程序并在 64 位 VM 下运行而无需更改(除非您使用 JNI)。

于 2010-12-12T08:03:32.860 回答