Rust 编译后的二进制文件,比 C++还大,这······
在 9 月 27 日直播的【开源漫谈】第 14 期节目中,开源中国 OSChina 邀请到了马全一、冯洋以及张汉东三位 Rust 专家就“快十年了,Rust 怎么还没有取代 C++”这一话题展开讨论。
直播期间,有网友指出,使用Rust编译生成的二进制文件,在端侧设备(比如嵌入式设备、物联网设备等)上比使用C++编译生成的二进制文件要大很多。这在那些内存和存储空间资源受限的端侧设备上尤其需要注意。
对于这一问题,三位 Rust 专家给出了自己的看法。
冯洋:关于端侧设备上Rust编译文件大小的问题,我的理解如下。
首先,我们要弄清楚为什么Rust编译后的二进制文件会比较大。
目前,有多组人员正在努力解决这个问题,至少有三伙人在进行相关工作。我个人也尝试分析过Rust的二进制文件,发现除了可以移除的调试信息和头部数据之外,其他部分很难进一步压缩。特别是链接(linkage)相关的部分,如果不改变现有的编译系统,这些是无法删除的。
接下来,关于资源消耗的问题,我们可以将其分为计算资源和空间资源两个方面。对于空间资源,我之前已经解释过,很难进一步减小文件大小,这需要Rust社区共同努力来解决链接问题。
至于时间资源,即运行时的内存消耗和计算成本,Rust与C和C++相比,表现大致相当,甚至在某些情况下,Rust可能表现得更好一些。
张汉东:就像冯老师之前提到的,Rust有些方面已经无法进一步优化,但情况并没有网友说的那么严重。
我在参与华为的一个项目时,也是在进行端侧的改造,将C语言的遗留系统转换为Rust。转换后,与C语言相比,Rust的二进制文件确实会大一些,大概多出几十K。这部分增加是有优化空间的,我们知道使用Rust的宏会生成额外的代码,使用了泛型等特性也会增加文件大小。
如果经过优化,Rust的二进制文件仍然会比C的大出十几K,这是无法避免的,但在可控范围内。除非是在资源非常受限的情况下,比如存储容量特别小,我们可以将核心库剥离出去,这样链接后的核心库大小可能只有几K。如果剥离核心库,可能需要自己实现一些基本功能,如复制等。
这是最极端的情况,而现在这样的情况并不多见。通常情况下,使用no_std模式加上一些优化技巧,可以将Rust编译后的文件大小控制在一个可接受的范围内。Rust的编译大小、编译性能和编译时间之间需要平衡。如果追求性能,可能会牺牲编译时间和编译大小。因此,需要根据实际情况来平衡这些因素。
马全一:Rust社区的性质和编译文件大小在一定程度上影响了其在端侧设备上的适用空间。但从我从事社区生态工作的角度来看,我相信Rust社区自身的机制能够逐渐解决这些问题,虽然这不会一蹴而就。
Rust社区相对来说是一个比较松散的组织。它的特性改进和发展方式,并不像有些项目那样由一个技术委员会来制定草案和分工执行。在Rust社区中,如果你想要做一件事情,你需要自己投入精力,并影响周围的人一起参与。因此,Rust社区一直是自治型的,像个轮子式一样向前发展。
此外,还成立了Rust基金会。华为作为创始会员和白金会员,每年都会向基金会投入大量资金。我们会向基金会提出,例如编译文件大小这样的问题,因为它影响了华为使用Rust的场景,比如我们希望Rust能够应用于资源受限的交换机、路由器等设备。我们希望整个社区能够推动这一进程。基金会会根据需求立项,并可能雇佣全职员工来推动某些事情,比如我知道最近基金会雇佣了一些负责安全的工程师来处理供应链安全的问题,以防止有人在项目中植入恶意代码。他们做了很多这样的工作。
所以,Rust还有企业代表组成的基金会这样一个轮子在转动。Rust 社区实际上代表了两组人,他们目前正处于一个磨合的阶段。
去年,Rust社区出现了一些不和谐的新闻,这反映出原本的社区自治模式在发展过程中遇到了挑战。大公司如AWS、微软、谷歌等加入后,他们希望影响Rust的演进方向,与社区之间正在进行磨合。华为等公司需要有人在社区中发挥影响力,而谷歌等公司也希望在社区中投入资源,共同推动各个团队的合作。
要解决编译文件大小的问题,正如冯洋老师所说,需要整个编译器团队及其周边团队共同努力,而不是仅仅在现有的条件下进行优化。如果想要进一步减小文件大小,就需要整个团队的协作。
我和朋友聊天时,对方提到他们以前使用Go语言,在Go语言社区中提出PR并被接受的几率较低。
相比之下,Rust社区会充分讨论并推动PR的进展,这让开发者更有信心使用Rust。因为如果遇到问题,他们有能力自己进行修改。这也是为什么有些公司愿意在核心问题上选择Rust,因为Rust社区是开放治理的,不受单一或少数公司控制。
还有一点,我与同事讨论过如何在社区中推动事情的发展。如果你发现问题,应该想办法改进并提出方案,与社区一起解决问题,而不是仅仅提出问题后就不了了之。这不是社区应有的运作方式。
参与Rust社区的人们可能是因为他们有机会参与到语言编译器的改进工作中,这是使用其他语言时可能无法得到的体验。当然,对于PHP来说,你有机会参与到语言的发展中。
但是如果是像Go或Java这样的语言,它们主要受一两家公司的控制,那么想要真正参与到语言的开发中去,实际上会面临很多困难。这是我想要解释的,即从一个从事社区工作的角度来看,Rust社区提供了更多参与和影响语言发展的机会,这是与其他受公司控制的语言相比的一大优势。
微信扫码,观看直播回放:

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Rust 学起来太难?是被江湖上的兄弟们夸大了
在 9 月 27 日直播的【开源漫谈】第 14 期节目中,开源中国 OSChina 邀请到了马全一、冯洋以及张汉东三位 Rust 专家就“快十年了,Rust 怎么还没有取代 C++”这一话题展开讨论。期间,他们对网上盛传的“Rust 学习曲线陡峭”这一观点进行了反驳,并对如何着手学习Rust提出了简单可行的建议。 马全一:江湖人称 “马道长”,目前在华为负责 Rust 编程语言在国内的生态建设和推广,曾运营 openEuler项目并推动 Docker 容器社区的发展。 张汉东:资深 Rust 专家,著有《Rust 编程之道》一书,参与了不少开源项目,当前主要工作是承接 Rust 咨询。 冯洋:南京大学计算机科学与技术系助理研究员,主要研究方向是复杂软件系统的质量保障,同时在南京大学教授编译原理这一课程。研究 Rust 已有两年,主要集中在两个方向:一是以 Rust 为核心支撑的软件工程技术研发,二是带领团队基于 Rust 的编译技术做一些尝试。 以下内容根据直播整理: Rust学习曲线陡峭已成为泛滥的梗 冯洋:我不是那种只讲课的高校老师,而是从头开始学Rust,真的上手写过代码。Rus...
- 下一篇
墨干 V1.2.9.3 LTS:模板中心上线
墨干 V1.2.9.3 LTS 这个版本的发布,为墨干这个结构化编辑器奠定了基础,我们在 v1.2.9 默认启用的支持Unicode的TMU格式已经非常可靠!墨客社区开始从软件研发阶段过渡到社区发展的阶段,欢迎大家一起参与墨客社区的建设(可以从在「谁正在使用墨干」这个工单下留言开始): Gitee:https://gitee.com/XmacsLabs/mogan/issues/IAVPEY Github:https://github.com/XmacsLabs/mogan/issues/2138 亮点 模板中心上线,我们计划在近期添加一些简历和CV模板,也欢迎社区贡献模板。近期计划添加的模板包含面向如下大学的简历模板: 中国科大 南方科大 华中科大 北师港浸大 等等 更新记录 OSPP开源之夏(已经结束,做一些收尾的修复) 修复编辑->复制到->HTML乱码的问题 临时禁用标签页托拽的功能以避免托拽导致墨干崩溃 修复可编辑PDF在include远程文档时无法导出的问题 社区:模板中心上线 访问帮助->星球首先加载本地文件,由用户自行选择访问官方文档还是Github镜...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS7安装Docker,走上虚拟化容器引擎之路
- Linux系统CentOS6、CentOS7手动修改IP地址
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS关闭SELinux安全模块
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Hadoop3单机部署,实现最简伪集群
- CentOS6,7,8上安装Nginx,支持https2.0的开启