RUST
官网:https://www.rust-lang.org/zh-CN/
Rust编译器的源码:https://github.com/rust-lang/rust
语言设计和相关讨论:https://github.com/rust-lang/rfcs
Rust标准库文档:https://doc.rust-lang.org/std/
Rust官方管理仓库:https://crates.io/ 浏览Rust社区热门开源库
Rust中文社区:https://rustlang-cn.org/
https://tokio-zh.github.io/
Rust语言中文社区:https://rust.cc/
Rust编程语言入门
参考URL: https://www.bilibili.com/video/BV1hp4y1k7SV?p=1
背景
Rust 最早是 Mozilla 雇员 Graydon Hoare 的一个个人项目,从 2009 年开始,得到了 Mozilla 研究院的支助,2010 年项目对外公布。2010 ~2011 年间实现的自举。在 2015 年 5 月 15日发布了 1.0 版。在研发过程中,Rust 建立了一个强大活跃的社区,形成了一整套完善稳定的项目贡献机制,任何开发者都可以直接给这个项目提bug或者直接贡献源码
从 2019 年下半年至今,不到一年的时间内,Rust 语言确实接二连三地掀起过一些波澜。从微软探索将 Rust 作为 C 和 C++ 的安全替代方案开始,Rust 吸引了越来越多的目光:内核维护者表示愿意接受用 Rust 开发 Linux 驱动;AWS 也伸出橄榄枝,宣布赞助 Rust;微软更进一步,在今年年初开发并开源了受 Rust 启发的新编程语言 Verona;最近,苹果也站出来拥抱它,将 C 代码移植到 Rust。
什么是rust
Rust语言是一门开源的系统编程语言,有3大特点:运行快,防止段错误,保证线程安全。
Rust作为系统级编程语言,它的基本理念是 “零开销抽象”
-
运行快
Rust是一种静态类型的编译性语言,类似C++。编译型语言,无须大规模的运行时(runtime)支持,也没有自动内存回收(GC)机制 -
防止段错误
1、什么叫做段错误?
一个进程在执行的时候,它所占用的内存的虚拟地址空间一般被分割成好几个区域,我们称为“段”,进程中的每个段通过硬件MMU映射到真正的物理空间;在这个映射过程中,我们还可以给不同的段设置不同的访问权限,比如代码段只读不写; 进程在执行过程中,如果违反了这些权限,CPU就会直接尝试一个硬件异常;硬件异常会被操作系统内核处理,一般内存会向对应的进程发送一条信号;如果没有实现自己特殊的信号处理函数,默认这个进程会直接退出;如果操作系统打开了core dump功能,在进程退出时操作系统会把它当时的内存状态,寄存器状态以及各种相关信息保存到一个文件中,供用户以后调试使用2、什么会引起内存不安全?
访问未定义内存会引起不可知错误- 空指针:解引用空指针是不安全的,会引起段错误。这块地址空间一般是受保护的。
- 野指针: 野指针就是未初始化的指针,指针可能会指向受保护的区域
- 悬浮指针:悬浮指针是指内存空间在被释放了之后继续使用,和野指针一样,会读写不属于这个指针的内存
- 非法释放: 同一个指针释放两次
- 缓冲区溢出: 指针访问越界,会读取或者修改临近内存空间的值
- 执行非法指针: 如果一个函数指针不是准确的指向一个函数地址,那么调用这个函数指针会导致一段随机数据被当中指令来执行,非常危险
- 使用未初始化内存
- 数据竞争: 并发时针对同一块内存同时读写,没有同步
类似空指针、野指针等绝不会在Rust中产生,因为Rust禁用所有裸指针,而且取消了空值,通过引用和借用这一方式替代。
3、Rust不需要手动管理内存:
在Rust之前其他编程语言管理内存的方式有两种- 比如Jave和Python的方式无非是使用垃圾回收算法(GC),垃圾回收算法一定会有运行时和垃圾回收时的停顿,不适合系统编程。
- C++手工管理内存,手工管理内存可能会出现内存泄漏和悬停指针之类的问题。
Rust通过生命周期和所有权特性,就可以实现内存的自动回收,
什么是系统级编程语言
系统级编程是相对于应用级编程而言的。一般来说,系统级编程语言意味着更底层的位置,更接近硬件层次,并为上层的应用软件提供支持。系统级语言一般具有以下特点:
- 可以在资源相对有限的环境下执行
- 运行时开销很小,非常高效
- 很小的运行库,甚至没有
- 可以允许直接的内存操作
目前应用最广泛的系统编程语言是C/C++。
Rust的版本号
Rust编译器的版本号采用了“语义化版本号”(Semantic Versioning)规划。在这个规则之下,版本格式为:主版本号.次版本号.修订号。版本号递增规则如下。
- 主版本号:不兼容的API
- 次版本号:向下兼容的功能性
- 修订号:向下兼容的问题
Rust的第一个正式版本号是1.0,是2015年5月发布的。从那以后,只要版本没有出现大规模的不兼容的升级,大版本号就一直维持在“1”,而次版本号会逐步升级。Rust一般以6个星期更新一个正式版本的速度进行迭代。
Rust的发布策略
为了兼顾更新速度以及稳定性,Rust使用了多渠道发布的策略:
- nightly版本
- beta版本
- stable版本
nightly版本是每天在主版本上自动创建出来的版本,功能最多,更新最快,但是某些功能存在问题的可能性也更大。因为新功能会首先在这个版本上开启,供用户试用。
beta版本是每隔一段时间,将一些在nightly版本中验证过的功能开放给用户使用。是stable版本的“预发布”版本
stable版本则是正式版,它每隔6个星期发布一个新版本,也是最稳定、最可靠的版本,保证向前兼容。
为什么选择Rust
-
高性能
Rust 速度惊人且内存利用率极高。由于没有运行时和垃圾回收,它能够胜任对性能要求特别高的服务,可以在嵌入式设备上运行,还能轻松和其他语言集成。 -
可靠性
Rust 丰富的类型系统和所有权模型保证了内存安全和线程安全,让您在编译期就能够消除各种各样的错误。 -
生产力
Rust 拥有出色的文档、友好的编译器和清晰的错误提示信息, 还集成了一流的工具——包管理器和构建工具, 智能地自动补全和类型检验的多编辑器支持, 以及自动格式化代码等等。
Rust应用场景
参考
Rust学习(3):Rust语言介绍
参考URL: https://blog.youkuaiyun.com/zhizhengguan/article/details/85251282