Babel协议由LLNL( Lawrence Livermore National Laboratory)实验室开发的一个用于实现多语言互操作的工具,这就有效避免了传统的构件模型由于无法满足科学计算程序多语言互操作而不适合科学计算的问题。
概述Babel协议由LLNL( Lawrence Livermore National Laboratory)实验室开发的一个用于实现多语言互操作的工具,这就有效避免了传统的构件模型由于无法满足科学计算程序多语言互操作而不适合科学计算的问题。Babel解析SIDL或XML文件以生成多语言互操作所需的各类黏合代码。目前Babel所支持的语言有C、C++、FORTRAN77/93/2003、Python和Java(只支持客户端)。Babel主要针对相同地址空间内的多语言实现互操作,如在分布式环境中,一般以远程方法调用的方式实现不同进程间的函数调用。1
构成SIDL解析器、XML解析器、代码生成器、运行时库和构件库共同构成了Babel。通过命令行指令或构件库提供的web接口可以调用SIDL解析器。SIDL通过分析SIDL文件以生成XML中间表达层,而代码生成器则对这些XML文件进行解析并生成相关程序的黏合代码。这些黏合代码主要作用是在相同的地址空间内为不同语言提供函数调用。Bebal的代码生成器主要完成构件框架代码的生成以及Makefile片段的生成。Babel运行时库可用于计数及鉴别动态类型。1
黏合代码基于Babel进行构件开发,首先需要通过SIDL来描述软件接口信息,Babel利用SIDL对接口的描述自动生成相应的黏合代码,而Babel所支持的所有语言就可以利用这些代码对构件进行调用。在生成构件实现代码的过程中,Babel自动生成的黏合代码主要有以下3种:
(1)桩代码(Stub代码):主要功能是将客户端语言翻译成中间对象表现代码语言。
(2)骨架代码(Skeleton代码):该代码的主要功能在于将服务端语言翻译为中间对象表现语言。
(3)中间对象表现代码(IOR代码):该代码是C语言表达的函数指针表。
分析上述3类代码,不难发现,桩代码与骨架代码的功能相对应,二者与中间对象表现代码相协作,共同实现在不同语言间进行方法调用。一般来讲,客户端主要由桩代码负责,而骨架代码则主要用于服务器端。1
本词条内容贡献者为:
李航 - 副教授 - 西南大学