d作者同c++对接

作者:w.b.(d作者)
多数语言可同c对接.c++c上构建.
c互操作.

外(C){
    空*分配(整);
    空*释放(空*);
}

c++对接?

序号难点
1名字混杂
2模板
3匹配失败非错
4名字空间
5重载
6依参查(依赖参数的查询)

无法想像!还有:

序号难点
7运行时类型信息(rtti)
8虚函数
9异常
10特殊成员函数
11重载操作符
12

天哪!这怎么可能.你是要构建一个完整的c++前端d.但,你还有一条路,那就是不编译c++,而是链接它.
d并不是模拟c++,所以c++有的,d不一定有.

//d端
外(C++){
    正 f(引用 符*p);
}
//应链接成
//c++端
外(C++){
    正 f(符*&p);
}

两个不一样,duint,c++unsigned,但他们都是正数的意思.下面dc++的等价符号对比:

DC++
字节整符
正字节正符
长长
正长正长长

像:

"C++"f(长 x);

这样:D好像没有.

构 __c_long{
    本(整 x){l=x;}
    整 l;
    别名 l 本;
}

未解析的问题.

整 常 f();
常(整)f();
//上两个的名字混杂不一样.

构布局匹配c++.

//C++:
构 s{正 a;符 c;双精 d;};
//D:
构 s{正 a;符 c;双精 d;}
//注意,两个的正代表英文不一样,还有`c++`的`分号`.

静态成员也保持一致.构成员函数,也一样.
多态(虚函数),
d类有虚函数,对象/虚表布局不一样,
d支持com接口:

导入 标.标c.窗口.com;
接口 I你好:I未知{
    外(窗口)整 打印();
}
类 C你好:com对象,I你好{
    H结果 打印(){
        消息框(null,"你好",null,MB_OK);
    }
}

或简单这样:

外(C++)类 C{
    空 f(){...}
}

多继承,没得法.
值/引用语义?
c++命名空间:

名字空间 N{
    名字空间 M{
        空 f();
    }
}
名字空间 N{//未关闭.b();
}

d名字空间.包括模块,构,类,插件模板.
扩展c++声明:

外(C++,N.M){
    空 f();
}
外(C++,N){
    空 b();
}

c++模板.

序号难点
1匹配失败非错
2部分序
3依赖查找
4实例点
5主模板
6模板模板

好吓人!忽略掉所有,只是个名字混杂问题.

//c++:
元<类 X,整 C>
构 B{
    X v[C];
};
//D:
外(C++)
构 B(X,整 C){
    X[C] v;
}

同样的:

//C++
元<类 T>
T f(T t){中 t;}
f(3);
//D:
外(C++)
T f(T)(T t){中 t;}
f(3);

两者的混杂名一致.
对接STL.
我们来尝试勾挂向量<T>

标.向量!整 p;
f(p);
//调用f(向量<整,标::分配器<整>>*p);

再来:

外(C++,标){
    类 向量(T,A=分配器!T){
        止 空 压后(引用 常 T);
    }
}
外(C++,标){
    构 分配器(T){
        别名 size_type=大小型;
        空 释放(T*p,size_type s){
            (转换(__gnu_cxx.新分配器!T*)&本).释放(p,s);
        }
    }
}
外(C++,__gnu_cxx){
    构 新分配器(T){
        别名 size_type=大小型;
        空 释放(T*,size_type);
    }
}

剩余的最大问题:抓C++异常,c++异常,按值传递,而d的异常,按引用传递.
总结:
可以走得很远,需要在双端都有弹性,对接STL不可移植,要求专业,不可能100%,但可追踪,比c包装器好,不再局限于已存在的c++代码.

posted @   zjh6  阅读(5)  评论(0编辑  收藏  举报  
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示