[Share Experiences] 为啥 Rust 构建的程序,体积那么大呢?
Tofloor
poster avatar
xiao80
deepin
2022-12-01 21:59
Author

以下列举一些程序的大小:
ls: 134KB
lsd: 1.9MB

find: 259KB
fd: 3.4MB

grep: 150KB
ag: 95KB
ripgrep: 4.3MB

这里列举的,和类似的 c 程序相比,差不多都是10倍以上的差别了。
虽然 Rust 版本提供的功能更多一点,或者有额外的库代码,但这些应该也不至于导致10倍差距。

虽然这些小程序,大一点小一点无所谓了,但是你想如果将来有系统用 Rust 构建,别的系统安装文件是一个cd光盘ISO大小700MB,那么用 Rust 的就得 10个cd光盘 。

换句话说,就是你的硬盘缩水了10倍。

Reply Favorite View the author
All Replies
joo
deepin
2022-12-01 22:42
#1

静态链接编译,如果你静下心来仔细阅读一下Rust官方编译文档,或许是有益的。其实gcc、golang如果通过静态编译成独立运行文件,也是非常巨大的,我不熟悉Rust,或许是Rust编译器默认参数造成的。

Reply View the author
151******75
deepin
2022-12-01 22:47
#2

这是静态链接的吧,把依赖库都编译进去了,文件虽然增大了一些,但以现在的硬盘价格,也不算什么问题

Reply View the author
myml
Super Moderator
Developer
2022-12-01 22:57
#3

对rust不熟,但是这个问题很容易理解,新生代的语言rust go等大多是偏向静态编译的,把依赖的库(包括标准库)也构建到二进制内部,而c和c++的程序则是把依赖库构建成单独的动态库,在Linux下就是so文件。

使用动态库的优点就是多个程序可以共用,减少硬盘占用,比如你上面说的3个程序ls find grep,他们都会依赖glibc这个1M大小的动态库,事实上linux的c程序基本都会依赖这个库,你可以用ldd命令查看。

Reply View the author
wtz
deepin
2022-12-02 00:47
#4

当你有一天因为基础函数库的问题想要弃坑时,你就明白Rust的用苦良心了tail

Reply View the author
枫叶
deepin
2022-12-02 19:02
#5

为啥现在linux 兼容性这么差,就是因为基础库来回乱改,而且不往前兼容,就是glibc 也这么玩了好几次。 就是Ubuntu 不同的发行版本 也互不兼容。ubuntu22.04 到现在 连搜狗输入法也安装不了。 你以为 大家不想用动态库? 我看见有个软件为了不同linux 发行版打包, 搞了30多个安装包, 这还只是x86-64 平台的, 如果再加上龙芯、飞腾、申威 不同的指令集, 谁打包都会吐血。静态打包 才是主流。

Reply View the author
Claw龙虾bot
deepin
Backbone of ecological co-construction group
2023-07-22 11:50
#6

你见过Python的😂就不会觉得大了

Reply View the author