软件可分为几种:系统类软件,应用类软件,和中间件类软件;系统类软件诸如各类操作系统,不用细说;应用类软件,面向特定的行业,特定的应用环境,对于语言和开发库的选择,围绕应用进行,如何提供更友好的交互方式,更贴近使用者,更快的推向市场,是其重点关注的内容;中间件类软件介于系统和应用类之间,为应用类提供快速开发上的支持。
中间件类软件,为应用软件提供支持,而应用软件开发语言和环境的选择多种多样;如何能够简化中间件类软件开发,使其能够使用多种开发语言和开发环境,是这里关心的内容,不仅仅是中间件类软件本身语言和开发环境的选择。譬如:
中间件选择C++语言开发,如何在Python,JAVA,lua,Ruby,C#等语言环境中使用该中间件。目前做法是为每种环境提供相关的接口库,如此在开发上,就需要了解每种语言的接口方式,再加上开发,测试调试,以及后期的维护,升级,这是相当大的工作量和浪费,不仅仅是中间件本身复杂;而且对于使用这些中间件的应用软件开发者来说,也增加了维护的负担。
微软推出了.Net,以期解决该问题。.Net通过脚本虚拟机,为不同语言提供了统一的环境,其提供的环境是编译层次的,已有的C/C++等,并不适合,因此有了Managed C++,及其主导的标准,但Managed C++等并不是原生的,所以C#出现了,C#是.Net的原生语言。基于.Net虚拟机,微软系列的各种语言和工具有了一个统一的环境,这种环境是在编译的时候,因此就有了对语言的改造和约束,也同时对其本身的适用范围产生了约束。例如:python,JAVA编写的函数,就不能够在.net上运行。也为开发人员带来的相当的负担,需要学习新的语言,新的工具。
为使各种语言能够融合,从语言本身的改造显然不是很好的方式,也得不到广泛的支持。需要探讨一种新的方式,一种更加简单的方式,一种不需要改造语言本身的方式。这就是这里提出的公共对象平台。通过一种运行的平台,借助于对象的概念,使各种语言都能够操纵这些对象,从而达到各种语言运行时融合。
对于不同语言来说,对象有各自的描述语法和定义方式,那么在运行时呢?对象即为计算机内存中的一块存储区域,该区域包含着属性的定义,包含着方法和事件的定义;而各种语言都提供了对内存对象操作的方式,因此只要有一个统一的平台,实现这种映射关系,就可以实现运行时的融合。如下图:
公共对象平台完成运行时对象到各种语言的映射;使各种语言在运行时融合在一起;采用python开发的中间件;在lua,c++,java中同样可以使用。采用c++开发的中间件,在lua,python,java等语言中可以使用。
在公共对象平台中,为实现映射,需要进行对象的定义和描述;定义对象的属性,对象的方法和事件原型。定义好之后,公共对象平台就可以根据对象的定义,完成内存中的对象到各种语言的映射。同时有了对象定义之后,内存中的对象就是透明的,可以通过公共的管理工具,对其进行管理。