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