小编典典
可移植性不是黑白的,是或不是。可移植性是我获取程序并在其关心的所有平台上运行该程序的难易程度。
有几件事会影响到这一点。一种是语言本身。Java语言规范通常不涉及“实现”。例如,“ i = i ”在C和C中未定义,但在Java中具有定义的含义。实际上,在Java中,像“ int”这样的类型具有特定的大小(例如:int始终为32位),而在C和C
中,大小取决于平台和编译器。这些差异本身并不能阻止您使用C和C编写可移植代码,但是您需要更加勤奋。
另一个是图书馆。Java有许多C和C 没有的标准库。例如,线程,网络和GUI库。此类库适用于C和C,但它们不是标准的一部分,可用的相应库在不同平台之间可能会有很大差异。
最后,存在一个完整的问题,即您是否可以只获取一个可执行文件并将其拖放到另一个平台上并使其在该平台上工作。假定目标平台有JVM,这通常可以与Java一起使用。(并且存在许多人们关心的用于大多数/大多数平台的JVM)对于C和C
++,通常情况并非如此。通常,您 至少 需要重新编译,并且前提是您已经考虑了前两点。
是的,如果存在用于多个平台的“ CVM”,那将使C和C更具可移植性。您仍然需要以可移植的方式编写C代码(例如:假设标准大小不说明int的大小),或者您要编写CVM(假设它已经为CVM做出了统一的决定)所有目标平台上的所有这些事情)。您还需要放弃使用非标准库(没有网络,线程或GUI),或出于这些目的写入特定于CVM的库。因此,我们并不是真正在谈论使C和C具有更高的可移植性,而是一种可移植的特殊CVM-C / C ++。
再一次,可移植性不是一件黑白的事情。即使使用Java,仍然可能存在不兼容性。GUI库(尤其是AWT)因行为不一致而臭名昭著,如果您马虎,涉及线程的任何行为都会有所不同。但是,总的来说,在一个平台上编写一个简单的Java程序,然后在另一个平台上运行它要比用C或C
++编写的程序做起来容易得多。
2020-10-18