rust 真的是硬盘杀手 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
v2defy
V2EX    程序员

rust 真的是硬盘杀手

  •  3
     
      v2defy 2022-10-21 14:04:29 +08:00 12725 次点击
    这是一个创建于 1087 天前的主题,其中的信息可能已经有所发展或是发生改变。

    随随便便写几行代码,拉几个依赖一编译,分分钟两三 G 没了。

    大项目更是恐怖,substrate 编译后 42G ,cargo clean 后 42 兆。

    家目录下的 .cargo 和 .rustup 用一段时间也能分别占用十多个 G ,

    500G 硬盘很容易就不够用了,看来以后再买电脑得 1T 起步了。

    49 条回复    2024-07-07 15:17:36 +08:00
    novolunt
        1
    novolunt  
       2022-10-21 14:13:07 +08:00
    golang ,npm ,pip 也有这个问题吧,确实多。
    反正这些我都会跑,然后就不够了
    Alias4ck
        2
    Alias4ck  
       2022-10-21 14:22:48 +08:00
    你说的随随便便是写一个 hello world 还是写一个 application
    PureWhiteWu
        3
    PureWhiteWu  
       2022-10-21 14:24:43 +08:00   2
    写 Rust ,现在电脑配置是 2T SSD
    f6x
        4
    f6x  
       2022-10-21 14:27:06 +08:00   1
    空间换时间, 空间换效率. 你换不换?
    我换.
    7zlid
        5
    7zlid  
       2022-10-21 14:27:53 +08:00 via Android
    利好傲腾
    可惜傲腾已经入土了
    xinhaiw
        6
    xinhaiw  
       2022-10-21 14:34:52 +08:00
    4tb m1
    Mohanson
        7
    Mohanson  
       2022-10-21 14:35:54 +08:00
    Rust 稍大些的项目 cargo build 一下几十 G 洒洒水
    liyang5945
        8
    liyang5945  
       2022-10-21 14:41:32 +08:00   1

    同感,前几天玩了下 tauri ,一个 helloword 都吃了好几 G ,这个图得换成 rust 了
    cmos
        9
    cmos  
       2022-10-21 14:56:44 +08:00   2
    agagega
        10
    agagega  
       2022-10-21 15:02:57 +08:00
    为什么会这么大?还是说原生编译语言都这样,C++项目的中间文件也不小的。当然 Rust 有时候确实离谱
    imzcg2
        11
    imzcg2  
       2022-10-21 16:08:28 +08:00
    cargo install cargo-cache

    安装后 只能 cargo cache -a 来不时清理一下啦
    gam2046
        12
    gam2046  
       2022-10-21 16:26:08 +08:00
    我觉得现代语言都有这毛病

    node_modules
    .gradle
    .mvn
    gopath (go get)

    等等

    只要多编译几个项目,什么工具链都能下回来一大堆缓存
    DonkeyBenjamin
        13
    DonkeyBenjamin  
       2022-10-21 16:29:53 +08:00
    如果这能让你不去学 rust ,我是赞同的
    aloxaf
        14
    aloxaf  
       2022-10-21 16:55:48 +08:00   2
    统一 target 目录 + 定时清理 + btrfs 透明压缩,可以为你省不少空间和时间
    ihciah
        15
    ihciah  
       2022-10-21 16:58:50 +08:00
    大项目关 debug info 能省一点
    7c00
        16
    7c00  
       2022-10-21 17:01:14 +08:00
    @aloxaf 透明压缩在这时候应该效果显著
    yyfearth
        17
    yyfearth  
       2022-10-21 17:16:12 +08:00
    @7c00 不够 因为透明压缩是压缩每个文件 并不会去重 或者固实压缩 对于巨量的小文件 对磁盘占用贡献不大
    文件小文件太小 就算压缩后大小减半 还是会占用整块的磁盘空间

    其实应该把这些放到一个统一的 cache/image fs 里面 里面默认去重压缩 而且对小文件要有优化才能解决这个问题

    另外有些(比如 yarn2 )支持不解压 tgz 文件 直接用虚拟 FS 直接 on the fly 读取 tgz 里面的文件 这样就会好很多 但是会慢 兼容性也会出问题
    ZeroDu
        18
    ZeroDu  
       2022-10-21 17:55:08 +08:00
    java 这边 maven 还好;库都是公用的;开发体验上虽然不占硬盘,但是占内存
    7c00
        19
    7c00  
       2022-10-21 17:58:51 +08:00
    @yyfearth 但这里的 rust 编译产物并不是 nodejs 那种零碎的小文件,在我这里,透明压缩效果非常显著,du 109G 但 df 只有 53G ,不过我这里不做 rust 开发而是做 web 和 android 。
    FightPig
        20
    FightPig  
       2022-10-21 18:01:43 +08:00
    我电脑里 node_modules 占的最多,上回清理了几十 g 出来 ,主要还都是些小文件,现在改用 pnpm 好些了
    adminone
        21
    adminone  
       2022-10-21 18:08:18 +08:00
    substrate 你 build 时没看快上千个包嘛
    7c00
        22
    7c00  
       2022-10-21 18:19:40 +08:00
    @ZeroDu java web 可能还好,android 开发不容乐观,我这里 ~/.gradle 8.6G ,还没多少个项目,而且很多时候初始化项目前我刻意改过 gradle-wrapper.properties ,不然基本上每个项目都用不同版本的 gradle ,每个几百 MB ,多跑几个 demo 又用掉几个 G
    darkengine
        23
    darkengine  
       2022-10-21 18:22:59 +08:00
    Xcode 笑而不语
    zhuweiyou
        24
    zhuweiyou  
       2022-10-21 18:28:53 +08:00
    4 楼说的对
    MrKrabs
        25
    MrKrabs  
       2022-10-21 18:38:54 +08:00
    ssd+雷电硬盘盒没多少钱
    knowckx
        26
    knowckx  
       2022-10-21 18:51:37 +08:00
    假如依赖包先后发布 v1.1 v1.2 v1.3
    我们更新依赖升级版本到 v1.3,但是之前本地留下的 v1.1 和 v1.2 的包内容并不会被清理掉
    pinylin
        27
    pinylin  
       2022-10-21 19:16:25 +08:00
    第三次 推荐 kondo
    cest
        28
    cest  
       2022-10-21 20:15:18 +08:00
    @knowckx #26 所以得自己清,又懒得分析那些还在 in use ,全清了再自动下载回来
    haolongsun
        29
    haolongsun  
       2022-10-21 20:34:27 +08:00
    就这? npm 表示小意思
    israinbow
        30
    israinbow  
       2022-10-21 20:42:26 +08:00 via Android
    最近用 tauri 做软件,体验 nodejs + rust 之一个页面两个按钮的但页面应用,依赖 8 个 Gb 。
    ClericPy
        31
    ClericPy  
       2022-10-21 21:04:10 +08:00
    看到前面提到都这样, 想起 Windows 默认把各路缓存放 user 目录里真特娘烦死, 备份个 C 盘有 20 多 GB 是各路包管理器和 linter 缓存, 清都清不过来, chrome 也乱七八糟往里扔, 真当 user 目录是垃圾桶了
    u823tg
        32
    u823tg  
       2022-10-21 21:07:47 +08:00
    @ClericPy #31 因为多用户啊,总不能给公共区域拉屎啊。
    ClericPy
        33
    ClericPy  
       2022-10-21 21:12:40 +08:00
    @u823tg 我意思是如果都放一个特定前缀的也行, 实在是到处乱放, mypy 的 cache 清的我手都软了, 如果各类软件协商都放 user 下面的 .cache 之类的目录, 我备份时候直接跳过去了...
    yuekcc
        34
    yuekcc  
       2022-10-21 21:15:05 +08:00   1
    找到个清理的工具: https://github.com/tbillington/kondo

    正好也是 rust 写的。
    u823tg
        35
    u823tg  
       2022-10-21 21:15:43 +08:00
    @ClericPy #33 那这个全看各个厂商了, 各个系统都有这个毛病。
    Jtyczc
        36
    Jtyczc  
       2022-10-21 22:42:11 +08:00
    这么恐怖的吗
    chenqh
        37
    chenqh  
       2022-10-21 23:09:02 +08:00
    @u823tg 这种有没有什么工具可以清一下啊,因为我 windows C 盘还是很少的
    oksbsb
        38
    oksbsb  
       2022-10-22 01:41:21 +08:00
    内存盘 + cargo config 统一配置 target 目录。
    lysS
        39
    lysS  
       2022-10-22 09:36:44 +08:00
    @novolunt #1 go 怎么有这个问题了?
    Nugine0
        40
    Nugine0  
       2022-10-22 10:26:54 +08:00 via Android
    rust 不会自动清除无用的编译产物,要定期删掉 target 。
    一些编译设置(高等级优化,增量编译,lto 等)会保存额外的中间信息。
    debug 和 release 会产生两遍编译产物,有的 c/c++绑定会下载两遍预编译文件,没事可以删删 target/debug 。
    交叉编译时对每个目标平台分别编译,有多少个就乘几倍……
    有工具(sccache)可以跨工作区复用编译产物。上面有人说的透明压缩也能缓解。
    rust 默认全部静态链接,手动设成动态链接可以减少中间产物体积,不过既麻烦又对泛型没用。
    rust 的包管理和 nodejs 一样鼓励复用,导致动不动上百个间接依赖,也是膨胀得很厉害。
    vite
        41
    vite  
       2022-10-22 11:13:32 +08:00
    观望, 这么看 rust 是个超越 npm 的黑洞?
    cmdOptionKana
        42
    cmdOptionKana  
       2022-10-22 11:48:24 +08:00
    Go 在性能与资源消耗方面真的平衡得很好,工具链给人的感觉很轻,没有笨重的感觉,编译速度如闪电。
    chuanqirenwu
        43
    chuanqirenwu  
       2022-10-22 12:16:27 +08:00
    rust-analyzer 占内存也是飞起。
    12101111
        44
    12101111  
       2022-10-22 15:04:19 +08:00
    设置 CARGO_TARGET_DIR
    junkun
        45
    junkun  
       2022-10-22 16:33:29 +08:00
    @agagega 就是中间文件。但是 rust 比 C++ 会更严重一点,因为 rust 大多数依赖都是源码分发,所以依赖都要编译,产生中间文件。好处是不会像 C++ 老是有链接、符号错误。
    acctv2
        46
    acctv2  
       2022-10-23 09:06:22 +08:00
    Modern 语言要用 Modern 硬件编程(
    kice
        47
    kice  
       2022-10-23 12:18:22 +08:00 via Android
    我感觉这个地球上的包管理软件都是以只编译 /部署一个项目到一台机器为准。
    杂七杂八的东西堆一起几百 G 就没了。

    pip 相对来说好一些,只是 cudnn 占地方之外。
    还是不要包管理的好,麻烦是麻烦了点,但是省钱。
    k1263
        48
    k1263  
       2022-11-17 16:17:35 +08:00
    大佬在研究 substrate 嘛?这个框架前景怎么样?我看 OneBlock 最近在开 substrate 训练营,99 很便宜,就是不知道靠谱不靠谱,怕浪费时间。
    allenwalker233
        49
    allenwalker233  
       2024-07-07 15:17:36 +08:00
    @pinylin 你就是超人!
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2612 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 06:18 PVG 14:18 LAX 23:18 JFK 02:18
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86