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

发现 Rust 的 target 比 node_modules 还离谱

  •  
  •   yaott2020 · 7 天前 via Android · 4837 次点击

    今天用 Rust 开发,无意间发现 target 文件夹居然占用了近 20GB ,真的被吓到,这比 node_modules 。

    44 条回复    2024-06-24 08:54:51 +08:00
    yuhangch
        1
    yuhangch  
       7 天前
    空间换时间(不是
    povsister
        2
    povsister  
       7 天前   ❤️ 1
    起码 node build 比 rust 快(不是
    l1xnan
        3
    l1xnan  
       7 天前
    我这一个项目长时间没有清理,飙到了 97GB🤣
    diagnostics
        4
    diagnostics  
       7 天前   ❤️ 1
    推特看别人吐槽过,1TB 的 mac 里面 200 多 g 是它,穷人干不了 rust 开发
    encro
        5
    encro  
       7 天前
    哈哈,少些几个目标 target 吧,如非必要。
    fioncat
        6
    fioncat  
       7 天前
    太真实了哈哈哈哈隔。
    作为一个 Rust 开发,我已经把硬盘从 500G 加到 1T 了,你们呢?

    另外记得定期 cargo clean
    nulIptr
        7
    nulIptr  
       7 天前
    前几年我试了一下 tauri 的 hello world 一行代码不写好像是 9g ,不知道现在咋样
    wjx0912
        8
    wjx0912  
       7 天前
    rust,node ,都是硬盘杀手
    sigoden
        9
    sigoden  
       7 天前   ❤️ 2
    推荐一个用于清理项目依赖和构建的工具: https://github.com/sigoden/projclean
    fuis
        10
    fuis  
       7 天前   ❤️ 6
    所有的项目可以构建到同一个 target 目录下

    https://doc.rust-lang.org/cargo/reference/config.html#buildtarget-dir
    wu67
        11
    wu67  
       7 天前   ❤️ 12
    质疑 node_modules
    理解 node_modules
    成为 node_modules
    超越 node_modules
    ...
    dbskcnc
        12
    dbskcnc  
       7 天前
    rust 确实占用不少,刚编译了下 zed editor,target 也是 19g 多了
    zzhaolei
        13
    zzhaolei  
       7 天前
    cargo clean 没用,你只要 build ,就还会下载回来,反而麻烦了
    sampeng
        14
    sampeng  
       7 天前
    说的好像 java 的 maven 库时间长了不大一样= =!只是没 rust 大。

    其实这几年的语言的包管理逻辑都差太多,rust ,golang ,nodejs 。。都是把源代码完全拉过来。

    问题是 rust 和 node 的最大差异是编译是真的慢。。很久之前看 PingCAP 的介绍,他们编译一次半天起步。。。给整崩溃了。
    kneo
        15
    kneo  
       7 天前 via Android   ❤️ 2
    卧龙凤雏,tauri 都有。
    povsister
        16
    povsister  
       7 天前
    @sampeng 不得不说,虽然都喷 go complier 的代码效率低编译优化差,但 go 团队坚持不牺牲编译速度真的是爽太多了。
    k8s 那种项目找个 8c 机器,不 regen 代码+冷启的情况下也就几分钟,有编译缓存后改改代码再编译就是十几秒的事,太爽了。
    araraloren
        17
    araraloren  
       7 天前
    你也可以设置 CARGO_TARGET_DIR 改成一个单独的编译目录,但是会失去灵活性。
    没有稳定的 ABI 是这样的,源码是现拉的,中间生成产物也是现编的,所以 target 会相当大,
    如果提前把库提前安装好或者用其他手段共享一些编译结果,就会好很多。
    cosette
        18
    cosette  
       7 天前
    编译不仅占用磁盘,也占用内存,这就是 rust 。隔断时间 cargo clean 一下,编译的文件会累加的,release/debug ,包括更新依赖等等会越来越大。
    kenvix
        19
    kenvix  
       7 天前
    @sampeng #13 java 是也是够地狱的,不同版本的 gradle 都会重新下一遍依赖库
    FightPig
        20
    FightPig  
       7 天前
    我现在都统一放在一个目录,要不到处去清理,1t 小硬盘顶不住
    qingshui33
        21
    qingshui33  
       6 天前   ❤️ 1
    各位大哥,Rust 怎么才能入门,来来回回的,一直在门外徘徊 😂
    viger
        22
    viger  
       6 天前
    感觉 Rust 这么语言太会整花活,整了一堆东西;
    一直做加法,加法,加法;
    难怪学习曲线那么陡.
    我认为一个好的语言,是要去平衡各方面;
    啥都想要的,最后都会让人望而却步;
    CHTuring
        23
    CHTuring  
       6 天前 via iPhone   ❤️ 1
    @qingshui33 我也挺好奇,我都已经入门三次了,过段时间就出门。
    solos
        24
    solos  
       6 天前
    rust 至少性能好 node_modules 那是些啥
    FightPig
        25
    FightPig  
       6 天前
    @qingshui33 写一个项目就行了,我进进出出七八回,终于在去年把一个 go 项目改成 rust 后有了点思路了,后面写起来就比原来一点摸不到头脑好很多
    agagega
        26
    agagega  
       6 天前 via iPhone
    从头开始编译是这样的,感觉后面搞个类似 pnpm 一样的 cache 会很有用
    jqtmviyu
        27
    jqtmviyu  
       6 天前
    @solos 不是有 pnpm 了吗? 我觉得还好
    pnpm store prune
    再不行就上 npkill 全删
    yidinghe
        28
    yidinghe  
       6 天前 via Android
    理解 Maven ,学习 Maven ,……最终还是比不上 Maven 。
    SayHelloHi
        29
    SayHelloHi  
       6 天前
    使用 npkill 清理出来 30G 硬盘空间~~
    sunnysab
        30
    sunnysab  
       6 天前
    如果某个库的版本升级了,旧的编译产物不会删除。定期 cargo clean 即可。
    hanaTsuk1
        31
    hanaTsuk1  
       6 天前
    @kneo 跑着跑着 磁盘满了🤣
    Daniel17
        32
    Daniel17  
       6 天前
    我引入了一个 rocket ,一个 sqlx ,一个 chrono ,一个 dotenv ,build 之后 target 3 个 G
    Ocean810975
        33
    Ocean810975  
       6 天前
    @qingshui33 #21
    国人写的那个 rust 圣经,我觉得比官方教程直接汉化要好,可以看看,有配套练习和几个小项目,总之就是多写嘛。
    不过我觉得拿 rust 写算法题刷 leetcode 对提升 rust 水平不大,这点可能和其他人讲的有所区别。rust 难也不是难在算法实现上了,没必要折磨自己。
    uni
        34
    uni  
       6 天前
    @jqtmviyu npm 升级到 pnpm 体验是真好,但是试过 bun 之后就开始嫌 pnpm 慢了……
    uni
        35
    uni  
       6 天前
    记得编译一个 substrate 出来 107g 吓死我哈哈,而且某个版本刚出来的时候还遇到了编译器 bug= =
    knightdf
        36
    knightdf  
       6 天前
    我 mac 的 1T 可用空间只有 26G 了我说什么了。哈哈,这玩意确实离谱,删了更慢不删更大
    buf1024
        37
    buf1024  
       6 天前
    直接或间接引入的 crate 太多了,每个直接或间接 crate 都要编译一次,任何一种语言都有这个问题。

    如果不想 target 太大,唯一的解决办法就是重新发明轮子,像 c 语言一样,大多数库都自己写,这样保证你的 target 很小很小。
    artiga033
        38
    artiga033  
       6 天前 via Android
    写 rust 是让我觉得 btrfs 这类 cow 和透明压缩的文件系统最有用的时候
    xgdgsc
        39
    xgdgsc  
       6 天前 via Android
    建议再加个 julia ,一起吃硬盘
    capgrey
        40
    capgrey  
       6 天前
    之前构建一个小软件,target 文件夹 一个多 GB....
    james122333
        41
    james122333  
       6 天前 via Android
    这是 rust 除了编译速度额外操点
    浪费你时间和资源的垃圾工具+1
    Hantong
        42
    Hantong  
       5 天前   ❤️ 2
    @Ocean810975 同意. 我个人不是科班出身, 拿 Rust 入的门, 然后因为参与维护了一个安卓项目, 从学习大佬的代码开始学会了 Kotlin, 后面才补课的 C, 现在因为自己的小项目用到略接触到 Go. Python, JavaScript or TypeScript 也会写一点. 我会的这些语言里面最擅长也最喜欢的就是 Rust, 其次是 Kotlin.

    记得 This Week in Rust 分享了一篇文章关于如何加速编译的, 我试用后感受明显, 虽然最有用的那个把 linker 改成 Mold 只支持 Linux 平台, 改 codegen backend 为 cranelift 不支持 WoA(这个影响也不大), 不支持 SIMD, 不支持 unwinding on panics(这个影响蛮大, 不过可以单开个 build 配置继承 release 配置, 把 debug 打开啥的, 专用于测试版本构建). po 个链接供参考: https://blog.rust.careers/post/compile_rust_faster/
    bjfane
        43
    bjfane  
       5 天前
    不是有调侃 rust 是硬盘杀手的么,哈哈哈。
    skuuhui
        44
    skuuhui  
       4 天前
    把 target 目录改到 nas 上
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2437 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 15:00 · PVG 23:00 · LAX 08:00 · JFK 11:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.