前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Rust日报】2024-03-26 Rust target 目录的磁盘空间问题讨论

【Rust日报】2024-03-26 Rust target 目录的磁盘空间问题讨论

作者头像
MikeLoveRust
发布2024-04-01 11:11:24
1380
发布2024-04-01 11:11:24
举报

Rust target 目录的磁盘空间问题讨论

一位 Reddit 用户在反映,在他们的 1TB 机器上,一个 target 目录占用了高达 165GB 的空间,总共有近 500GB 的 target 目录空间被占用。

相信不少人也遇到过类似的问题,针对 Rust Target 目录磁盘空间占用过大的问题,网友们展开了激烈的讨论,总结如下:

  • 空间占用分析:一个用户指出,他发现大约 70% 的空间被 crate 元数据占用,包括所有依赖的文档字符串。元数据被存储了两次,一次在 .meta 文件中,一次嵌入在 .rlib 文件中。
  • 清理建议:使用 cargo clean 可以删除所有构建产物,但这意味着需要重新构建。推荐使用 cargo sweep 命令来清除未与当前安装的工具链构建的构建产物,或删除超过 90 天的旧依赖。
  • 性能和优化:讨论了文件系统压缩(如 btrfs + compress-force=zstd:1)和 sccache 的使用,以提高极端情况下的效率。
  • Cargo 团队的计划:Cargo 团队正在开展垃圾收集工作,首先聚焦于全局缓存(如索引、git 依赖等),并对用户目录下的 target 缓存进行优化以减少重复。

reddit原帖链接 https://www.reddit.com/r/rust/comments/1bms2gj/media_ran_out_of_disk_space_on_my_1tb_machine_a/

使用 Rust 重写 devenv 1.0

devenv 是一个旨在创建快速、声明式、可复现、可组合的开发环境的工具,利用 Nix 实现。

  • 快速与声明式: 使用 devenv 可以迅速地构建出开发环境,并且环境的配置是声明式的,意味着配置是清晰和明确的。
  • 可复现性:通过 Nix 的特性,devenv 创建的开发环境是可复现的,确保了环境的一致性和稳定性。
  • 可组合性:允许开发者组合不同的配置和工具,以满足具体的开发需求。
代码语言:javascript
复制
Tips: 类似的工具还有 Nix, brew-bundle, conda/Poetry 等

近日,devenv 发布了 1.0 版本,这是一个将 CLI 从 Python 重写到 Rust 的重大更新,带来了许多新特性和改进:

  • Process-compose: 现在成为默认的进程管理器。
  • 测试基础设施: 增加了许多功能,以简化测试的编写和运行。
  • Non-root 容器: 生成的容器现在以普通用户身份运行,提高了安全性。
  • DEVENV_RUNTIME 环境变量: 用于处理 socket 路径限制。
  • Python 原生库支持: 改善了使用 pip 等工具时的体验。
  • CLI 改进: 包括输入添加、输入更新、构建属性等功能。

同时,核心开发人员也分享了从 Python 迁移到 Rust 的原因: 原 Python 实现的性能不足以满足需求,而选择 Rust 是因为其性能优势和在 Nix 社区中的逐渐普及。

github项目地址 https://github.com/cachix/devenv

blog地址 https://devenv.sh/blog/2024/03/20/devenv-10-rewrite-in-rust/

Rust Nightly 实验功能:Postfix Match

Rust Nightly 的最新版本中,加入了一项实验功能:Postfix Match。

这个功能允许开发者在表达式后,通过类似于方法调用的方式使用 match 语法。一些开发者反馈,认为这个特性使得代码更易读,尤其是在链式调用或长表达式中,它允许开发者从左到右顺序阅读代码,提高了代码的连贯性,但也有人担心语法的复杂度越来越高。

示例代码如下:

代码语言:javascript
复制
#![allow(unused)]
#![feature(postfix_match)]

fn main() {
    enum Foo {
        Bar,
        Baz
    }

    fn get_foo() -> Foo {
        Foo::Bar
    }
    
    // old way
    match get_foo(){
        Foo::Bar => {},
        Foo::Baz => {},
    }

    // new way
    get_foo().match {
        Foo::Bar => {},
        Foo::Baz => {},
    }
}

甚至是这样

代码语言:javascript
复制
get_thing().match({
    Thing::Foo => NextObj(1)
    Thing::Bar => NextObj(2)
}).next_func()

rust unstable book 对应章节 https://doc.rust-lang.org/nightly/unstable-book/language-features/postfix-match.html

-- From 日报小组 RustPlumber

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-03-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Rust语言学习交流 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Rust target 目录的磁盘空间问题讨论
  • 使用 Rust 重写 devenv 1.0
  • Rust Nightly 实验功能:Postfix Match
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档