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》

Rust:Rust语言介绍相关推荐

  1. r语言 编辑 d3.js_d3.js的语言介绍

    r语言 编辑 d3.js by Matt Oxley 由马特·奥克斯利(Matt Oxley) d3.js的语言介绍 (A linguistic introduction to d3.js) 如何从一 ...

  2. python语言简介-Python语言介绍

    原标题:Python语言介绍 Python简介 Python 是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言. Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其 ...

  3. (3)FPGA开发语言介绍(第1天)

    (3)FPGA开发语言介绍(第1天) 1 文章目录 1)文章目录 2)FPGA初级课程介绍 3)FPGA初级课程架构 4)FPGA开发语言介绍(第1天) 5)技术交流 6)参考资料 2 FPGA初级课 ...

  4. Arduino语言介绍

    Arduino语言介绍 Arduino语言是建立在C/C++基础上的,其基础是C语言,Arduino语言只不过把AVR单片机(微控制器)相关的一些参数设置都函数化,不用我们去了解他的底层,让不了解AV ...

  5. 【转载】用平常语言介绍神经网络

    http://wenku.baidu.com/link?url=23jM13V3Qe9Zx84FuEMebOMbTSk4i0Oaa5YPAVL1dfbSFC4G20GYDkUbbRvcJILgTGli ...

  6. c语言最新标准 2017,2017最新C语言介绍

    2017最新C语言介绍 1.C语言的应用 随着计算机的普及用,越来越多的人感觉到现有的计算机的应用不能满足越来越多.越来越复杂的事物处理,所以希望自己能够根据所遇到不同的情况来设计.制作.开发相对灵活 ...

  7. python语言-Python语言介绍

    Python语言介绍 一.计算机的语言介绍 如果我们想操作计算机,要让计算机能听懂我们说的话,但是因为计算机的组成原因,计算机只能理解二进制,所以,如果我们想要操纵计算机完成我们下达的任务,就必须用计 ...

  8. 学习之旅10-R语言介绍

    一.R语言介绍 前言 1.R语言介绍 1.1 为何要使用R 1.2 R的获取和安装 1.3 R 的使用 1.3.1 初识R 1.3.2 获取帮助 1.3.3 工作空间 1.3.4 输入和输出 1.4 ...

  9. 前后端及常用语言介绍

    前后端及常用语言介绍 珞闻 来自: 珞闻(知行.) 2015-04-19 23:25:13 前后端的划分,可以简单地理解为凡是运行在用户设备上的技术都可以称为前端技术( 比如 HTML / CSS / ...

最新文章

  1. 判断字符串不包含某个字符php,java判断字符串是否包含某个字符的方法
  2. 建立注册DLL和反注册DLL文件的快捷方式
  3. linux php 断点调试,PHP断点调试工具Xdebug的安装
  4. 开启 Truffle Ganache  MetaMask交互
  5. 网络运维工作是什么的?
  6. 20天减10斤 2020-10-21
  7. 西南石油大学硕导携研究生野外考察遭遇泥石流,师生4人不幸遇难
  8. Python编译、运行、反编译pyc文件
  9. ImageLoader的简单分析
  10. 为什么不建议将Abaqus汉化使用?
  11. iOS动画——流光文字
  12. 【iOS开发】——weak底层原理
  13. springboot+社区购物小程序 毕业设计-附源码291720
  14. 小米 未检测到任何互联网连接 因此不会自动重新连接
  15. Vue.js使用CSS美化
  16. android studio查看源码
  17. ROS Stage学习
  18. 一个淘宝店主真实的开店经历
  19. Word目录第一行和最后一行格式不对(首行缩进)的解决方案
  20. 嵌入式系统下Microwindows的实现

热门文章

  1. 02.Javascript中的继承----Inherits
  2. CondaHTTPError: HTTP 404 NOT FOUND for url
  3. 回波损耗 VSWR S参数 总结
  4. 揭秘KubeEdge边缘网络项目EdgeMesh:如何打造高速、安全、低延迟的互联网连接
  5. 云时代的腾讯运维团队转型:ECUG 10周年大会演讲
  6. EBS FA 资产查询sql 原值 累计折旧 净值
  7. 计算机组成原理乘法器组成图,计算机组成原理阵列乘法器课程设计报告
  8. 中秋节月饼不知道买哪种?Python爬取4000种月饼类别告诉你答案!
  9. 处理 -File“D:\Program”失败,因为该文件不具有 ‘.ps1‘ 扩展名。请指定一个有效...
  10. nifi 内存溢出解决方案