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

发现 Rust 的 target 比 node_modules 还离谱

  •  
  •   yaott2020 · 90 天前 via Android · 5428 次点击
    这是一个创建于 90 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

    如果不想 target 太大,唯一的解决办法就是重新发明轮子,像 c 语言一样,大多数库都自己写,这样保证你的 target 很小很小。
    artiga033
        38
    artiga033  
       89 天前 via Android
    写 rust 是让我觉得 btrfs 这类 cow 和透明压缩的文件系统最有用的时候
    xgdgsc
        39
    xgdgsc  
       89 天前 via Android
    建议再加个 julia ,一起吃硬盘
    capgrey
        40
    capgrey  
       89 天前
    之前构建一个小软件,target 文件夹 一个多 GB....
    james122333
        41
    james122333  
       89 天前 via Android
    这是 rust 除了编译速度额外操点
    浪费你时间和资源的垃圾工具+1
    Hantong
        42
    Hantong  
       89 天前   ❤️ 3
    @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  
       88 天前
    不是有调侃 rust 是硬盘杀手的么,哈哈哈。
    skuuhui
        44
    skuuhui  
       87 天前
    把 target 目录改到 nas 上
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1414 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 23:49 · PVG 07:49 · LAX 16:49 · JFK 19:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.