适配层java接口_语言之间的接口和适配层 -- NothingHere -- 编程爱好者博客

语言之间并没有鸿沟,一种语言写成的东西并非不能被另一种语言调用,这是语言之间

的接口和适配问题。

1.语言之间的接口多是指动态语言和静态语言之间的接口。但是,从一般意义上来说

只要是高级语言都有相应的低层接口。区别只在这个接口本身如何表达。

例如,PASCAL语言它的低层接口只能表达为汇编,因为PASCAL本身就已经十分低层,

它的内部结构,如函数,结构等,只能以汇编的方式访问。类似的语言还有C。

又如,Python语言它的低层接口可以是高级语言--C语言。说明它的结构十分高级

可以使用C语言来访问。

静态语言很难以另一种静态语言来访问其结构,原因在于它的动态性很小,其静态结构就

比较简单,同时也比较低层,很难找一种语言能访问它所有的设施。C++就是这样,

虽然它大多数结构都可以被C语言访问,而且大多数时间C语言也是C++的低层接口语言。

但是调用成员函数这样的设施还是需要汇编语言才能实现。

2.两种语言之间有映射和适配两种接口方式。映射是指一种语言能直接访问另一种语言(用作接口)

的基本结构。比如C++和C之间,C++能直接访问所有C的结构,所以C可以用作C++的接口语言,

用于扩展C++。映射并不是包含。一般来说,只要高层语言能直接访问低层语言的大部分

基本类型和调用机制即可。大多数语言和相应的虚拟机汇编都有如此关系,例如C#/VB#/J#等语言

与IL的关系,Java和JVM bytecode的关系。编译语言中,D语言,haskell语言都有C的映射。

这类语言扩展时常采用保留低层接口风格,高层语言看起来像是直接调用低层语言。

最为著名的是Eclipse SWT库的Java-C接口,虽然Java-C的接口是适配关系,不是映射关系。

适配关系的接口,正好与映射关系相反,是由低层语言来访问高层结构。比如前面提到的

Java-C的接口,Java把对象结构公开出来,Jvm的调用公开出来,C语言只需要访问这些结构,

就可以生成相应的Java对象。这种接口的特点是扩展后接口与低层接口风格有很大差异。

映射和适配有区别也有统一,前面说到的SWT库就是在适配的接口上实现了映射风格的扩展。

同样在映射接口上也可以实现适配风格的扩展。

3.一般来说C语言是高级语言中最低层的语言。它的静态结构十分简单,基本上没有动态结构,

结构体和共用体大概C语言中最动态的结构了。另一方面,几乎所有系统上都有标准C的实现。

可以称为可移植的汇编语言。因此,我们只讨论C语言作为接口语言的情况。不再进一步讨论

如何使用汇编。

C语言作为接口语言使用包括两个部分,一是词法接口,头文件,它包括了最多的信息。

但很难解析,特别是C语言的头文件中使用了预处理。所以基本上没有语言直接映射C语言的

头文件。但也有例处,比如SmartEiffel。由于它直接编译为C语言的实现,所以它实际上是

直接映射到了C语言的词法接口上。C++也可以看成这类语言。

C语言作为接口的另一种形式是二进制库,由于C语言的动态结构少,编译成库文件后只

包括:函数接口,基本数据类型,结构体,共用体。高层语言访问起来就容易多了。比如

D语言。另一方面,很多高级语言本身就是以C语言实现的,所以C语言访问这些高级语言的

结构也是理所应当。

4.C++。C++作为C语言的超集。它完全映射了C语言。所以C语言的库可以直接作为C++的扩展。

5.Java。Java到C是通过JNI适配接口实现。说到JNI,不得不提起适配式接口的一大特点,就是

一般有一个接口生成器。Java使用的javah。这种生成器可以根据接口语言,可能就是高级语言

本身,生成低层语言的适配代码,扩展作者只要按框架来填写即可。

6.举例

COM -> C++

managed C++ -> IL.net

Python -> C

lisp -> C

perl -> C

现在要写一个perl的COM扩展如何?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值