语言混编总结二

语言混编的核心在于建立联系。

语言混编是两种以上的语言合作,利用各自的优点,协作完成软件的功能。

 

要完成语言的混合编程开发,需要各种层次的支持,分别是开发时、编译时、运行时;同时要准对不同语言的特点区别对待。

 

开发要做的事情:

1)建立语言同等层次的对象和值的映射关系;

2)建立联系;包含赋值、调用、上下文引用、(协议)桥接注册等。

注:桥接注册是跨语言时,一种语言的要素向另一种语言宣告存在的声明;另一种语言在引用时会检索这个声明列表。

依赖注入、存在宣告。

 

编译时要做的工作,主要是考察两种语言在编译后的融合程度。分为三种情况。

1)全部融合为一个可执行文件;比如c++和oc,在机器码层面上实现了无差别融合;这个时候需要编译器支持,不需要系统的运行时支持。

2)分裂为两种可执行文件;比如c++和java;java是字节码的存在,需要解释执行;c++部分以库文件的形式存在,用于辅助。这个时候需要运行时桥接支持。

3)分裂为源码和可执行文件(字节码)的形式。比如oc和js。oc以可执行文件形式存在,js以源码形式寸杂。在运行时,js代码加载到运行环境,然后执行。

两种代码的融合,完全有系统和运行时支持。

 

系统和运行时:

1)对于最终形态为一个可执行文件的混编,无需任何支持。

2)对于非一个可执行文件的混编,

(1)需要考虑不同语言的加载形式。

(2)需要运行时的桥接支持,以打破相互调用的界限。

这个与动态链接库的动态加载有点类似。

混编运行时支持的本质在于:语言的运行环境是本身也是软件,并且运行机制与通信的语言环境相同,所以可以留后门。比如javascribcore就是oc语言实现的;

所以便于与oc通信。

 

混编与线程:

当语言混编存在时,调用通信不一定发生在期望的线程中;比如js调用oc,这时候需要尤其注意。

 

虚拟机或解释器是桥接的关键;用于给信息交换提供上下文。

 

posted @ 2017-12-07 11:08  zzfx  阅读(532)  评论(0编辑  收藏  举报