我想知道Java如何比C,C++和.NET和任何其他语言具有更高的可移植性。我已经读过很多关于Java由于可解释器和JVM而具有可移植性的信息,但是JVM只是在硬件上隐藏了体系结构上的差异,对吗?对于不同的机器架构,我们仍然需要不同的JVM。我在这里想念什么?因此,如果有人为最常见的体系结构编写C的抽象层,比方说CVM,那么一旦安装了CVM,任何C程序都将在这些体系结构上运行,不是吗?
这种可移植性到底是什么?.NET可以称为可移植的吗?
可移植性不是黑白的,是或不是。可移植性是我获取程序并在其关心的所有平台上运行该程序的难易程度。
有几件事会影响到这一点。一种是语言本身。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
++编写的程序做起来容易得多。
可移植性是任何编程语言的重要方面。 众所周知,Rexx可用于各种操作系统,如Windows和Linux。 因此,需要确保在Windows平台上开发程序时,如果在Linux平台上运行相同的程序,则需要采取必要的预防措施。 Rexx能够运行系统级命令。 有些命令可用于了解运行它的操作系统是什么。 根据输出,它可以采取适当的操作来查看可以在此操作系统上运行的命令。 例子 (Example) 以下示例显示
问题内容: 什么语言用于构建c ++和java等底层语言? 您怎么能没有语言地建立第一语言? 问题答案: 在编译器的上下文中,此操作通常称为bootstrapping。特别是,请参阅“鸡肉和鸡蛋问题”部分,以直接找到您的问题。 非常 第一 编译器会一直手用汇编语言编写。如果您的下一个问题是“第一个汇编程序是怎么写的?” 那么答案是,第一个汇编器是用二进制机器代码手写的,并且可能带有前面板拨动开关。
WebAssembly的二进制格式是被设计成可在不同操作系统与指令集上高效执行的,无论在Web或非Web环境中。 对高效执行的设想 尽管执行环境是有条件的,本地的,不确定的,也不要向WebAssembly提供下述特性。有些情况下为了WebAssembly模块执行,也许不得不模拟一些宿主硬件或操作系统不提供的特性,让它们似乎被支持。这种情况将会导致糟糕的性能。 随着WebAssembly的标准化推进
2.2.1.可移植性 Linux可以轻松地移植到各种不同的硬件平台上。有了Linux做硬件抽象层,Android就不必为不同硬件的兼容性而劳心。Linux 的绝大多数底层代码都是用可移植的 C 代码编写,因此第三方开发者可以将 Android 移植到很多不同的设备上。
文件移植性 幸运的是,对于许多在不同操作系统下工作的用户,Subversion命令行程序的行为方式几乎完全一致,如果你知道在一个平台上如何运行svn,你也就学会了在其他平台上运行。 然而,这一点在本软件的其他几类地方或Subversion保持的实际文件并不一定都是正确的。例如,在一个Windows系统,“文本文件”的定义与Linux环境下的类似,但是也有区别—行结束的字符串并不相同。当然也有其他的