可移植性和跨平台性,你能分得清吗?
当你听到这两个名词,你能清楚的区分他们吗?
可移植性 => 环境
跨平台性 => 平台
首先先弄懂环境和平台的区别,环境是平台?平台就是环境?
- 平台,软件运行的基础系统和框架,包括软件和硬件。硬件处理器平台、操作系统平台、编程开发编译工具链环境等
- 环境,更倾向于软件。运行时的软件参数配置环境,开发调试环境,系统环境变量,依赖库版本和配置文件等
平台是更底层的、更通用的概念,它包括硬件和软件基础设施;环境则是在特定平台基础上,通过配置和软件安装形成的更具体、更适应特定需求的执行或开发场景。环境是平台上的具体实现。
可移植性,去适应环境。
根据不同的环境,不同的软件配置开启去适应不同的环境。所以可移植性,体现在可通过少量修改或者不修改的情况下去在在不同的环境下运行。
方式:通过设计和编码去适应不同的环境,表现为条件编译和配置开关或关闭对应的系统的配置(不同系统的特性)。
跨平台性,无视平台。
由于有类似JVM的虚拟机作为承载的环境,所以使得软件不经过修改就可以在不同的操作系统上去直接运行。
方式:通过抽象层(虚拟机、中间件、API适配层)或编写平台无关的代码,开发无需关心底层平台的细节。
总结:
尽管二者有各自的侧重点,但在实践中,它们之间存在一定的模糊地带。提高软件的可移植性通常也是为了达到更好的跨平台效果,而一个优秀的跨平台设计本身也体现了良好的可移植性。
例如,使用Java或Python这类语言开发的应用,因为有虚拟机或解释器的抽象层,天然具有较高的跨平台性,同时也展示了良好的可移植性,因为代码可以在不同平台的虚拟机或解释器上运行,无需重新编译。