草庐IT

rust-0.8

全部标签

Rust 所有权

所有权规则Rust中的每一个值都有一个被称为其所有者(owner)的变量。值在任一时刻有且只有一个所有者。当所有者(变量)离开作用域,这个值将被丢弃。引用和Copy特性赋值过程:包括变量赋值,函数传参,函数返回如果类型实现了Copy特性(基本简单类型),传参过程相当于创建了一份新拷贝(克隆)未实现Copy特性,传参过程会转移所有权,原变量将无法继续使用(移动)使用引用,不获取值的所有权,但能访问变量。引用的规则在任意给定时间,要么只能有一个可变引用,要么只能有多个不可变引用。引用必须总是有效的。sliceslice是对一段连续元素的引用,所以没有所有权字符串字面值是slice引用什么是所有权?

Rust基础08-模式匹配

模式匹配控制流运算符——match:其允许一个值与一系列模式进行匹配,并执行匹配的模式对应的代码这些模式可以是字面值、变量名、通配符...绑定值的模式:匹配的分支可以绑定到被匹配对象的部分值因此,可以从enum变体中提取值//绑定值#[derive(Debug)]enumUsState{Alabama,Alaska,}enumCoin{Penny,Nickel,Dime,Quarter(UsState),}fnvalue_in_cents(coin:Coin)->u8{matchcoin{Coin::Penny=>{println!("Penny");1}Coin::Nickel=>5,Coi

Rust 所有权

所有权规则Rust中的每一个值都有一个被称为其所有者(owner)的变量。值在任一时刻有且只有一个所有者。当所有者(变量)离开作用域,这个值将被丢弃。引用和Copy特性赋值过程:包括变量赋值,函数传参,函数返回如果类型实现了Copy特性(基本简单类型),传参过程相当于创建了一份新拷贝(克隆)未实现Copy特性,传参过程会转移所有权,原变量将无法继续使用(移动)使用引用,不获取值的所有权,但能访问变量。引用的规则在任意给定时间,要么只能有一个可变引用,要么只能有多个不可变引用。引用必须总是有效的。sliceslice是对一段连续元素的引用,所以没有所有权字符串字面值是slice引用什么是所有权?

Rust基础08-模式匹配

模式匹配控制流运算符——match:其允许一个值与一系列模式进行匹配,并执行匹配的模式对应的代码这些模式可以是字面值、变量名、通配符...绑定值的模式:匹配的分支可以绑定到被匹配对象的部分值因此,可以从enum变体中提取值//绑定值#[derive(Debug)]enumUsState{Alabama,Alaska,}enumCoin{Penny,Nickel,Dime,Quarter(UsState),}fnvalue_in_cents(coin:Coin)->u8{matchcoin{Coin::Penny=>{println!("Penny");1}Coin::Nickel=>5,Coi

rust中的超时处理

自从tokio1.0发布以来,rust的异步开发总算大势已定。尽管没达到标准库的速度,依然挡不住大家的热情。看编程排行榜,增加2倍的开发者。既生瑜何生亮,感觉go就是小号的rust。 不废话了。背景:之前用go开发一个边缘网关的小东东,业余时间做了一大半。后来学了rust,打算练手,用rust重新写。在crate中央仓库里找来找去,选择了tokio-modbus。测试中发现用rtu的方式下,如果slave没有发回数据,程序将陷入无限等待中。也没找到如何设置这个超时。串口配置中倒是有个超时设置,不知道有啥用。在tokio-modbus的github上,找到有人提到这个问题。那个解决问题的方式实在

rust中的超时处理

自从tokio1.0发布以来,rust的异步开发总算大势已定。尽管没达到标准库的速度,依然挡不住大家的热情。看编程排行榜,增加2倍的开发者。既生瑜何生亮,感觉go就是小号的rust。 不废话了。背景:之前用go开发一个边缘网关的小东东,业余时间做了一大半。后来学了rust,打算练手,用rust重新写。在crate中央仓库里找来找去,选择了tokio-modbus。测试中发现用rtu的方式下,如果slave没有发回数据,程序将陷入无限等待中。也没找到如何设置这个超时。串口配置中倒是有个超时设置,不知道有啥用。在tokio-modbus的github上,找到有人提到这个问题。那个解决问题的方式实在

最强肉坦:RUST多线程

Rust最近非常火,作为coder要早学早享受。本篇作为该博客第一篇学习Rust语言的文章,将通过一个在其他语言都比较常见的例子作为线索,引出Rust的一些重要理念或者说特性。这些特性都是令人心驰神往的,相信我,当你读到最后,一定会有同样的感觉(除非你是天选之子,从未受过语言的苦^^)。本文题目之所以使用“最强肉坦”来形容Rust,就是为了凸显该语言的一种防御能力,是让人很放心的存在。关键字:Rust,变量,所有权,不可变性,无畏并发,闭包,多线程,智能指针问题:多线程修改共享变量这是几乎每种编程语言都会遇到的实现场景,通过对比Java和Rust的实现与运行表现,我们可以清晰地看出Rust的不

最强肉坦:RUST多线程

Rust最近非常火,作为coder要早学早享受。本篇作为该博客第一篇学习Rust语言的文章,将通过一个在其他语言都比较常见的例子作为线索,引出Rust的一些重要理念或者说特性。这些特性都是令人心驰神往的,相信我,当你读到最后,一定会有同样的感觉(除非你是天选之子,从未受过语言的苦^^)。本文题目之所以使用“最强肉坦”来形容Rust,就是为了凸显该语言的一种防御能力,是让人很放心的存在。关键字:Rust,变量,所有权,不可变性,无畏并发,闭包,多线程,智能指针问题:多线程修改共享变量这是几乎每种编程语言都会遇到的实现场景,通过对比Java和Rust的实现与运行表现,我们可以清晰地看出Rust的不

rust库学习-env_logger

介绍env_logger配合log库使用,log是rust日志库的外观库,给日志库提供抽象的记录接口,log使用宏,如info!()trace!()记录日志假如需要替换当前使用的日志库,只需将初始化相关的代码和toml文件修改env_logger通过配置环境变量中RUST_LOG实现日志过滤env_logger库不合适要写入文件的日志,不能直接输出到文件和日志轮换(rotating),默认输出到stderr,可以切换stdout,还有自定义输出(Pipe(Box))实践Cargo.toml[dependencies]log="0.4"env_logger="0.9"main.rsusestd:

rust库学习-env_logger

介绍env_logger配合log库使用,log是rust日志库的外观库,给日志库提供抽象的记录接口,log使用宏,如info!()trace!()记录日志假如需要替换当前使用的日志库,只需将初始化相关的代码和toml文件修改env_logger通过配置环境变量中RUST_LOG实现日志过滤env_logger库不合适要写入文件的日志,不能直接输出到文件和日志轮换(rotating),默认输出到stderr,可以切换stdout,还有自定义输出(Pipe(Box))实践Cargo.toml[dependencies]log="0.4"env_logger="0.9"main.rsusestd: