Perl,Python脚本语言,
从解释性脚本语言层次上,利用解释器的来实现跨平台。
C++语言, 从高级语言层次上,使用不同OS的编译器来实现跨平台。但是C++语言往往直接调用OS提供的API函数,造成了对OS的强依赖,从而无法实现跨平台。解决办法是使用跨平台的库,例如标准C/C++库、Qt库、Boost库等,避免直接调用OS的API。
Java语言和.NET技术, 从中间语言层次,采用虚拟机的技术来实现跨平台。但是只有Java同时提供了完整跨平台库,.NET只有在Windows下支持的好,Linux下只有个MONO项目来支持.NET。
COM技术, 从二进制可执行层次上建立标准,实现了同一平台下的跨语言重用。即其编译得到的二进制可执行文件,可以被多种语言包括脚本语言所调用。COM技术并不是为跨平台而创建的,它在跨平台问题上好像一直没有很好的支持;CORBA技术, 同样从二进制可执行层次上,却实现了跨平台,还有CORBA/DCOM bridge在Windows下去迎合DCOM。
到了CPU机器码层次,实际不存在跨平台问题了。
C++语言, 从高级语言层次上,使用不同OS的编译器来实现跨平台。但是C++语言往往直接调用OS提供的API函数,造成了对OS的强依赖,从而无法实现跨平台。解决办法是使用跨平台的库,例如标准C/C++库、Qt库、Boost库等,避免直接调用OS的API。
Java语言和.NET技术, 从中间语言层次,采用虚拟机的技术来实现跨平台。但是只有Java同时提供了完整跨平台库,.NET只有在Windows下支持的好,Linux下只有个MONO项目来支持.NET。
COM技术, 从二进制可执行层次上建立标准,实现了同一平台下的跨语言重用。即其编译得到的二进制可执行文件,可以被多种语言包括脚本语言所调用。COM技术并不是为跨平台而创建的,它在跨平台问题上好像一直没有很好的支持;CORBA技术, 同样从二进制可执行层次上,却实现了跨平台,还有CORBA/DCOM bridge在Windows下去迎合DCOM。
到了CPU机器码层次,实际不存在跨平台问题了。
实际上,跨平台问题是由于有众多OS造成的。而形成众多OS,除了有历史原因、商业原因外,还有就是有不同的应用场合,例如除了电脑外,还有手机需要OS。目前看,Java虚拟机在不同平台下支持的最好。支持跨平台使用的手段,本质上都是 引入中间间接层,并标准化它们,来屏蔽不同OS的不同。例如上面提到了解释器,编译器加通用库,中间语言加虚拟机等等,都是一种中间层。
如果把中间语言在CPU中实现,则强制所有OS实现在中间语言层次上,跨平台问题才能彻底消失。这样好像CPU成了OS真正的实现者了,在现实中,这可能只是 痴人说梦。