Rust:Rust语言介绍

Rust语言介绍

相关资源

Rust官网:https://www.rust-lang.org/
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以及家谱

Rust历史

1、Rust 最早是 Mozilla 雇员 Graydon Hoare 的一个个人项目,从 2009 年开始,得到了 Mozilla 研究院的支助,2010 年项目对外公布。2010 ~2011 年间实现的自举。在 2015 年 5 月 15日发布了 1.0 版。在研发过程中,Rust 建立了一个强大活跃的社区,形成了一整套完善稳定的项目贡献机制,任何开发者都可以直接给这个项目提bug或者直接贡献源码【我之所以看好rust,是因为它的社区太友好了】
2、Rust深受多种语言的影响,是一种支持多模式编程(命令、函数以及面向对象)的类似C的语言
在这里插入图片描述

什么是Rust

  • Rust语言是一门开源的系统编程语言,有3大特点:运行快,防止段错误,保证线程安全。
  • 什么是系统级编程语言:
    系统级编程是相对于应用级编程而言的。一般来说,系统级编程语言意味着更底层的位置,更接近硬件层次,并为上层的应用软件提供支持。系统级语言一般具有以下特点:
  • 可以在资源相对有限的环境下执行
  • 运行时开销很小,非常高效
  • 很小的运行库,甚至没有
  • 可以允许直接的内存操作

目前应用最广泛的系统编程语言是C/C++。
Rust作为系统级编程语言,它的基本理念是 “零开销抽象”

  • 运行快
    Rust是一种静态类型的编译性语言,类似C++。编译型语言,无须大规模的运行时(runtime)支持,也没有自动内存回收(GC)机制
  • 防止段错误
    1、什么叫做段错误?
    一个进程在执行的时候,它所占用的内存的虚拟地址空间一般被分割成好几个区域,我们称为“段”,进程中的每个段通过硬件MMU映射到真正的物理空间;在这个映射过程中,我们还可以给不同的段设置不同的访问权限,比如代码段只读不写;进程在执行过程中,如果违反了这些权限,CPU就会直接尝试一个硬件异常;硬件异常会被操作系统内核处理,一般内存会向对应的进程发送一条信号;如果没有实现自己特殊的信号处理函数,默认这个进程会直接退出;如果操作系统打开了core dump功能,在进程退出时操作系统会把它当时的内存状态,寄存器状态以及各种相关信息保存到一个文件中,供用户以后调试使用
    2、什么会引起内存不安全?
    访问未定义内存会引起不可知错误
    • 空指针:
      解引用空指针是不安全的,会引起段错误。这块地址空间一般是受保护的。
    • 野指针 :
      野指针就是未初始化的指针,指针可能会指向受保护的区域
    • 悬浮指针:
      悬浮指针是指内存空间在被释放了之后继续使用,和野指针一样,会读写不属于这个指针的内存
    • 非法释放
      同一个指针释放两次
    • 缓冲区溢出
      指针访问越界,会读取或者修改临近内存空间的值
    • 执行非法指针
      如果一个函数指针不是准确的指向一个函数地址,那么调用这个函数指针会导致一段随机数据被当中指令来执行,非常危险
    • 使用未初始化内存
    • 数据竞争
      并发时针对同一块内存同时读写,没有同步

2、类似空指针、野指针等绝不会在Rust中产生,因为Rust禁用所有裸指针,而且取消了空值,通过引用和接用这一方式替代。
3、Rust不需要手动管理内存:
在Rust之前其他编程语言管理内存的方式有两种

  • 比如Jave和Python的方式无非是使用垃圾回收算法(GC),垃圾回收算法一定会有运行时和垃圾回收时的停顿,不适合系统编程。
  • C++手工管理内存,手工管理内存可能会出现内存泄漏和悬停指针之类的问题。
    Rust通过生命周期和所有权特性,就可以实现内存的自动回收,

4、Rust一举解决了并发条件下的数据竞争(Data Race)问题怎么解决的???。它从编译阶段就将数据竞争解决在了萌芽状态,保障了线程安全。所有跟线程安全相关的特性,都不是在编译器中写死的。用户可以用库的形式实现各种高效且安全的并发编程模型,进而充分利用多核时代的硬件性能。
2、Rust语言是内存安全且与操作系统无关的,这意味着它可以在任何计算机上运行。

Rust是如何发布地

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的发布步骤

1、Rust语言每个相对复杂一点的新功能,都要经历如下步骤才算真正稳定可用:RFC→Nightly→Beta→stable。
2、Rust语言相对重大的设计,必须经过RFC(Request For Comments)设计步骤。这个步骤主要是用于讨论如何“设计”语言。这个项目存在于https://github.com/rust-lang/rfcs。所有大功能必须先写好设计文档,讲清楚设计的目标、实现方式、优缺点等,让整个社区参与讨论,然后由“核心组”(Core Team)的成员决定是否接受这个设计。
3、在2017年下半年,Rust设计组提出了一个基于epoch的演进策略edition,让Rust的兼容性保证是一个有时限的长度,而不是永久。

  • 举个例子:假设要添加一个功能,比如增加一个关键字。这件事情肯定是不兼容的改变,因为用户写的代码中很可能包含用这个关键字命名的变量、函数、类型等,直接把这个单词改成关键字会直接导致这些遗留代码出现编译错误。那怎么办呢?首先会在下一个edition中做出警告,提示用户这个单词已经不适合作为变量名了,请用户修改。但是这个阶段代码依然能编译通过。然后到再下一个edition的时候,这个警告就会变成真正的编译错误,此时这个关键字就可以真正启用了。先编译警告,再编译错误,这个过程可能会持续好几年,所以Rust的稳定性还是基本上有保证的。
  • 目前已经发布了2015 edition和2018 edition。

参考:
《Rust 程序设计语言 简体中文版》https://kaisery.github.io/trpl-zh-cn/ch03-01-variables-and-mutability.html
《rustprimer》 https://rustcc.gitbooks.io/rustprimer/content/1st-glance/
《深入浅出Rust》

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值