语言真的重要吗:最近一个热议的话题Rust比C++快?

创作不易,方便的话点点关注,谢谢
文章结尾有最新热度的文章,感兴趣的可以去看看。
本文是经过严格查阅相关权威文献和资料,形成的专业的可靠的内容。全文数据都有据可依,可回溯。特别申明:数据和资料已获得授权。本文内容,不涉及任何偏颇观点,用中立态度客观事实描述事情本身
文章有点长(1850字),期望您能坚持看完,并有所收获,阅读时长:3分钟
导读
最近一个热议的话题是Rust是否比C++快,这取代了之前关于C++是否比C快的讨论,有时甚至Java也被提及。
什么是性能?
显然:特定代码片段运行有多快。在微观基准测试的情况下,这确实是我们在看的。执行我们微小孤立代码片段的完美优化版本需要多少CPU周期?

但一旦我们稍微放大视角,我们需要意识到我们所做的假设。例如,我们能否为我们的微观优化代码片段提供数据以接近全速运行,或者周围的代码会拖慢它吗?即使我们纯粹对延迟(或微瓦)感兴趣而不是吞吐量,我们可能处于多线程、多进程甚至多虚拟机环境中,这可能会完全主导我们的延迟。
语言微观基准测试的最后一个弱点仅仅是编译器和虚拟机的质量。当在微观层面上比较编译语言和大多数JIT语言时,唯一的区别将是代码中强制加入的额外“检查”。例如,边界检查(数组、整数)将带来运行时惩罚,但没有这些检查的代码不是等效代码。因此,有许多JavaScript代码的例子将JIT编译成最优二进制,C++也会产生同样的二进制。

一个完全不同且更有用的看待性能的方式是通过制定面向用户的SLO来进行高层次的分析。只要这些目标得到满足,我们就可以安全地声明代码“足够快”。
你能多快写出快速代码?或者换句话说,如果你编写的是完全可读的高级代码,这段代码会有多快。此外,你需要自己编写多少性能关键代码?你也可以将此视为将你的总工作量分为“初始编码”和“优化”。

在这种情况下,我们开始看到差异化。脚本语言突然引入了一个障碍。快速代码必须包含在预编译模块中,通常用C编写。
然而,引入障碍的不仅仅是脚本语言。以下是一些其他带来运行时惩罚且无法完全优化的特性:
• 函数式语言中的不可变数据
• 需要运行时检查的安全特性
• 自动内存管理
可用工具的质量也对轻松编写快速代码产生巨大影响。例如,对于编译语言,PGO通常会带来20%的性能提升。
但让我们不要忘记等式的另一边。因此,我们可以推理我们编写的代码有多快,但我们编写这些代码有多快?
机会成本
在商业中,一切都是金钱,虽然可能不容易制定你的工程师的机会成本,但这是你应该考虑的。你的生产力越高,基线成本(保留该员工的成本)和机会成本(该员工提供的价值)之间的差异就越大。
这使得讨论我们编写快速代码的速度变得非常棘手,因为它变成了一个动态问题。优化的决定来自两个主要触发因素:
• 降低资源占用的节省值得花费X天的机会成本
• 产品未达到其SLA,这阻碍了新功能的交付
这意味着你很容易处于一种情况,即用脚本语言编写所有代码都不会触发这两种情况。如果产品发展迅速,节省资源的机会可能根本不会出现。未达到SLA可能更容易且更便宜地通过增加资源占用来解决。
架构驱动性能
在微观层面上,对性能不佳模式的认识已成为基本编程能力的一部分。例如,知道何时使用哈希映射或二分查找已经通过像LeetCode这样的网站被软件工程师所熟悉,这些网站已成为获得工作的必要条件。

在架构中识别相同的模式要困难得多:
• 更高级别的噪声使推理性能变得更加困难
• 责任的划分自然会导致效率低下,但可能是必要的
• 理解第三方组件的详细性能特征具有挑战性
但同时,架构将胜过任何微观层面的性能改进。例如,假设你多次处理输入数据,可以提高处理速度或仅处理一次输入。在这种情况下,你谈论的是微观优化的5-10%加速,但从一开始就消除重复工作的加速可能是80%甚至更高。
如果你的软件在线部署并且需要动态扩展,所有这些都会变得指数级复杂。
那么语言的性能重要吗?
你的代码库中将有一些你可以也应该优化到极限的组件。例如,解析和验证输入、核心数值功能如加密和哈希、任何特定领域的数学密集型代码(AI、图形等)。但你是自己编写这些代码,还是将这个头疼的问题交给库来处理?
更重要的是,你花在编码实现上的时间与其它所有事情相比是多少?在我的项目中,编码部分最终占总时间的0.5%-10%。因此,在元级别上,编码的效率是我最不担心的。
此外,在公司层面,特别是如果你的公司规模较小,轻松获得特定语言的人才的能力应该胜过任何其他考虑。
除非你正在从事低延迟交易,在这种情况下,什么都不重要,因为节省的单个CPU周期可能转化为荒谬的金额。
感谢您阅读本文。如果觉得不错,点点赞谢谢。
最新热门文章推荐:
国外CUDA程序员分享:2024年GPU编程CUDA C++(从环境安装到进阶技巧)
我卸载了VSCode,我的生产力大幅提升
国外Python程序员分享:2024年使用Cython加速 Python完整过程
国外Python程序员分享:2024年NumPy高性能计算库(高级技巧)
国外程序员问题:C/C++最佳用途是什么能干什么?请留下您的最佳答案
国外C++程序员分享:2024年为了性能将 Python 与 C/C++ 接口(多个例子分析)
外国人眼中的程明明:从“电脑小白”到CV领域领军者
外国人眼中的周志华:人工智能奖获得者、人工智能学院院长
国外C++程序员分享:C++多线程实战掌握图像处理高级技巧
2024年国外程序员分享:C++50道经典面试题
外国人眼中的卢湖川:从大连理工到全球舞台,他的科研成果震撼世界!
外国人眼中的张祥雨:交大90后男神博士,3年看1800篇论文,还入选福布斯精英榜
参考文献:《图片来源网络》
到顶部