V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
v2defy
V2EX  ›  程序员

rust 真的是硬盘杀手

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

    随随便便写几行代码,拉几个依赖一编译,分分钟两三 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 了
    imes
        9
    imes  
       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  
       141 天前
    @pinylin 你就是超人!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   998 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 21:08 · PVG 05:08 · LAX 13:08 · JFK 16:08
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.