D应用程序的二进制接口
News
2007-04-24
Category: 更新(update)
Posted by: 刘策(yayv)
新设栏目 D语言高级教程 , 并转贴一篇 深入分析D语言接口与COM接口的关系 精华文章
[更多]
2007-04-24
Category: 更新(update)
Posted by: 刘策(yayv)
新增2篇文章,均是对D语言数组进行探索的。一篇主要探索D语言数组长度修改时产生的影响, 另一篇主要探索D语言数组在多维的情况下如何初始化。
[更多]
[Home] [Search] [D] Last update Jul 16, 2004
D 应用程序二进制接口
如果 D 实现符合 D ABI (应用程序二进制接口)的话,就可以生成可以同其他实现互操作的库、DLL等。这份规范的大部分都处于 TBD(尚δ完成)状态。
C ABI
本规范中提到的 C ABI 指的是目标系统中的 C 应用程序二进制接口。C 和 D 代码应该能够自由地链接到一起,尤其是,D 代码应该能够访问所有的 C ABI 运行时库。基本型别
尚δ完成结构
符合目标平台上的 C ABI 结构分布。类
一个对象的组成如下:偏移量 内容vtable 的组成为:
------ --------
0: 指向 vtable 的指针
4: monitor
8... 非静态成员
0: 指向 ClassInfo 类实例的指针类定义:
4... 指向虚拟成员函数的指针
class XXXX生成了:
{
....
};
- 一个叫做 ClassXXXX 的 Class 类的实例。
- 一个叫做 StaticClassXXXX 的定义所有静态成员的类型。
- 一个叫做 StaticXXXX 的 StaticClassXXXX 的实例,用于静态成员。
接口
尚δ完成数组
动态数组的组成为:0: 数组大小动态数组的声明:
4: 指向数组数据的指针
type array[];静态数组的声明:
因此,静态数组总是静态的将大小作为型别本身的一部分,所以它的实现跟 C 中的实现相同。静态数组和动态数组之间可以轻松的相互转换。
type array[dimension];
关联数组
尚δ完成引用型别
D 有引用型别,但是它们是隐式的。例如,类总是通过引用访问的;这意ζ着类的实例决不会λ于堆栈上或者作为函数参数被传递。当给函数传递一个静态数组时,将会隐式的把它转化为静态数组的引用。例如:
int abc[3];当将 abc 传递给函数时,会造成下面的隐式转换:
void func(int array[3]); // actually
void func(int *p); // abc[3] 被转换为指向第一个元素的指针
void func(int array[]); // abc[3] 被转换为一个动态数组
名字变换
尚δ完成函数调用约定
尚δ完成异常处理
Windows
符合 Microsoft Windows 结构化异常处理约定。尚δ完成Linux
使用静态地址范Χ/处理程序表。尚δ完成垃圾收集
尚δ完成运行时辅助函数
尚δ完成模块初始化和终止
尚δ完成单元测试
尚δ完成Copyright (c) 1999-2004 by Digital Mars, All Rights Reserved
