
rust
文章平均质量分 75
Never-SayNever
这个作者很懒,什么都没留下…
展开
-
Rust SmartPointer
Rust的所有权(ownership)和智能指针(smart pointers)是它的两个重要特征。理解它们是掌握Rust特性和编写Rust程序的基础。理解所有权与智能指针的工作方式,可以让我们编写无bug,高效,优雅的Rust代码。它们是Rust的核心概念,是学习和掌握Rust的基石。Rust禁止在没有所有权的情况下使用值,这可以有效地防止“双乘出错”等问题。智能指针是封装了原始指针的结构体,可以轻松实现自动内存管理。:用于“钉住”数据的智能指针,防止被move。8. Cow:拥有或借用值的智能指针。原创 2023-05-21 17:23:33 · 674 阅读 · 0 评论 -
Why Rust Android
但是,初始化为零并不总是安全的,特别是对于返回值之类的内容,这可能成为错误处理的新来源。是的,Rust 通过静态分析可以在编译期就识别和消除数据竞争,这确保了其程序在多线程环境下的并发安全,这也是Rust被称为"无畏并发"的原因之一。所以,通过编译器严密的检查,Rust可以在编写时就识别和消除各种内存错误,这确保了其程序在运行时的内存安全,这是其最重要的优点之一。总之,Rust的所有权系统、借用检查和RAII可以在编译期和运行时确保内存安全和数据竞争的不存在,这使其成为一门真正的无畏并发语言。原创 2023-05-21 17:22:09 · 633 阅读 · 0 评论 -
rust vs c++
【代码】rusr vs c++翻译 2023-02-20 11:07:12 · 190 阅读 · 0 评论 -
rust lifetime
Rust 生命周期首先每个引用都有生命周期,也就是引用保持有效的作用域一个引用的作用域从声明的地方开始一直持续到最后一次使用为止let a=String::from("a");let b=&a;//b的诞生 ,后续没有在使用b,所以b死亡在借用者生命期间,所有者必须是活的,不然就会产生悬垂引用,幸运的是我们不用关注它,交给编译器来提示,编译器通过生命周期来检查大部分时候生命周期是隐含并可以推断的,但有些情况就无法推断了,需要程序员自己指出fn longest(x: &Stri转载 2022-04-17 16:32:36 · 174 阅读 · 0 评论 -
rust send sync 理解
关于Sync和Send的含义sync 想要一个类型的同一个变量可以在不同线程同时拥有它的不可变引用,则必须实现Syncsend 想要一个类型可以在线程之间移动,则必须实现Sendsend 表示跨线程move,sync表示跨线程share data,两者基本就是ownership和borrow的区别如果一个类型可以安全地传递给另一个线程,这个类型是 Send如果一个类型可以安全地被多个线程共享 (也就是 &T 是 Send),这个类型是 SyncSend 和 Sync 是转载 2022-04-17 16:23:13 · 1252 阅读 · 1 评论 -
协程:快速地实现高并发服务
零拷贝通过减少上下文切换次数,提升了文件传输的性能。事实上高并发服务也是通过降低切换成本实现的。如果你需要访问多个服务来完成一个请求的处理,比如实现文件上传功能时,首先访问 Redis 缓存,验证用户是否登陆,再接收 HTTP 消息中的 body 并保存在磁盘上,最后把文件路径等信息写入 MySQL 数据库中,你会怎么做?用阻塞API写同步代码最简单,但一个线程同一时间只能处理一个请求,有限的线程数导致无法实现万级别的并发连接,过多的线程切换也抢走了 CPU 的时间,从而降低了每秒能够处理的...转载 2022-04-17 14:27:48 · 724 阅读 · 0 评论 -
tokio mpsc channel
预期行为是:要求用户随机输入(q退出)将相同的输入打印到标准输出将std::io::stdin()替换为tokio::io::stdin()还需要将标准库BufReader替换为tokio的实现,该实现封装了R: AsyncRead而不是R: Read。为了防止输入任务和输出任务之间的交叉写入,可以使用一个响应器通道,在输出已打印时向输入任务发送信号。use std::error::Error;use tokio::io::{AsyncBufReadExt, AsyncWriteExt};us原创 2022-04-14 15:01:58 · 537 阅读 · 0 评论 -
RUST总结
RUST总结RUST类型Rust内置的原生类型 (primitive types) 有以下几类:布尔类型:有两个值 true 和 false 。字符类型:表示单个Unicode字符,存储为4个字节。数值类型:分为有符号整数 ( i8 , i16 , i32 , i64 , isize(自适应类型) )、无符号整数 ( u8 , u16 , u32 , u64 , usize ) 以及...原创 2019-07-17 13:19:03 · 1859 阅读 · 1 评论 -
Rust async/await && Tokio
Rust的async/await特性是通过一种称为协作式调度(cooperative scheduling)的机制来实现的,这对于编写异步Rust代码的人来说有一些重要的影响。这篇博文的目标读者是异步Rust的新用户。我将使用Tokio运行时作为示例,但这里提出的观点适用于任何异步运行时。如果你只从这篇文章中记住一件事,那应该是:异步代码不应该长时间不到达.await。(注:指的是运行中)Blocking vs. non-blocking code编写一个可以同时处理许多事情的..翻译 2022-04-14 14:47:02 · 1202 阅读 · 0 评论 -
Rust tokio使用
一、库引入为了学习tokio库的全部特性,cargo.toml的配置如下:tokio = { version = "0.3", features = ["full"] }二、Task使用示例1.最简单的示例,验证tokio库导入成功,并能够成功运行。async fn main() { println!("Hello, world!");}2.tokio任务阻塞+await示例use tokio::time::Duration; #[tokio::main] //此处引入tok转载 2022-03-16 23:11:44 · 5106 阅读 · 2 评论