- Rust是一种令人兴奋的新编程语言,可以让每个人编写高效且可靠的软件
- 他可以用来替换C/C++,Rust拥有和他们同样的性能,但是很多常见的bug在编译阶段就可以被消灭
- Rust是一种通用编程语言,但是他更善于以下场景:
-需要运行时的速度
-需要内存安全
-更好的利用多处理器
C/C++性能非常好,但类型系统和内存都不太安全.
Java/C#,拥有GC,能保证内存安全,也有很多优秀的特性但是性能不行.
Rust:
-安全
-无需GC
-易于维护、测试,代码安全高效
-高性能的web-Service
-WebAssembly
-命令行工具
-网络编程
-嵌入式设备
-系统编程
Rust与FireFox
Rust最初是Mozilla公司的一个研究性项目.Firefox是Rust产品应用的一个重要的例子.
Mozilla一直以来都是在用Rust创建一个名为Servo的实验性浏览器引擎,其中所有的内容都是并行执行的
-目前Servo的部分功能已经被继承到FireFox中了
-FireFox原来的量子版就包含了Servo的CSS渲染引擎
-Rust是FireFox在这方面得到了巨大性能改进
-Google:新操作系统Fuschia,其中Rust代码量约占30%
-Amazon:基于Linux开发的可以直接在裸机、虚机上运行容器的操作系统
-System76:纯Rust开发了下一代安全操作系统Redox
-蚂蚁金服:库操作系统Occlum
-微软:正在使用Rust重写windows系统中一些低级的组件
-微软:WinRT/Rust项目
-斯坦福与密歇根大学:嵌入式实时操作系统,应用于Google的加密产品
Dropbox、Yelp、Coursera、LINE、Cloudflare、Atlassion、npm、Ceph、百度、华为、Sentry、Deno..
性能
安全性
无所畏惧的并发
Linux or Mac:
-curl https://sh.rustup.rs-sSf|sh
Windows:按官网指示操作 or IDEA插件仓库下载Rust即可
更新Rust
-rustup update
卸载Rust
-rustup self uninstall
rustc --version
-结果格式 :rust.x.y.z(acacabb yyyy-mm-dd)
-会显示最新稳定版的:版本号、commit-hash、commit日期
rustup doc
Cargo是Rust的构建系统和包管理工具
-构建代码,下载依赖库...
安装Rust的时候会安装Cargo
- cargo --version
Cargo创建项目
cargo new 你的项目名称
声明变量使用let关键字
默认情况下变量是不可变的(Immutable)
-(例子variables)
声明变量时,在变量前面加mut,就使变量可变
常量(constant),常量在绑定值以后也是不可改变的,但是它与不可变常量有很多区别
-不可使用mut,常量永远都是不可变的
-声明常量是const关键字,他的类型必须被标注
-常量可以在任意作用域内进行声明,包括全局作用域
-常量只可以绑定到常量表达式,无法绑定到函数的调用结果或只能在运行中才能计算到的值
在程序运行期间,常量在其声明的作用域内一直有效
命名规范:常量所有字母全部大写,每个单词使用下划线分开
可以使用相同的名字声明新的变量,新的变量就会shadow(隐藏)之前声明的变量
-在后续代码中代表的变量就是新的变量
shadow和把变量标记为mut是不一样的:
-如果不使用let关键字,那么重新给非mut的变量赋值会导致编译时错误
-而使用let声明的同名新变量,也是不可变的
-使用let声明的同名新变量,他的类型可以与之前不同
标量和复合类型
Rust是静态编译语言,在编译时必须知道所有变量类型
-基于使用的值,编译器通常能够推断出它的具体类型
-但是如果可能的类型比较多(例如把String转为整数的parse方法),就必须添加类型的标注,否则编译会报错
一个标量类型代表一个单个的值
-Rust主要有四个主要的标量类型:
-整数类型
-浮点类型
-布尔类型
-字符类型
整数类型没有小数部分
例如 u32就是一个无符号的整数类型,占据32位的空间
无符号整数类型以u开头
有符号整数类型以i开头
Rust整数类型列表如图:
-每种都有i和u,以及固定的位数
-有符号范围:
-(2的n次方-1)到2的(n-1)次方-1
-无符号的范围
0到2的n次方-1
isize和usize类型的位数是由程序运行的计算机的架构所决定的:
-如果计算机是64位,那就是64位的
例如:u8的范围是0~255,如果你把一个u8变量的值设置为256,那么:
-在调试模式下编译;Rust会检查整数溢出,如果发生溢出,程序在运行时就会panic
-发布模式下(--release)编译:Rust不会检查可能导致panic的整数溢出
--如果发生溢出,则会发生"环绕"操作
-256变成0,257变成1...
Rust有两种基础的浮点类型,也就是含有小数部分的类型
-f32,32位,单精度
-f64,64位,双精度
Rust的浮点类型使用了IEEE-754标准来表述
f64是默认类型,因为在现代CPU上f64和f32的速度差不多,而且精度更高
和其他语言一样...
和其他语言一样...
true 或者 false 占用一个字节大小
Rust语言中char类型被用来描述语言中最基础的单个字符
字符类型的字面值使用单引号
占用四个字节的大小
是Unicode的变量值,可以表示比ASCII多的多的字符内容:拼音、中文韩文、零长度空白字符、emoji表情等
-U+0000到U+D7FF
-U+E000到U+10FFFF
但Unicode中并没有字符的概念,所以直觉上认为的字符也许与Rust中的概念并不相符