【发布时间】:2012-09-25 12:50:50
【问题描述】:
我在许多文档中看到一段代码是可移植的。
谁能给我解释一下究竟是什么将一段代码称为可移植的?
【问题讨论】:
标签: portability
我在许多文档中看到一段代码是可移植的。
谁能给我解释一下究竟是什么将一段代码称为可移植的?
【问题讨论】:
标签: portability
可移植代码是与特定平台不紧密耦合的代码,或者与特定平台 API 尽可能松散耦合的代码。它是“便携的”,因为将其从一个平台移动到另一个平台所需的工作量很低。
当您打算编写供大量受众在各种平台上使用的代码时,可移植代码是可取的。
可移植性主要是编译语言的一个问题,因为解释语言通常依赖解释器在运行时提供统一的接口。通过依赖backticks 或exec 等功能在本地环境中执行命令,而不是通过可能具有不同平台的库访问相同的功能,仍然很有可能用解释语言编写过度特定于平台的代码- 特定的实现。
库通常非常关心可移植性,因为它们的主要目的是提供跨平台的一致 API。
编写可移植代码涉及最大限度地减少代码必须“向下”并触及标准 API 之外的底层操作系统的位置。通常,您会封装此类访问,以便在您的代码库中只有一个位置必须从一个平台移植到另一个平台,而批量保持不变。
【讨论】:
可移植性是什么意思?
这意味着以某种方式对程序进行编码,以便相同的代码在不同的环境中工作;例如不同的处理器、不同的操作系统、不同版本的库等。
如果您的代码是可移植的,您应该能够在任何新系统上重新编译它,并且它应该可以毫无问题地运行。
为什么重要?
之所以如此重要,是因为不可移植的代码会导致许多维护方面的问题——管理多个版本、代码的可读性/可理解性差等等。
【讨论】:
可移植代码很容易迁移到其他平台——其他编译器或其他操作系统,只需进行最少的更改即可促进迁移。
理想情况下,这仅通过使用标准(系统提供的头文件中定义的类型、函数、定义)来实现,而在另一个系统上,编译器/操作系统供应商可能会修改这些头文件以使其正确系统)。
有时使用标准是不够的,需要在整个代码中使用(通常很难看)#ifdef。
我的陈述假定使用类似 C/C++ 的语言。许多其他语言在本质上更具可移植性。
【讨论】: