当前位置:首页 > 科技  > 软件

Rust 拖慢开发速度,刚来实习生被折磨哭了

来源: 责编: 时间:2024-01-10 09:35:56 337观看
导读大家好,我叫渔夫。Rust 如果你掌握了,开发速度也是惊人的,如还不够熟悉基本概念、特性、标准库等使用,那么写 Rust 无疑就是和编辑器做斗争的,前期非常痛苦,还好现在的 IDE 非常智能。今天,我们来一起看这个非常实用的 Trait

大家好,我叫渔夫。91I28资讯网——每日最新资讯28at.com

Rust 如果你掌握了,开发速度也是惊人的,如还不够熟悉基本概念、特性、标准库等使用,那么写 Rust 无疑就是和编辑器做斗争的,前期非常痛苦,还好现在的 IDE 非常智能。91I28资讯网——每日最新资讯28at.com

今天,我们来一起看这个非常实用的 Trait。91I28资讯网——每日最新资讯28at.com

91I28资讯网——每日最新资讯28at.com

Drop

Drop 的作用就是释放实现者的实例拥有的资源,意思是当一个值的拥有者消失的时候,Rust 会丢弃这个值,通常用于资源清理。实际中,比如关闭文件、网络连接或释放内存等等场景。91I28资讯网——每日最新资讯28at.com

例子:91I28资讯网——每日最新资讯28at.com

struct FileResource {}impl Drop for FileResource {    fn drop(&mut self) {        println!("FileResource 被销毁,资源被释放。");    }}fn main() {    {        let resource = FileResource {};    }    println!("FileResource 已离开作用域。");}

这个例子中,定义一个简单的空结构体 FileResource,如果这个结构,不再被使用时应该执行释放掉的。91I28资讯网——每日最新资讯28at.com

然后,去实现 Drop 特质,这个方法将在结构体的实例中,不再使用时自动被调用。在 drop 方法中,实际我们会编写一些释放资源的相关代码。本实例,作为演示只打印了一条消息来表示 drop 方法被调用了。你也可以做类似如关闭文件、断开网络连接或释放分配的内存等相关逻辑。91I28资讯网——每日最新资讯28at.com

main 函数,在作用域中创建实例 resource  ,当这个作用域结束时,那么resource 会自动离开作用域,这时 Rust 自动调用,也可以理解为它的生命周期也就结束了,不可再被使用了。91I28资讯网——每日最新资讯28at.com

离开作用域后,Rust 将负责调用 drop 方法来执行清理工作。这也是 Rust 自动资源管理和“析构”行为,目的应该是防止资源泄漏及资源滥用情况。91I28资讯网——每日最新资讯28at.com

最后打印结果:91I28资讯网——每日最新资讯28at.com

FileResource 被销毁,资源被释放。FileResource 已离开作用域。

Clone

Clone 的作用适用在,允许一个对象的实例被显式地复制。当你的类型实现了 Clone 特质,那么就可以使用其 clone 方法来创建该类型的一个新实例,这个新实例与原始实例一模一样,但拥有不同的内存地址。91I28资讯网——每日最新资讯28at.com

使用场景也是非常广泛的,如:91I28资讯网——每日最新资讯28at.com

  • 避免共享可变引用
  • 保持原始数据不变
  • 传递数据给函数
  • 实现非原子或复杂类型的默认行为
  • 缓存或备份

使用 Clone 通常涉及深拷贝,对于大型或复杂的数据结构,性能内存使用情况,也需要考虑。91I28资讯网——每日最新资讯28at.com

例子:91I28资讯网——每日最新资讯28at.com

#[derive(Clone)]struct DemoStruct {    field: i32,}fn main() {    let original = DemoStruct { field: 23 };    let clone = original.clone(); // 相当于创建一个副本    println!("原始对象的 field: {}", original.field);    println!("克隆对象的 field: {}", clone.field);}执行结果:原始对象的 field: 23克隆对象的 field: 23

Copy

Copy 特质也是一样允许一个类型的值在赋值或作为函数参数传递时被隐式复制。这个通常适用于小型和简单的值类型,如整数和浮点数等。91I28资讯网——每日最新资讯28at.com

当允许一个类型成为 Copy ,值得注意的是,如果如果复制开销很大,也并适合进行这种隐式复制的。所以,对大型或复杂的数据结构,数据会被完整复制,导致性能问题。91I28资讯网——每日最新资讯28at.com

例子:91I28资讯网——每日最新资讯28at.com

#[derive(Clone, Copy)]struct DemoStruct {    field: i32,}fn main() {    let original = DemoStruct { field: 32 };    let copy = original;     println!("原始对象的 field: {}", original.field);    println!("复制对象的 field: {}", copy.field);}

在 main 函数中,创建了 DemoStruct 的一个实例 original,然后通过简单的赋值创建了一个名为 copy 的新实例。由于 DemoStruct 实现了 Copy 特质,original 会被自动复制给 copy,而不是移动(move)。91I28资讯网——每日最新资讯28at.com

其他的:91I28资讯网——每日最新资讯28at.com

  • Sized
  • Deref 与 DerekfMut
  • Default
  • AsRef和AsMut
  • Borrow 和 BorrowMut
  • From 和 Into
  • TryFrom 和 TryInto
  • ToOwned

本文链接:http://www.28at.com/showinfo-26-59676-0.htmlRust 拖慢开发速度,刚来实习生被折磨哭了

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 一个用于批量给图片增加水印的Python库

下一篇: 2023年最火前端项目凭什么是它?

标签:
  • 热门焦点
  • MIX Fold3包装盒泄露 新机本月登场

    小米的全新折叠屏旗舰MIX Fold3将于本月发布,近日该机的真机包装盒在网上泄露。从图上来看,新的MIX Fold3包装盒在外观设计方面延续了之前的方案,变化不大,这也是目前小米旗舰
  • 红魔电竞平板评测:大屏幕硬实力

    前言:三年的疫情因为要上网课的原因激活了平板市场,如今网课的时代已经过去,大家的生活都恢复到了正轨,这也就意味着,真正考验平板电脑生存的环境来了。也就是面对着这种残酷的
  • K8S | Service服务发现

    一、背景在微服务架构中,这里以开发环境「Dev」为基础来描述,在K8S集群中通常会开放:路由网关、注册中心、配置中心等相关服务,可以被集群外部访问;图片对于测试「Tes」环境或者
  • 十个简单但很有用的Python装饰器

    装饰器(Decorators)是Python中一种强大而灵活的功能,用于修改或增强函数或类的行为。装饰器本质上是一个函数,它接受另一个函数或类作为参数,并返回一个新的函数或类。它们通常用
  • 雅柏威士忌多款单品价格大跌,泥煤顶流也不香了?

    来源 | 烈酒商业观察编 | 肖海林今年以来,威士忌市场开始出现了降温迹象,越来越多不断暴涨的网红威士忌也开始悄然回归市场理性。近日,LVMH集团旗下苏格兰威士忌品牌雅柏(Ardbeg
  • 微博大门常打开,迎接海外画师漂洋东渡

    作者:互联网那些事“起猛了,我能看得懂日语了”。“为什么日本人说话我能听懂?”“中文不像中文,日语不像日语,但是我竟然看懂了”…&hell
  • 8月见!小米MIX Fold 3获得3C认证:支持67W快充

    这段时间以来,包括三星、一加、荣耀等等有不少品牌旗下的最新折叠屏旗舰都得到了不少爆料,而小米新一代折叠屏旗舰——小米MIX Fold 3此前也屡屡被传
  • 三星Galaxy Z Fold5今日亮相:厚度缩减但仍略显厚重

    据官方此前宣布,三星将于7月26日也就是今天在韩国首尔举办Unpacked活动,届时将带来带来包括Galaxy Buds 3、Galaxy Watch 6、Galaxy Tab S9、Galaxy
  • 三翼鸟智能家居亮相电博会,让用户体验更真实

    2021电博会在青岛国际会展中心开幕中,三翼鸟直接把“家”搬到了现场,成为了展会的一大看点。这也是三翼鸟继9月9日发布了行业首个一站式定制智慧家平台后的
Top