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

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

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

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

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

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

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

Drop

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

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

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

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

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

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

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

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

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

Clone

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

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

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

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

例子:hpo28资讯网——每日最新资讯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 特质也是一样允许一个类型的值在赋值或作为函数参数传递时被隐式复制。这个通常适用于小型和简单的值类型,如整数和浮点数等。hpo28资讯网——每日最新资讯28at.com

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

例子:hpo28资讯网——每日最新资讯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)。hpo28资讯网——每日最新资讯28at.com

其他的:hpo28资讯网——每日最新资讯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年最火前端项目凭什么是它?

标签:
  • 热门焦点
  • Mate60手机壳曝光 致敬自己的经典设计

    8月3日消息,今天下午博主数码闲聊站带来了华为Mate60的第三方手机壳图,可以让我们在真机发布之前看看这款华为全新旗舰的大致轮廓。从曝光的图片看,Mate 60背后摄像头面积依然
  • vivo TWS Air开箱体验:真轻 臻好听

    在vivo S15系列新机的发布会上,vivo的最新款真无线蓝牙耳机vivo TWS Air也一同发布,本次就这款耳机新品给大家带来一个简单的分享。外包装盒上,vivo TWS Air保持了vivo自家产
  • 一文掌握 Golang 模糊测试(Fuzz Testing)

    模糊测试(Fuzz Testing)模糊测试(Fuzz Testing)是通过向目标系统提供非预期的输入并监视异常结果来发现软件漏洞的方法。可以用来发现应用程序、操作系统和网络协议等中的漏洞或
  • 使用Webdriver-manager解决浏览器与驱动不匹配所带来自动化无法执行的问题

    1、前言在我们使用 Selenium 进行 UI 自动化测试时,常常会因为浏览器驱动与浏览器版本不匹配,而导致自动化测试无法执行,需要手动去下载对应的驱动版本,并替换原有的驱动,可能还
  • 三分钟白话RocketMQ系列—— 如何发送消息

    我们知道RocketMQ主要分为消息 生产、存储(消息堆积)、消费 三大块领域。那接下来,我们白话一下,RocketMQ是如何发送消息的,揭秘消息生产全过程。注意,如果白话中不小心提到相关代
  • 为什么你不应该使用Div作为可点击元素

    按钮是为任何网络应用程序提供交互性的最常见方式。但我们经常倾向于使用其他HTML元素,如 div span 等作为 clickable 元素。但通过这样做,我们错过了许多内置浏览器的功能。
  • 新电商三兄弟,“抖快红”成团!

    来源:价值研究所作 者:Hernanderz 随着内容电商的概念兴起,抖音、快手、小红书组成的“新电商三兄弟”成为业内一股不可忽视的势力,给阿里、京东、拼多多带去了巨大压
  • 东方甄选单飞:有些鸟注定是关不住的

    作者:彭宽鸿来源:华尔街科技眼‍‍‍‍‍‍‍‍‍‍东方甄选创始人俞敏洪带队的“7天甘肃行”直播活动已在近日顺利收官。成立后一
  • 微软发布Windows 11新版 引入全新任务栏状态

    近日,微软发布了Windows 11新版,而Build 22563更新主要引入了几周前曝光的平板模式任务栏等,系统更流畅了。更新中,Windows 11加入了专门针对平板优化的任务栏
Top