• 请不要在回答技术问题时复制粘贴 AI 生成的内容
v2defy
V2EX  ›  程序员

rust 真的是硬盘杀手

  •  3
     
  •   v2defy · Oct 21, 2022 · 14364 views
    This topic created in 1475 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

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

    安装后 只能 cargo cache -a 来不时清理一下啦
    ntdll
    ntdll
    Oct 21, 2022
    12
    我觉得现代语言都有这毛病

    node_modules
    .gradle
    .mvn
    gopath (go get)

    等等

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

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

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

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

    pip 相对来说好一些,只是 cudnn 占地方之外。
    还是不要包管理的好,麻烦是麻烦了点,但是省钱。
    k1263
    k1263
    Nov 17, 2022
    48
    大佬在研究 substrate 嘛?这个框架前景怎么样?我看 OneBlock 最近在开 substrate 训练营,99 很便宜,就是不知道靠谱不靠谱,怕浪费时间。
    allenwalker233
    allenwalker233
    Jul 7, 2024
    49
    @pinylin 你就是超人!
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2891 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 123ms · UTC 10:51 · PVG 18:51 · LAX 02:51 · JFK 05:51
    ♥ Do have faith in what you're doing.