如前,我已将个人理财包
从C移植到D语言
,开始时,把里面的一些
移植到Rust
中,直到我再也受不了了
.
D和Rust
版本中都有读取从美国运通下载的.csv
文件的工具之一
,并把交易
加载到包含财务数据
的轻查
数据库中,试通过使用基于李文
距离的算法的模糊比较
问题的描述与现有问题,来为每个传入的问题
赋值一个费用账户
.
李文
计算是,使用按扩展加载
的用户定义
的轻查
函数完成的.
我发现,该工具的D版本
(使用DMD
编译)取得相同结果
,大约是Rust
版本的两倍快
.
但我觉得如果没猜错的话
,它高亮
了D的强项之一
--不需要一个复杂的接口层
,而可以直接调用C库
.
正如Rust
的主要轻查
接口包rusqlite
的,并没有像轻查
库自身那样
,提供一个直到你满意时停止
的单步执行选择
查询结果的方法
.
相反,可在准备好的语句
上运行,或返回
访问所有返回的行
的一个迭代器
,或调用闭包来处理每一行
的'查询'
方法(或其变种之一
).
当每行
都涉及贵的计算
时,该差异很重要
.
就我而言,我想要满足李文
距离准则的最新交易
,因为我按日期降序
排序它们,这是结果集中的第一行
.
在D
中,我可单步
匹配查询,或取得一行
,或不取
.如果这样做
,我会停止
,使用该交易的费用账户
,然后我就完成了
.
不会计算整个结果集
.在Rust
中,rusqlite
计算整个结果集
,因为李文
计算,然后逐行交给我
,这很贵.
很难说服轻查
按最近的行
限制结果集
.'limit 1'
对Rust
应用的性能
没有影响(我试过了).
显然,在计算结果集
后,轻查
应用了'限制'
.可能可用轻查
的窗口函数
来完成,但我不愿意研究.
我也没有找到一个Rustcrate
可提供对轻查
的单步级控制
并允许你加载扩展
.
这说明了D
的一个没有足够多的人理解
的优势
--可直接轻松
地与C世界
对话.人们抱怨D没有一组丰富的库
.它不需要;
与从C或C++
访问一样容易,可从D
访问所有C库
.随着ImportC
的出现,这更容易
,它是D
的一个非常重要的补充
,值得继续开发
以隐藏C头文件中的疯狂
.
就我而言,在D中,我可以直接查询
,并有与C
中相同的简单交互轻查
.
D的性能相当
(除了AMEX
工具,它要好得多),且代码更具可读性
.
好文章!是,与C的互操作性
九分是D的超能力
.
-史蒂夫