张汉东的 Rust 实战课
张汉东
《Rust 编程之道》作者
11983 人已学习
新⼈⾸单¥68
课程目录
已完结/共 174 讲
第一章:Rust语言基础 (32讲)
时长 11:04
时长 04:20
第二章:Rust语言核心概念 (56讲)
第三章:Rust异步编程基础 (52讲)
第四章:构建自己的异步Web框架 (34讲)
张汉东的 Rust 实战课
登录|注册
留言
11
收藏
沉浸
阅读
分享
手机端
回顶部
当前播放: 08 | 语法面面观:面向表达式(三)
00:00 / 00:00
高清
  • 高清
1.0x
  • 2.0x
  • 1.5x
  • 1.25x
  • 1.0x
  • 0.75x
  • 0.5x
网页全屏
全屏
00:00
付费课程,可试看
01 | 课程介绍
02 | 内容综述
学习方法推荐与课程组织逻辑
03 | Rust语言学习观
04 | Rust语言概览
05 | 语法面面观:词法结构
06 | 语法面面观:面向表达式(一)
07 | 语法面面观:面向表达式(二)
08 | 语法面面观:面向表达式(三)
09 | 语法面面观:数据类型 (一)
10 | 语法面面观:数据类型 (二)
11 | 语法面面观:函数与闭包(一)
12 | 语法面面观:函数与闭包(二)
13 | 语法面面观:函数与闭包(三)
14 | 语法面面观:模式匹配
15 | 语法面面观:智能指针(一)
16 | 语法面面观:智能指针(二)
17 | 语法面面观:字符与字符串(一)
18 | 语法面面观:字符与字符串(二)
19 | 语法面面观:集合容器(一)
20 | 语法面面观:集合容器(二)
21 | 语法面面观:迭代器(一)
22 | 语法面面观:迭代器(二)
23 | Rust语法面面观:模块
24 | 语法面面观:Cargo包管理器(一)
25 | 语法面面观:Cargo包管理器(二)
26 | 语法面面观:实际项目的组织结构(一)
27 | 语法面面观:实际项目的组织结构(二)
28 | 语法面面观:定义自己的Crate(一)
29 | 语法面面观:定义自己的Crate(二)
30 | 语法面面观:定义自己的Crate(三)
31 | 作业&第二章预告
32 | 本章内容介绍:Rust语言架构
33 | 所有权:内存管理基础知识
34 | 所有权:安全管理之内存安全
35 | 所有权:Copy语义和Copy trait
36 | 所有权:深入理解Copy行为
37 | 所有权:深入理解Move语义
38 | 所有权:Move与析构
39 | 借用检查: 完全理解Scope和NLL
40 | 借用检查: 深入理解生命周期和生命周期参数
41 | 借用检查: 深入理解生命周期参数Early bound
42 | 借用检查:深入理解生命周期参数Tvs&T
43 | 借用检查: 深入理解生命周期参数: trait对象的生命周期参数
44 | 借用检查: 深入理解生命周期参数:高阶生命周期(一)
45 | 借用检查: 深入理解生命周期参数:高阶生命周期(二)
46 | 借用检查: 深入理解生命周期参数:高阶生命周期(三)
47 | 线程与并发:理解线程与并发
48 | 线程与并发:线程间安全共享数据
49 | 线程与并发:构建「无悔」并发系统(一)
50 | 线程与并发:构建「无悔」并发系统(二)
51 | 线程与并发:构建「无悔」并发系统(三)
52 | 线程与并发:构建「无悔」并发系统(四)
53 | 线程与并发:无锁并发(一)
54 | 线程与并发:无锁并发(二)
55 | 线程与并发:无锁并发(三)
56 | trait与泛型:trait静态分发
57 | trait与泛型:认识trait对象
58 | trait与泛型:泛型和trait实现模板方法
59 | trait与泛型:trait对象本质
60 | trait与泛型:对象安全本质
61 | trait与泛型:利用Enum代替trait对象
62 | trait与泛型:trait覆盖实现的一个解决方案
63 | trait与泛型:trait对象与Sized
64 | trait与泛型:trait对象与Box Self
65 | 编程范式:Rust语言编程范式讨论(一)
66 | 编程范式:Rust语言编程范式讨论(二)
67 | Rust错误处理概要
68 | Rust错误处理:Option
69 | Rust错误处理:Result(一)
70 | Rust错误处理:Result(二)
71 | Rust错误处理:try
72 | Rust错误处理:Panic
73 | Rust元编程之反射
74 | Rust元编程之反射的两种应用思路
75 | Rust元编程之编译过程与宏展开概述
76 | Rust元编程之声明宏(一)
77 | Rust元编程之声明宏(二)
78 | Rust元编程之过程宏:三件套介绍
79 | Rust元编程之过程宏:Bang宏实现原理
80 | Rust元编程之过程宏:使用配置文件动态生成代码
81 | Rust元编程之过程宏:Derive宏案例
82 | Rust元编程之过程宏:属性宏
83 | 客观理解Unsafe Rust
84 | Unsafe Rust安全抽象
85 | Unsafe Rust安全抽象:Drop检查
86 | Unsafe Rust安全抽象:型变
87 | UnsafeRust的其他知识点
88 | Rust异步编程之IO模型
89 | Rust异步编程之epoll和io_uring
90 | Rust异步编程之事件驱动编程模型
91 | Rust异步编程之epoll代码实践
92 | Rust异步编程之Reactor代码实践
93 | Rust异步编程之MiniMio代码实践
94 | Rust异步编程之Mio代码实践(一)
95 | Rust异步编程之Mio代码实践(二)
96 | Rust异步编程之异步编程模型概要
97 | Rust异步编程之Future和Futures-rs介绍
98 | Rust异步编程之编写异步echo服务(一)
99 | Rust异步编程之编写异步echo服务(二)
100 | Rust异步编程之编写异步echo服务(三)
101 | Rust异步编程之深入理解异步Task模型
102 | Rust异步编程之Waker实现
103 | Rust异步编程之Futures库源码导读(一)
104 | Rust异步编程之Futures库源码导读(二)
105 | Rust异步编程之Futures库源码导读(三)
106 | Rust异步编程之Futures库源码导读(四)
107 | Rust异步编程之async-await语法背后
108 | Rust异步编程之生成器(一)
109 | Rust异步编程之生成器(二)
110 | Rust异步编程之Pin与Unpin(一)
111 | Rust异步编程之Pin与Unpin(二)
112 | Rust异步编程之Pin与Unpin(三)
113 | Rust异步编程之Pin与Unpin(四)
114 | Rust异步编程之no-std异步生态介绍
115 | Rust异步编程之实现异步缓存(一)
116 | Rust异步编程之实现异步缓存(二)
117 | Rust异步编程之异步运行时生态介绍
118 | Rust异步编程之smol运行时(一)
119 | Rust异步编程之smol运行时(二)
120 | Rust异步编程之smol运行时(三)
121 | Rust异步编程之smol运行时(四)
122 | Rust异步编程之smol运行时(五)
123 | Rust异步编程之smol运行时(六)
124 | Rust异步编程之smol运行时(七)
125 | Rust异步编程之smol运行时(八)
126 | Rust异步编程之smol运行时(九)
127 | Rust异步编程之smol运行时(十)
128 | Rust异步编程之async-std运行时(一)
129 | Rust异步编程之async-std运行时(二)
130 | Rust异步编程之tokio运行时(一)
131 | Rust异步编程之tokio运行时(二)
132 | Rust异步编程之tokio运行时(三)
133 | Rust异步编程之tokio运行时(四)
134 | Rust异步编程之tokio运行时(五)
135 | Rust异步编程之tokio运行时(六)
136 | Rust异步编程之tokio运行时(七)
137 | Rust异步编程之tokio运行时(八)
138 | Rust异步编程之tokio运行时(九)
139 | Rust异步编程之tokio运行时(十)
140 | Rust异步Web框架开篇
141 | Rust异步Web框架之Rocket(一)
142 | Rust异步Web框架之Rocket(二)
143 | Rust异步Web框架之Rocket(三)
144 | Rust异步Web框架之tide
145 | Rust异步Web框架之actix-web(一)
146 | Rust异步Web框架之actix-web(二)
147 | Rust异步Web框架之gotham-and-thruster
148 | Rust异步Web框架之tower(一)
149 | Rust异步Web框架之tower(二)
150 | Rust异步Web框架之hyper(一)
151 | Rust异步Web框架之hyper(二)
152 | Rust异步Web框架之hyper(三)
153 | Rust异步Web框架之warp
154 | Web框架实战之HTTP库介绍
155 | Web框架实战之了解hyper-tower_http-http-body之间的层次关系
156 | Web框架实战之创建初始项目
157 | Web框架实战之设计框架接口
158 | Web框架实战之实现路由结构
159 | Web框架实战之实现路由结构(二)
160 | Web框架实战之实现路由结构(三)
161 | Web 框架实战之实现路由结构(四)
162 | Web 框架实战之实现路由结构(五)
163 | Web 框架实战之实现 Handler(一)
164 | Web 框架实战之实现 Handler(二)
165 | Web 框架实战之实现 Handler(三)
166 | Web 框架实战之实现 Handler(四)
167 | Web 框架实战之添加 tracing 打印
168 | Web 框架实战之实现提取器(一)
169 | Web 框架实战之实现提取器(二)
170 | Web 框架实战之实现提取器(三)
171 | Web 框架实战之实现提取器和中间件(四)
172 | Web 框架实战之错误处理支持
173 | 课程完结回顾
本节摘要
登录 后留言

全部留言(11)

  • 最新
  • 精选
田云
感觉理论性太强了,希望多一些实际应用和例子,看到现在一直在感觉念 ppt 的感觉。
2021-06-05
3
11
蓝士钦
Rust语言通过mut 实现可变引用,每次只允许有一个可变引用,相当于实现了“锁”,比其他语言的显示锁更加高效。 这种安全机制仅限于单个进程内,如果用Rust开发Web应用,对于分布式应用的场景仅通过mut是不够的,必须使用分布式锁,关于分布式并发和其他语言没什么差别,都要自己实现数据锁。
2020-09-26
1
3
Marvichov
英文文档 https://doc.rust-lang.org/reference/expressions.html#place-expressions-and-value-expressions
2021-03-01
1
Bachue Zhou
Rust 里的 mut 严格的来说不应该被翻译为可变,因为其实也能做到不加 mut 照样能修改数据,比如 Atomic 类型之类的,具体看库的实现方式,严格来说就应该翻译为独占,这个独占是编辑器掌控的。不是库的实现方式能左右的。
2024-02-22
万正宇
--006 #![allow(unused)]//宏语句 use std::collections::HashMap;//声明语句 /** 1.除了声明,一切都是表达式,都是类型 2.一致性地返回单元类型,其并无实际意义 3.宏语句(文本替换,生成指定代码) */ fn main() {//块表达式 let mut res = HashMap::new(); res.insert("res",555); println!("res={:?}", res["res"]); ; //连接 { (); //返回空元组 } &{ ; //返回单元值类型 UnitType 的引用 } ; //返回单元值类型 ; -> () } --007 /** 1.常量函数 const fn,常量泛型 const generic;在编译期计算 (编译期执行常量表达式) 2.常量传播优化 const propagation (编译期优化替换) 3.特性门已被删除 */ #[derive(Debug)] pub struct ArrVec<T, const N: usize> { items: [T; N], length: usize, } impl<T, const N: usize> ArrVec<T, {N}> { pub const fn new() -> ArrVec<T, {N}> { //泛型常量函数 ArrVec { items: [T; N], length: 0, } } #[inline] //内联优化 pub const fn capacity(&self) -> usize { N } } #![feature(array_chunks)] fn main() { arr.array_chunks().map(|&[x,y,z] | x*y*z).sum::<i32>(); //闭包?? assert_eq!(...); } --008 /** 1. let绑定 位置表达式(内存地址) = 值表达式 ; 2. static mut LEVEL: u8 = 0; //静态变量初始化 3. struct A { name: &'static str, } 4. vec![1, 2, 3].push(&mut self, 4); 5. copy语义,复制 6. move语义,转移栈上的指针 7. &mut answer; //内存锁 //每个内存位置,只允许有唯一的绑定 //独占引用 8. *const T & *mut T //Unsafe Rust, 操作原始指针 */
2022-04-23
Geek_9ab0d8
let mut anwser=42; let r=&mut anwser; *r=43; //println!("{:?},{:?}",anwser, r);// 为什么这样写会报错 println!("{:?}",anwser);//正确 anwser=5;//重新给anwser赋值时,r地址就无效了? //println!("{:?}",r);//为什么访问不了r println!("{:?}",anwser);//正确
2022-02-19
1
Geek_9ab0d8
let mut anwser=42; let r=&mut anwser; *r=43; println!("{:?},{:?}",anwser, r);// 为什么这样写会报:cannot borrow `anwser` as immutable because it is also borrowed as mutable
2022-02-19
情诗和你
变量遮蔽后,相同的变量还是指向同一块内存区域吗? let answer = 1; let answer = “asdasdads”; 如果遮蔽后的 answer 指向新的内存区域,那原来的内存块不就没有使用到了吗?
2021-01-17
2
米斯特菠萝
Rust没有BigDecimal类型吗? 0.1 + 0.2 = 0.30000000000000004 这样的浮点数精度问题还是和JS一样呀
2020-09-28
3
神 一生有你
aes加密,当内容长度过长,需要字节数组分段加密,最后的数组长度是按内容动态大小的,其它语言都是定义byte[] b=new byte[N],N是动态算出来的,rust搞不了,只能vec来用
2020-09-27
1
收起评论