1、rust 从哪里来?

Rust语言在2006年作为 Mozilla 员工 Graydon Hoare 的私人项目出现,而 Mozilla 于 2009 年开始赞助这个项目。第一个有版本号的 Rust 编译器于2012 年 1 月发布。Rust 1.0 是第一个稳定版本,于 2015年5月15日发布。

Graydon Hoare 是一个职业编程语言工程师,其日常工作就是给其他语言开发编译器和工具集,但是不会参与语言本身的设计,由于这种工作性质,他接触过很多编程语言,了解各种语言的优缺点。

比如 c 和 c++,性能比较好,但是类型系统和内存都不太安全;一些拥有 GC 的语言,比如Java、golang、kotlin等,内存是安全的,但是性能却比较低。于是 Graydon Hoare 萌生了自己开发一门语言的想法,这门语言就是 rust,他对 rust 的期望如下:

①、必须安全,不易崩溃;

②、不需要引入 GC,注重性能;

③、应该拥有广泛的特性,让程序员写出易于维护、调试,且更安全更高效的代码。

2、rust logo

Rust 的 logo 承载了创造者对该语言的期望:

①、Rust 这个单词是由 TrustRobust 组合而成,暗示了信任(Trust)和鲁棒性(或健壮性、Robust)。

②、Rust Logo 的形状与一种叫做锈菌的真菌相似,这种真菌生命力非常顽强,在其生命周期内可产生多达 5 种孢子类型,这 5 种生命形态还可以相互转化。也就是鲁棒性(健壮性)非常强。其 Logo 上面的 5 个小圆孔,与锈菌的 5 种生命形态相对应,也在暗示 Rust 语言超强的健壮性。

3、rust 是什么?

rust 是新时代的 C 语言。

①、Rust 是一门通用型语言。

②、Rust 语言的内存方案针对的是 C 语言的不足

一、禁止对空指针和悬垂指针进行解引用

二、读取未初始化的内存

三、缓冲区溢出

四、非法释放已经释放或未分配的指针

注意:内存泄露在 rust 中依然存在,也就是说内存泄露不在rust承诺的内存安全范围内。

③、安全且无缝沟通 C 语言。

④、Rust 是具有混合范式的 ”面向过程“式的编程语言。

⑤、和 C 语言类似,担负了时代的使命。

4、rust 语言版本说明

rust 语言版本从三个不同的维度来讲,包括三个概念。

4.1 语义化版本

其格式为:主版本号.次版本号.修订号,依次用 句点 隔开。

简单说下语义版本号递增规则:

①、主版本号:当做了不兼容的 API 修改。

②、次版本号:当做了向下兼容的功能性新增。

③、修订号:当做了向下兼容的问题修正。

4.2 发行版本

https://github.com/rust-lang/rust/branches/all

①、master 分支:对于一个发行版本

②、beta 分支:对应 Beta 版本,也叫测试版本。

③、stable 分支:对应 Stable 发行版,也叫稳定版。

通常稳定版和测试版每 6 周 发布一次,一般来说,会先发布测试版,经过一段时间测试,在进行发行稳定版。

4.3 Edition 版次

可以看到每个通过 cargo工具(Cargo 是 Rust 的构建系统和包管理器,后面会详细介绍) 创建的 rust项目的 Cargo.toml文件。

版次的意义和语义化是正交的概念,方便rust自身的进化。目前rust有两个版次,分别是 rust2015 和 rust2018。

因为rust每6周发布一次新的语义化版本,版本更新迭代速度快,但是版次通常每 3 年发布一次,之所以存在版次和语义化两种概念,我们可以看这样一个例子:

例如添加可能与代码中的标识符冲突的新关键字,比如 ”async"和“await”,刚开始rust是没有异步的概念,后面我们要添加这两个关键词,但是旧代码可能会把这两个关键词当做变量名来使用,这时候如果只有语义化的概念,我们升级rust版本号,就会造成旧代码编译报错。但是增加了版次的概念就不同了,我们对于之前的代码编译方式选择之前的版次,新的代码编译方式选择新的版次,那么问题就解决了。

因此,如果你正在使用 Rust 2015,并且您的某个依赖项使用 Rust 2018,那么一切正常

开发者可以在 Rust 包管理配置文件 Cargo.toml 来配置 edition = “2018”,表示依赖 2018 版次。

编译的时候可以通过:

Rustc --edition 2015|2018|2021

5、rust 编译过程

rust的编译器是 rustc,它是一种多道编译器,其编译过程要经过多道工序,其编译过程如下:

①、Rust 是跨平台语言,一次编译,到处执行。
②、Rust 编译器是一个 LLVM 编译前端,它将代码编译成 LLVM IR ,然后经过 LLVM 编译为相应的平台代码。
③、Rust 源码经过分词和解析,生成 AST (抽象语法树)。然后把 AST 进一步简化为 HIR(High-level IR),目的是让编译器更方便的做类型检查。HIR 会被进一步编译为 MIR(Middle IR),这是一种中间表示,它在 Rust 1.12 版本中被引入,主要用于以下目的:
一、缩短编译时间:MIR 可以帮助实现增量编译,当你修改完代码重新编译的时候,编译器只计算更改过后的部分,从而缩短了编译时间。
二、缩短执行时间:MIR 可以在 LLVM 编译之前实现更细粒度的优化,因为单纯依赖 LLVM 的优化粒度太粗,而且 Rust 无法控制,引入了 MIR 就增加了更多的优化空间。
三、更精确的类型检查:MIR 将帮助实现更灵活的借用检查,从而可以提升Rust 的使用体验。

最终,MIR 会被翻译成 LLVM IR ,然后被 LLVM 的处理编译为能在各个平台上运行的机器代码。

Rust 从入门到精通01-简介相关推荐

  1. 1 FFmpeg从入门到精通-FFmpeg简介

    1 FFmpeg从入门到精通-FFmpeg简介 2 FFmpeg从入门到精通-FFmpeg工具使用基础 3 FFmpeg从入门到精通-FFmpeg转封装 4 FFmpeg从入门到精通-FFmpeg转码 ...

  2. ROS从入门到精通0-1:教程导读

    目录 1 教程介绍 2 教程大纲 3 抱团学习 4 注意事项 1 教程介绍 ROS(Robot Operating System)是一个适用于机器人的开源的元操作系统,主要目标是为机器人研究和开发提供 ...

  3. 《Qt 6.x从入门到精通》简介

    #好书推荐##好书奇遇季#<Qt 6.x从入门到精通>,京东当当天猫都有发售.书非常厚,定价119元,网店一般会打折销售.本书配套示例源码.作者QQ群答疑.可以了解一下,在需要跨平台开发桌 ...

  4. Postman入门到精通01

    1.什么是接口? 电脑:USB,投影仪  作用:数据传输 软件:API(application Program Interface),微信提现和充值接口,支付宝支付,银联支付接口(鉴权码,token, ...

  5. flink从入门到精通-flink简介

    文章目录 flink简介 名称的由来 什么是flink 为什么需要flink 流式计算框架比较 模型 Streaming Model API 形式 保证机制 容错机制 状态管理 flink基本概念 f ...

  6. 运维基础入门到精通01

    运维基础 一.运维概述 1.运维岗位的收入情况   2.运维的职位定义 什么是运维? 在技术人员之间,一致对运维有一个开玩笑的认知:运维就是修电脑的.装网线的.背锅的岗位. 其实不然,运维是一个非 ...

  7. Rust 从入门到精通10-所有权

    在介绍rust 所有权时,我们先介绍内存管理的一些基础概念. 1.堆和栈 一个进程在执行的时候,它所占用的内存虚拟空间一般被分割为好几个区域,我们称为"段"(Segment).常见 ...

  8. 数据库从入门到精通 01

    1 基础知识 1.1 概念介绍 1.1.1 什么是数据库 简而言之,就是存储数据,管理数据的仓库. 常见的数据库分为: 关系型数据库: Oracle.MySQL.SQLServer.Access 非关 ...

  9. PyTorch系列入门到精通——张量简介及创建

    pytorch 学习

最新文章

  1. python中一共有多少个关键字-Python中有几个关键字
  2. 10-python-字典
  3. php生产任务,php生产实用技能之计划任务(视频讲解)
  4. MNews 1.9 – 干净的新闻自媒体博客wordpress主题
  5. iOS开发-面试总结(十五)
  6. python中list_python中list方法详解说明
  7. Entity Framework 实体框架的形成之旅--利用Unity对象依赖注入优化实体框架(2)
  8. Rust 1.7.0 匹配器 match 的简单介绍和使用
  9. acer软件保护卡怎么解除_Acer软件保护卡下载
  10. 华为交换机修改radius服务器地址,华为交换机修改radius服务器地址
  11. aes简单文本加密工具
  12. win7电脑怎么录屏?如何使用电脑录屏软件
  13. 程序物语(八):我心戚戚
  14. 在word中插入目录,不把目录的页数计算在内
  15. CSS进阶班笔记(五)
  16. 《个人助手》新模块——数据手袋
  17. 泛海微电动修脚器开发方案和电动修脚器单片机方案
  18. 教你同时查询天天快递多个已签收单号的物流信息
  19. java label 标签_Java标签(Label)
  20. webdav映射网络驱动器有关问题

热门文章

  1. 缺省(默认)端口参数
  2. Python抓取QQ音乐歌单并分析
  3. Db2 license
  4. 年总结(一):逝去的14年
  5. 【PHPWord】PHPWord生成图表-雷达图 | 隐藏图例、设置数值类别隐藏、展示多组数据
  6. 西南交通大学暑期夏令营面试
  7. g40-45支持虚拟化技术_CPU支持虚拟化,虚拟化有什么用怎么开启
  8. 最新版gg服务器框架安装器,GG服务框架安装器最新版本
  9. 【快乐摸鱼】— 用python开发益智游戏
  10. qml 应用程序图标设置和打包——qml