小鸭子的学习笔记duck

Duck Blog

唐如飞

( ^∀^)/欢迎\( ^∀^)

79 文章数
14 评论数

Rust入门-day-1

tangrufei
2023-02-28 / 0 评论 / 248 阅读 / 2 点赞

为什么要使用Rust?

-  Rust是一种令人兴奋的新编程语言,可以让每个人编写高效且可靠的软件

- 他可以用来替换C/C++,Rust拥有和他们同样的性能,但是很多常见的bug在编译阶段就可以被消灭

- Rust是一种通用编程语言,但是他更善于以下场景:
 	-需要运行时的速度
	-需要内存安全
	-更好的利用多处理器

与其他语言比较

C/C++性能非常好,但类型系统和内存都不太安全.

Java/C#,拥有GC,能保证内存安全,也有很多优秀的特性但是性能不行.

Rust:
-安全
-无需GC
-易于维护、测试,代码安全高效

Rust特别擅长的领域

-高性能的web-Service

-WebAssembly

-命令行工具

-网络编程

-嵌入式设备

-系统编程

Rust与FireFox

Rust最初是Mozilla公司的一个研究性项目.Firefox是Rust产品应用的一个重要的例子.

Mozilla一直以来都是在用Rust创建一个名为Servo的实验性浏览器引擎,其中所有的内容都是并行执行的

-目前Servo的部分功能已经被继承到FireFox中了

-FireFox原来的量子版就包含了Servo的CSS渲染引擎
-Rust是FireFox在这方面得到了巨大性能改进

Rust的用户和案例

-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..

Rust的优点

  • 性能

  • 安全性

  • 无所畏惧的并发

Rust缺点

  • 难学

Rust安装

官网:https://www.rust-lang.org/

Linux or Mac:
-curl https://sh.rustup.rs-sSf|sh

Windows:按官网指示操作  or IDEA插件仓库下载Rust即可

更新与卸载Rust

更新Rust
-rustup update

卸载Rust
-rustup self uninstall

安装验证

rustc --version
-结果格式 :rust.x.y.z(acacabb yyyy-mm-dd)
-会显示最新稳定版的:版本号、commit-hash、commit日期

本地文档

rustup doc

Cargo

Cargo是Rust的构建系统和包管理工具
-构建代码,下载依赖库...

安装Rust的时候会安装Cargo
- cargo --version

Cargo创建项目
cargo new 你的项目名称

变量与可变性

声明变量使用let关键字
默认情况下变量是不可变的(Immutable)
-(例子variables)
声明变量时,在变量前面加mut,就使变量可变

变量与常量

常量(constant),常量在绑定值以后也是不可改变的,但是它与不可变常量有很多区别
-不可使用mut,常量永远都是不可变的
-声明常量是const关键字,他的类型必须被标注
-常量可以在任意作用域内进行声明,包括全局作用域
-常量只可以绑定到常量表达式,无法绑定到函数的调用结果或只能在运行中才能计算到的值

在程序运行期间,常量在其声明的作用域内一直有效

命名规范:常量所有字母全部大写,每个单词使用下划线分开

隐藏(shadowing)

可以使用相同的名字声明新的变量,新的变量就会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

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中的概念并不相符
文章不错,扫码支持一下吧~
上一篇 下一篇
评论
来首音乐
光阴似箭
今日已经过去小时
这周已经过去
本月已经过去
今年已经过去个月