原文 我为自己
构建并从C移植
到D
的金融工具包中的主应用,使用了gtk3
和sqlite3C
库.来谈谈gtk
,它是个有许多令人费解
的复杂头文件
的大系统
.我在D代码中处理了gtk
.
这是ImportC
之前的标准方法
.虽然混乱而丑陋
,但它是有效
的.然而,如果库函数和C头文件
变化,应用不可预测
且难以调试
.目前,我使用的是gtk3
,暂时不会改变,但他们已转移到了使用
了稍微不同的API
的gtk4
.如果我决定更新
到gtk4
,使用该方法,我面临破坏
风险.
评论 我阅读了几次ImportC
文档.然后看到了Walter
的评论.在D
代码中,可只导入头文件
!相关节是41.3.2
,给定import hello
,它说"如果hello
不是D文件
,且扩展名为.i
或.c
,用ImportC
编译hello"
.没有提到.h
文件.
清楚地说明了两件事:我的情况
如何就使用ImportC
,文档需要提供导入C头文件
示例来更正和改进
.导入
头文件以便可直接使用C库
是ImportC
成为D的重要补充
的主要原因,文档应非常清楚说明如何导入
.
我决定试用ImportC
.我的所有D源文件
都已有了"import gtk"
语句,来得到上面我手写的定义
.因此不需要更改,因为现在目标
是导入 gtk.h
.
我简单
更改此makefile
为:dmd
编译D源文件
时,标准的pkg-conf
主要扩展为用"-I"
指示在哪里可找到所有的gtk
头文件.因为dmd
需要的-I
格式与clang
格式略有不同.还需要删除dmd
不支持的几个开关
.
还删除了检查
构大小(及其在C文件
中的定义)的,因为现在可直接从Gtk
头文件中得到构定义
.
然后,我删除了makefile
中对gtk.d
源文件的所有引用.由于我忽略了一些东西,在几次错误启动
之后,成功构建应用.一切只用了不到一个小时
.我做了一些粗略的测试
,似乎工作正常.我对这是多么容易
感到惊讶.
因此,根据我最初的经验,Walter
关于ImportC
有用性的语句
是对的,在我看来,ImportC
极大地增强了D的竞争地位.营销!
还要补充一点,几年前开始,我玩过zig
,被它的translate-c
功能所吸引,它类似ImportC
.我最终还是回到了D
.因为Zig
过去和现在都没有准备
好,也因为前面说过的我和Rust
的不幸遭遇.