编程语言 · 2023年 10月 28日 0

可移植性

54 次浏览

人类总是想象在中国怎么样,在美国是不是也是那样,或者在非洲也是那样。事实总是事与愿违。

可移植性概念

  • 一般而言,讨论可移植性,表示一种语言在不同平台是否不用修改即可编译运行或解释运行。
  • 不同厂家编译器配合不同厂家的OS, 为了尽可能支持不同硬件,有的语言的标准并不严格。
  • 计算机的故事大部分是不断造轮子,当然也包括不断修轮子。

平台无关性

平台无关一般分为两种,一种是源码级别,一种是目标代码级别。C/C++都可实现源码平台无关,C#/Java可以实现目标代码级别,因为它们多了解释器。

语言的可移植性

  • C语言可移植性好是相对于之前的汇编语言而言,C语言抽象的类型/调用约定等机制让程序员省掉控制汇编细节。遵循标准C可移植性会很好。
    • 很多人吐槽在Windows上写的C代码移植到Linux或macOS编译就出问题,可能是用到了Windows特有的头文件或特性,而非用标准C.
    • 尽管已经进入AI时代,“我待C语言如初恋,C语言虐我千百遍”的故事不断重演。
  • C++和C类似,遵循C++标准的代码有不错的可移植性。
  • 更高级的Java/C#意图用于中间件,在虚拟机解释器的支撑下,理论上可以将同一套Code移植到不同OS平台不需要任何修改。注意,早期的C#相比Java,官方支持的可移植的平台只有Windows, 本质上是非常弱的可移植性,这随着.NET Core的发展,会不断缩小差距。
  • 即便高级语言有不错的可移植性,但因解释器/编译器/OS环境差异,在某些语法或场景下依然会有兼容性问题,这些作为一些有趣的特性增加了编程的”乐趣”。