原文
如前,我已將個人理財包
從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的超能力
.
-史蒂夫