西西河

主题:【原创】总复老兵:解释执行类代码的性能有无可能达到甚至超过本机编译代码 -- Highway

共:💬9 🌺2
全看分页树展 · 主题 跟帖
家园 回您的话

理论上讲,我们可以制定严格的编程语言和技术规范,使得以上述规范构造出来的程序在不同的平台上有相同的表现,但是现实中,平台特定的软硬件特点和各个厂商的私利决定了同样的编程语言和技术规范在不同平台和厂商之间总是有着不同的遵守程度,其结果就是互相的不兼容。

这方面的一个例子就是C++,理论上有标准C++,但是现实中每个C++编译器厂商都推出了自己的特定实现,其结果是很难写出一个有用而通用的源程序使得它可以在任何一个C++编译器下都编译通过而且有着相同的运行表现。这意味着C++程序是难以移植的,或者说它的移植成本会比较高。

但是,如果我们能够构造一个虚拟机,使得它能够存在于操作系统之上,并且为应用程序提供一个经过虚拟然后表现一致的运行环境,那么我们就可以在为各个平台的各个操作系统都提供了对应虚拟机的情况下,只提供一个统一版本的应用程序,而这个应用程序在对应虚拟机的帮助下可以运行于不同的平台和不同的操作系统之上。这样做的好处一个是降低了开发成本(我们现在只需要开发一个版本而不是每个支持平台和操作系统组合各自一个版本),另一个好处就是它的移植成本会比较低。

以前曾经存在过使用虚拟机的C++环境(开发环境和运行环境),但是它并没有成为主流,成为主流的是静态编译加上迟后联编的本机编译程序,这样主流的C++应用程序就不可能利用虚拟机来实现跨平台。但是类似Java和.Net语言这样解释性编程语言使用虚拟机来构造自己的逻辑机器,从而在虚拟机的帮助下实现了跨平台。其表现就是对于虚拟机里面的应用程序来说,物理机器的特性都是一样的,至少是基本一样的,虽然肯定可以找出各自的不同之处来。

应该指出的是,不管是Java还是.Net,它的应用程序跨平台的程度都是有限的,但是不管怎么说,它可以跨平台的程度要比本机编译程序强了很多。

虚拟机本来是一个技术魔术,其目的是在物理机器上构造出逻辑机器,以满足特定的要求。但是现实中,对降低开发成本和扩大可移植性的渴望使得它成为了商业上的一个杀手锏。具体的例子就是Borland C++BuilderX,C++的开发环境和编译器居然是用Java写的。

我想以上的说明可以解释为什么跨平台的需求会有利于解释型语言。


本帖一共被 1 帖 引用 (帖内工具实现)
全看分页树展 · 主题 跟帖


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河