随笔分类 - rust
摘要:高级特性 不安全rust 高级Trait 高级类型 高级函数和闭包 宏 不安全rust 隐藏这第二个语言,其未强制内存安全保证:Unsafe rust(不安全的rust);其和普通rust一样,但提供了额外的“超能力”。 unsafe rust存在的原因: 静态分析是保守的,使用unsafe rus
阅读全文
摘要:模式匹配 模式:是rust中的一种特殊语法,用于匹配复杂和简单类型的结构。 将模式与匹配表达式和其他结构结合使用,可更好控制程序控制流。 模式由以下元素(及组合)组成: 字面值 解构的数组、enum、struct和tuple 变量 通配符 占位符 模式匹配的场景 match的Arm(分支) 格式:
阅读全文
摘要:面向对象编程特性 面向对象的特性 封装 rust默认情况下是私有的,使用pub关键字让方法和成员公开,访问也通过方法来实现。 继承 使对象可沿用另外一些对象的数据和行为。不过rust没有继承的概念,但rust通过默认trait方法来进行代码共享,也可使用同名方法覆盖原有实现。 多态 rust使用泛型
阅读全文
摘要:无畏并发 Concurrent:程序不同部分之间独立执行; Parallel:程序不同部分同时运行。 rust无畏并发:允许编写没有细微Bug的代码。并在不引入新Bug的情况下易于重构。这里所说的“并发”泛指concurrent和parallel。 使用线程同时运行代码 1:1模型:实现线程的方式:
阅读全文
摘要:智能指针 智能指针是一种数据结构,其行为与指针类似,有额外的元数据和功能。 引用计数(reference counting)智能指针类型,通过记录所有者的数量,使一份数据被多个所有者同时持有,并在没任何所有者时自动清理数据。 其中引用只借用数据,而智能指针常拥有所指向的数据。如智能指针String
阅读全文
摘要:rust_cargo、crates.io 通过release profile自定义构建 release profile(发布配置):是预定义的,可自定义,可使用不用的配置,对代码编译拥有更多的控制。 每个profile的配置都独立于其它的profile。 cargo主要的两个profile: dev
阅读全文
摘要:迭代器 什么是迭代器:迭代器模式是对一系列项执行某些任务,迭代器负责遍历每个项,确定序列(遍历)何时完成。 rust的迭代器: layzy(懒惰的):除非调用消费迭代器的方法,否则迭代器本身没任何效果。 fn main() { let v1 = vec![1, 2, 3]; let v1_iter
阅读全文
摘要:闭包 函数式编程的风格特点: 函数作为参数 函数作为其他函数的返回值 函数赋值给变量,之后再执行 rust语言也引入了很多函数式编程的语法特性。 闭包的概念 闭包(closure):可捕获其所在环境的匿名函数。 是匿名函数 能够保存为变量、作为参数和返回值 可在一个地方创建闭包,在另一个上下文中调用
阅读全文
摘要:练习编码 实现一个简单的grep工具。 建立项目: > cargo new minigrep Created binary (application) `minigrep` package 接收命令行参数 use std::env; fn main() { // args返回一迭代器,collect
阅读全文
摘要:编写自动化测试 编写和运行测试 一个测试就是一个函数,用于验证非测试代码的功能是否和预期一致。 测试函数体通常执行3个操作(3A): Arrange:准备数据/状态 Act:运行被测代码 Assert:断言结果 测试函数: 测试函数需要使用test属性(attribute)进行标注,Attribut
阅读全文
摘要:生命周期 生命周期应是rust语言最与众不同的概念。 rust的每个引用都有自己的生命周期。 生命周期:引用保持有效的作用域。 大多数情况:生命周期是隐式的、可被推断的。 当引用的生命周期可能以不同的方式相互关联时,需要手动标注生命周期。 生命周期存在的目的:避免悬垂引用(dangling refe
阅读全文
摘要:Trait Trait告诉Rust编译器某些类型具有哪些并可与其它类型共享的功能。 Trait:抽象的定义共享行为。 Trait bounds(约束):泛型类型参数指定为实现了特定行为的类型。 Trait与其它语言的接口(interface)类似,但有些区别。 定义一个Trait Trait的定义:
阅读全文
摘要:提取函数消除重复代码 fn get_largest(list: &[i32]) -> i32 { let mut max_num = list[0]; for &i in list { if i > max_num { max_num = i; } } max_num } fn main() { l
阅读全文
摘要:错误处理 不可恢复的错误与panic!宏 rust语言的错误处理: rust语言具有较高的可靠性,有完备的错误处理机制,大部分情况下,能在编译是提示错误,并处理完错误。 rust没有类似异常处理的机制 错误的分类: 可恢复错误:使用Result<T, E>机制,如文件未找到,可再次尝试。 不可恢复:
阅读全文
摘要:HashMap<K, V> 键值对的形式存储数据,一个键(key)对应一个值(value)。适用于通过K(任何类型)来搜索数据,而不是通过下标索引的场景。 Hash函数:决定如何在内存中存放K和V。 创建HashMap new函数创建 创建空HashMap:new()函数。 添加数据:insert(
阅读全文
摘要:rust的字符串 字符串简介 字符串:UTF-8格式,byte的集合,提供了一些解析byte为文本的方法。 rust的核心语言层面,只有一个字符串类型:字符串切片str(或&str)。 字符串切片:对存储在其他地方、UTF-8编码的字符串的引用 其中字符串字面值,存储在二进制文件中,也是字符串切片。
阅读全文
摘要:常用集合——vector 集合的数据存放在堆里,无需在编译时确定大小。 使用vector vector可存放多个值,Vec<T>叫做vector。 由标准库提供 可存储多个值 只能存储相同类型的数据 值在内存中连续存放 1)创建vector: 使用Vec::new函数 let v: Vec<i32>
阅读全文
摘要:use关键字 可用use关键字将 路径导入到作用域内,导入的内容仍然遵循私有性原则。可使用相对路径和绝对路径的方式。 mod modu1 { pub mod modu2 { pub fn test_func1() {} fn test_private() {} } } use crate::modu
阅读全文
摘要:rust的模块系统 代码组织包括:哪些细节对外暴露,哪些细节私有,作用域哪些名称有效等。 rust的模块系统: 最上层 Package(包):Cargo的特性,构建、测试、共享crate。 第二层 Crate(单元包):一个模块树,可产生一个Library或可执行文件。 第三层Module(模块)、
阅读全文
摘要:match 强大的控制流运算符。 允许一个值和一系列模式进行匹配,并执行匹配的模式对于的代码 模式可为字面值、变量名、通配符... 比如下边例子用于匹配返回具体值 enum Color { Black, White, Red, } fn value_Color(color: Color) -> u3
阅读全文