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

rust 真的是硬盘杀手

  •  3
     
  •   v2defy · 99 天前 · 9114 次点击
    这是一个创建于 99 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

    安装后 只能 cargo cache -a 来不时清理一下啦
    gam2046
        12
    gam2046  
       99 天前
    我觉得现代语言都有这毛病

    node_modules
    .gradle
    .mvn
    gopath (go get)

    等等

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

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

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

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

    pip 相对来说好一些,只是 cudnn 占地方之外。
    还是不要包管理的好,麻烦是麻烦了点,但是省钱。
    k1263
        48
    k1263  
       72 天前
    大佬在研究 substrate 嘛?这个框架前景怎么样?我看 OneBlock 最近在开 substrate 训练营,99 很便宜,就是不知道靠谱不靠谱,怕浪费时间。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   实用小工具   ·   3013 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 52ms · UTC 02:29 · PVG 10:29 · LAX 18:29 · JFK 21:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.