2501d,d的优势之一与C互操作

embedded/2025/1/7 22:07:36/
du_pl"><div id="article_content" class="article_content clearfix"><div id="content_views" class="markdown_views prism-atom-one-light">display: none;">d" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);">

原文

如前,我已将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>

http://www.ppmy.cn/embedded/151810.html

相关文章

探索Composable Architecture:小众但高效的现代框架技术

近年来&#xff0c;随着应用规模和复杂性的不断提升&#xff0c;对开发效率和可维护性的要求也水涨船高。特别是在领域驱动设计 (DDD) 和反应式编程 (Reactive Programming) 的趋势影响下&#xff0c;一些小众但极具潜力的框架应运而生。本篇博客将深入探讨一种日益受到关注但尚…

Ruby自动化:用Watir库获取YouTube视频链接

引言 Watir&#xff08;Web Application Testing in Ruby&#xff09;是一个强大的工具&#xff0c;它允许开发者使用Ruby语言来自动化控制浏览器。Watir最初被设计用于自动化Web应用测试&#xff0c;但其功能远不止于此。通过Watir&#xff0c;我们可以模拟用户行为&#xff…

家政预约小程序07参与活动

目录 1 浏览时写入数据2 点击参与按钮更新记录总结 我们上一篇搭建了活动展示的页面&#xff0c;当用户浏览活动的时候&#xff0c;需要记录参与的信息&#xff0c;本篇我们介绍一下如何实现活动参与的功能。 1 浏览时写入数据 为了方便跟踪用户的信息&#xff0c;比如用户浏览…

解决iNodeClient客户端出现查询SSL VPN网关参数失败的问题

一、问题&#xff1a; 使用iNodeClient连接VPN报错&#xff0c;校验网关、用户名、密码都没问题&#xff0c;仍然抱错查询SSL VPN网关参数失败&#xff0c;请检查网络配置或联系管理员。 二、解决方案&#xff1a; 2.1 方案一 重启iNodeAuthService服务 sudo /Library/Star…

Linux 基础七 内存

在操作系统中&#xff0c;进程的内存布局通常分为几个区域&#xff0c;包括代码段、已初始化的数据段、未初始化的数据段&#xff08;BSS段&#xff09;、堆和栈。其中&#xff0c;堆用于动态内存分配&#xff0c;其大小可以在运行时根据需要增长或收缩。 文章目录 7.1 在堆上…

戴尔/Dell 电脑按什么快捷键可以进入 Bios 设置界面?

BIOS&#xff08;基本输入输出系统&#xff09;是计算机硬件与操作系统之间的桥梁&#xff0c;它负责初始化和测试系统硬件组件&#xff0c;并加载启动操作系统。在某些情况下&#xff0c;如调整启动顺序、更改系统时间或日期、修改硬件配置等&#xff0c;您可能需要进入BIOS进…

青少年编程与数学 02-006 前端开发框架VUE 05课题、使用模板

青少年编程与数学 02-006 前端开发框架VUE 05课题、使用模板 一、模板二、Vue 模板的特点三、模板形式四、横向比较Vue 模板 vs Angular 模板Vue 模板 vs React JSXVue 模板 vs Svelte 模板 五、Vue 模板的基本语法六、应用示例 课题摘要:本文介绍了Vue.js中的模板系统&#xf…

RabbitMQ生产消息【交换机、路由键】与消费消息的简单使用

文章目录 一、使用步骤1.新建交换机2.新建队列3.队列绑定交换机和路由键 二、代码1.生产端2.消费端 一、使用步骤 1.新建交换机 点击Exchanges 新增交换机名称为msg.e1&#xff0c;type为direct 2.新建队列 点击Queues 新增队列&#xff0c;名称为q.test1 3.队列绑定交换…