
rust
文章平均质量分 85
喜欢打篮球的普通人
这个作者很懒,什么都没留下…
展开
-
对rust的全局变量使用drop方法
全局变量的生命周期应该和main的程序生命周期是一样长的,所以可以在main中创建一个CleanUp局部对象,为CleanUp()实现Drop特征,在Drop()特征中,完成释放全局变量的资源的功能。Rust 的静态变量不会在程序退出时自动调用 Drop,因为它们的生命周期与进程绑定。原创 2024-12-13 11:58:36 · 458 阅读 · 0 评论 -
rust构建web服务器
【代码】rust构建web服务器。原创 2024-11-13 15:45:38 · 670 阅读 · 0 评论 -
rust高级特征
关联类型(associated types)是一个将类型占位符与 trait 相关联的方式,这样 trait 的方法签名中就可以使用这些占位符类型。trait 的实现者会针对特定的实现在这个类型的位置指定相应的具体类型。如此可以定义一个使用多种类型的 trait,直到实现此 trait 时都无需知道这些类型具体是什么。struct Dog;//调用实现Animal trait的baby_name函数println!编译。原创 2024-11-13 07:00:31 · 1105 阅读 · 0 评论 -
rust模式和匹配
if let表达式缺点:编译期无法强制保证覆盖所有的情况。给变量增加下划线前缀和使用_是不同的。会扩展为所需要的值的数量。原创 2024-11-12 18:01:31 · 577 阅读 · 0 评论 -
Rust面向对象特性
在 Rust 中,静态派遣(Static Dispatch)和动态派遣(Dynamic Dispatch)是两种不同的调用方法,用于处理类型不确定的情况,尤其是在使用泛型和 trait 时。这意味着方法不会获取对象的所有权,它只会借用 self,允许你在方法内部使用对象,但调用方法后,self 仍然可用。通过这种方式,Screen 的 components 不再需要使用 Box,而是直接使用泛型参数 T,这样可以在编译时确定具体类型,避免了动态分发的开销。原创 2024-11-12 17:54:08 · 1086 阅读 · 0 评论 -
rust并发
rust默认仅支持一对一线程,也就是说操作系统线程。可以引入crate包来使用绿色线程。只支持多个生产者和一个消费者。原创 2024-11-12 14:54:17 · 530 阅读 · 0 评论 -
rust智能指针
特性引用 (&T 和 &mut T)智能指针(如 Box、Rc)所有权引用没有所有权,只是借用数据智能指针拥有数据的所有权内存管理不负责内存管理负责内存管理,通常有自动销毁机制生命周期有明确的生命周期生命周期取决于智能指针本身数据存储位置引用通常指向栈或堆上的数据智能指针通常分配堆上的内存操作只提供对数据的访问提供更多的操作功能,如引用计数、自动清理等线程安全不保证线程安全一些智能指针(如 Arc)是线程安全的MyBox(x)原创 2024-11-12 11:11:54 · 1252 阅读 · 0 评论 -
Cargo工作空间
在$HOME/.cargo/bin目录下定制一些cargo-xyc的命令,可以使用cargo xyc的命令方式去运行。addder项目中与add-one项目中引入的第三包是一样的,那么此包只会在workspace空间中存在一次。如果adder项目空间中如果想引入同样的依赖包,只需要在对应的Cargo.toml中添加同样的配置就行;只需要在add-one中的Cargo.toml文件中引入外部依赖包,那么项目空间只会下载一次;工作空间的包不会自动依赖,需要在add项目中Cargo.toml中显式指定。原创 2024-11-12 10:15:57 · 1125 阅读 · 0 评论 -
发布rust crate
opt-level 设置控制 Rust 会对代码进行何种程度的优化。这个配置的值从 0 到 3。越高的优化级别需要更多的时间编译,所以如果你在进行开发并经常编译,可能会希望在牺牲一些代码性能的情况下编译得快一些。dev一般用户本地测试,release用于发布。使用cargo login进行登录。原创 2024-11-11 18:07:59 · 567 阅读 · 0 评论 -
编写一个命令行程序
/ 解析配置println!});// 执行任务,捕获错误并打印文件名println!// run 函数返回 Result 类型// 尝试读取文件内容,并在错误时返回带有文件名的错误信息})?;// 打印文件内容println!Ok(())// 创建一个自定义错误类型实现 Error 和 Displaywrite!| ^^^^^原创 2024-11-11 11:02:23 · 330 阅读 · 0 评论 -
测试Rust代码
result。原创 2024-11-10 14:49:11 · 429 阅读 · 0 评论 -
Rust项目结构
/ 引入父模块// 通过重命名解决Ok(())Ok(())原创 2024-11-05 14:58:37 · 662 阅读 · 0 评论 -
Rust常用数据结构教程 Map
HashMap类型储存了一个键类型K对应一个值类型V的映射。·一般结构体: #[derive(Debug, PartialEq, Hash, Eq)]·因为要满足哈希函数,所以HashMap对键有特殊要求。·当你查找时,有序可以提供你的性能 (比如二分查找法)·HashMap的数据和Vec一样在heap上。·因为需要对键值排序所以需要Key实现。·键值对数据又称字典数据类型。·存储数据为键值对类型。内部基于BTree创建。·当你需要有序map时。·注意:有序是有代价的。原创 2024-11-05 13:05:21 · 733 阅读 · 0 评论 -
Rust常用数据结构教程 序列
如果您希望对分配多少内存以及何时分配内存有非常细粒度的控制,那么链表是一个不错的选择。可变数组(vector)数组存储在heap上,在运行时(runtime)可以增加或减少数组。与Vec 类似,与Vec 不同的是,它对容器的两端进行 移除和插入。·首选Vec:当你不知道用什么的时候,试试Vec,性能强悍有保证。Vec的buf是存储在heap上的,其他存储在栈上。VecDeque的两端插入、删除都是O(1)级别的。·当你想要一个长度实时变化的数据存储单元时。·当你希望内存中各个元素的存储地址是连续时。原创 2024-11-05 12:32:09 · 617 阅读 · 0 评论 -
Rust常用数据结构教程 String与&str,元组和数组
String具有所有权,而&str只是切片引用·String的数据必须存储在heap上,而&str要看引用所代指可以在stack和data section上,也可以在heap上。原创 2024-11-05 09:38:59 · 807 阅读 · 0 评论 -
Rust常用数据结构教程 Rust中的数据结构
复合数据类型Compound types复合类型是通过组合基础类型,用来表达更加复杂的数据结构,即使用其他类型定义的类型,因而复合类型又称之为派生类型。原创 2024-11-05 09:24:42 · 346 阅读 · 0 评论 -
2024 Rust现代实用教程 closures闭包
闭包的语法相对简洁灵活,同时也具有强大的功能。闭包在 Rust 中被广泛用于函数式编程、并发编程以及简化代码等方面。2.结构体会声明一个cal丨function,而闭包就是函数,cal丨function会包含闭包的所有代码。你可以将闭包分配给一个变量,然后使用该变量,就像它是一个函数名,来调用闭包。Fn继承至FnMut,FnMut继承至FnOnce。3.结构体会生产一些属性去捕获闭包外的参数。闭包是一种可以捕获其环境中变量的匿名函数。1.Rust编译器将闭包放入一个结构体。2.可变引用FnMut。原创 2024-11-04 11:18:30 · 660 阅读 · 0 评论 -
2024 Rust现代实用教程Iterator迭代器
/ 入栈// 出栈// 不可变引用// 返回可变引用// 所有权转移!!println!println!("{:?*item *= 2;println!("{:?println!// println!("{:?编译及运行...| ^^^Item 1Item 2Item 3246。原创 2024-11-03 13:29:22 · 1254 阅读 · 0 评论 -
2024 Rust现代实用教程 Trait特质
在Rust中,特质(Traits)是一种定义方法签名的机制任何类型都可以实现特质,只要它们提供了特质中定义的所有方法。这使得你可以为不同类型提供相同的行为。特点:Example:编译并运行二、Trait Object与Box1.Trait Object在运行时动态分配的对象2可以在集合中混入不同的类型对象3.有一些小小的性能损耗dyn 是 Rust中的关键字,用于声明特质对象(trait object)的类型。特质对象是实现了特定特质(trait)的类型的实例,但其具体类型在编译时是未知的。因此,为原创 2024-11-01 16:25:32 · 634 阅读 · 0 评论 -
2024 Rust现代实用教程Generic泛型
在Rust中,泛型也可以用于函数,使得函数能够处理多种类型的参数,提高代码的重用性和灵活性。泛型是一种编程语言的特性,它允许在代码中使用参数化类型,以便在不同地方使用。相同的代码逻辑处理多种数据类型,而无需为每种类型编写单独的代码!1.泛型定义结构体\枚举。2.泛型与结构体中的方法。1.提高代码的重用性。2.提高代码的可读性。3.提高代码的抽象度。原创 2024-11-01 15:48:58 · 628 阅读 · 0 评论 -
2024 Rust现代实用教程 Borrowing借用 && Lifetime生命周期
在任何给定的时间,要么有一个可变引用,要么有多个不可变引用,但不能同时存在可变引用和不可变引用。在任何给定的时间,只能有一个可变引用来访问数据。3.引用的生命周期必须在被引用的数据有效的时间范围内。这防止了悬垂引用,即引用的数据已经被销毁,但引用仍然存在。可以同时存在多个不可变引用,因为不可变引用不会修改数据,不会影响到其他引用。但不可变引用与可变引用之间是互斥的。关于“悬垂引用”的概念是指,引用指向的数据在代码结束后被释放,但引用仍然存在。在结构体中的引用需要标注生命周期。借用(Borrowing)原创 2024-11-01 15:19:39 · 1055 阅读 · 0 评论 -
2024 Rust现代实用教程 Error错误处理
1.定义错误类型结构体:创建一个结构体来表示你的错误类型,通常包含一些字段来描述错误的详细信息。2.实现 std::fmt::Display trait:实现这个 trait以定义如何展示错误信息。这是为了使错误能够以人类可读的方式打印出来。3.实现 std::error::Error trait:实现这个 trait以满足Rust的错误处理机制的要求。write!// &String String&自动转=> &str 字符串字面量})// Ok(())原创 2024-11-01 11:53:04 · 756 阅读 · 0 评论 -
2024 Rust现代实用教程 流程控制与函数
函数的代码本身通常是存储在可执行文件的代码段,而在调用时函数会在栈,开辟一个新的stack frame(栈空间),用于存储函数的局部变量、参数和返回地址等信息,而当函数结束后会释放该空间。而当传入non-Copy value(Vec、String等)传入函数时,实参会转移value的所有权给形参,实参会失去value的所有权而在函数结束时,value的所有权会释放。1.函数的定义:在Rust中,你可以使用fn关键字声明和定义函数,而main是程序的入口点是一种特殊的函数。原创 2024-10-31 11:59:22 · 591 阅读 · 4 评论 -
2024 Rust现代实用教程:Ownership与结构体、枚举
这种全局性的停止会导致一些潜在的问题,特别是对于需要低延迟和高性能的应用程序。需要注意的是,并非所有的垃圾回收算法都需要"stop the world’",有一些现代的垃圾回收器采用了一些技术来减小全局停顿的影响,比如并发垃圾回收和增量垃圾回收。"Stop the world"是与垃圾回收(Garbage Col lection)相关的术语,它指的是在进行垃圾回收时系统暂停程序的运行。Copy:Copy是在CIone的基础建立的marker trait(Rust中最类似继承的关系)原创 2024-10-28 13:59:54 · 460 阅读 · 0 评论 -
2024 Rust现代实用教程:变量与常见数据类型
3.变量名蛇形命名法(Snake Case),而枚举和结构体命名使用帕斯卡命名法(Pasca|Case)4.强制类型转换Casting a Value to a Different Type。5.打印变量({}与{:?}需要实现特质之后章节会介绍,基础类型默认实现)1.在Rust中,使用Iet关键字来声明变量。原创 2024-10-26 14:42:19 · 692 阅读 · 0 评论 -
2024 Rust现代实用教程:1.3获取rust的库国内源以及windows下的操作
解决办法:▶ mv /home/wangji/.cargo/config /home/wangji/.cargo/config.toml。拷贝crate中的ducument的代码进行测试。安装到[dev-dependencies]windows可选Rust的目标平台标识。黏贴至Cargo.toml。设置国内源的文件路径不同。安装特定版本的rand。添加开发时用的依赖库。添加构建时用的依赖库。安装最新的rand包。删除最新的rand包。原创 2024-10-26 14:36:17 · 1481 阅读 · 0 评论 -
Rust教程
2024 Rust现代实用教程:1.1Rust简介与安装更新––2024 Rust现代实用教程:1.2编译器与包管理工具以及开发环境–––––––––––原创 2024-10-26 08:08:07 · 547 阅读 · 0 评论 -
2024 Rust现代实用教程:1.2编译器与包管理工具以及开发环境搭建
构建项目(生成二进制可执行文件或库文件)隐式地使用rustc进行编译。·编译生成二进制文件。原创 2024-10-26 08:05:47 · 996 阅读 · 0 评论 -
2024 Rust现代实用教程:1.1Rust简介与安装更新
输入cargo ,按两下 tab键,进行命令补全提示,可以看到命令已经出来了。1 使用默认配置,2 使用自定义配置,3 取消安装。Windows 的 Linux 子系统(WSL)好了,rust环境已经安装成功了!这里我们选择默认配置输入 1。配置cargo的环境变量。原创 2024-10-21 18:08:10 · 4246 阅读 · 0 评论 -
vscode中调试rust程序
(3)配置vscode编译:打开vscode,终端->运行任务->配置任务->使用模板生成task.json文件->others,会在工程目录的.vscode中生成tasks.json。也会在工程目录下的.vscode中生成一个launch.json文件。环境:在WSL(ubuntu20.04)中使用vscode。(2)在vscode中安装rust-analyzer。(4)配置vscode调试:点击vscode这里。(1)在WSL 中安装rust,cargo。原创 2023-04-12 10:18:04 · 3599 阅读 · 0 评论