学习Rust之前,我觉得应该首先了解Rust语言的设计目的是什么?为什么会诞生这门语言?这门语言和其他的语言有什么不同。

Rust语言的设计特点

  • 高性能:rust拥有和C++相近的性能表现,所以在嵌入式领域,rust也正在快速发展。
  • 可靠性:可靠性也是高安全性,在学习Rust语言的过程中可以感受到,Rust中各种机制的设计为这种可靠性打下基础,将各种可能发生的错误或者危险代码在编译阶段阻止,所以说,Rust是一门安全的语言(相对于C++的各种问题做出的优化)。内存的管理机制相当巧妙。
  • 生产力:Rust 拥有出色的文档、友好的编译器和清晰的错误提示信息, 还集成了一流的工具——包管理器和构建工具, 智能地自动补全和类型检验的多编辑器支持, 以及自动格式化代码等等。
    • rust的包管理比C++好太多了,cargo十分好用。
    • rust的编译器十分强大,可以很好的输出错误信息,甚至给出解决方法。对新手十分友好。

其它特点:

  • 现代语言特性:rust的语法糖比较多,一些人可能比较讨厌这一点,不过目前我觉的还不错。融合各种其他语言的技巧。
  • 丰富易用的库:相对与C++(上次使用C++的Poco库,是真的门槛极高,不适合快速开发),rust有很多好用的库(我不记得名字了,呜呜呜。学习-ing)。

目前我接触的特性

一些是不同于其他语言的新概念,一些概念名字不同于其他语言,但是概念上类似。

新概念

  • 变量的可变性:这个不同于const的概念,可变的变量需要用mut声明,默认变量不可用,但是可以覆盖。(内存安全设计)

  • 所有权:针对复合类型(标量类型无所有权)的变量,拥有所有权。其实,真正区分变量十分有所有权应该看这个变量是放在还是。放在栈上的变量没用所有权,放在堆上的变量拥有所有权的概念。(内存安全设计)

    • 标量类型一般指的是整型,浮点型,布尔型,字符类型

    • 复合类型一般是元组,数组,还有一个是字符串类型(Rust还有一种类型是字符串字面值,也叫字符串切片值(字符串 slice),它也是字符串类型的引用。不同于字符串类型),注意字符串类型不是原生类型。

    • 引用和借用:这里的概念相对复杂,与其他语言差异较大,如果结合变量在内存中的状态会比较好理解。下面是一个引用的内存图。至于为什么这样设计,是为保证指向一片内存的指针只有一个,防止内存重复释放。这个是所有权设计的目的所在

  • 强大的枚举和模式匹配:这里是我觉得rust设计比较好的地方,rust里的枚举和结构体具有相近的能力,结合模式匹配,可以很好的进行分支和错误处理。

    • rust也是一个空安全语言(如果你学习过空安全语言可能有一定认识,也就是说rust里面没有空类型。目前,采用空安全的语言大多是新语言,因为Null本身是一个错误的设计,不过空这个概念仍具有价值),在rust用一个Optional类型代替空类型。Optional是一个枚举类型,其定义如下:

      enum Option<T> {
      None,
      Some(T),
      }

      Some表示有值,None表示空值。结合模式匹配方法,可以对空值进行额外处理,防止错误发生。

与其他语言类似概念

  • 关联函数:类似于C++中的静态函数。
  • crate:翻译过来是板条箱,可以理解为python中的模块。
  • HashMap:rust里的字典,说是安全性更高。

学习Rust第一天 Rust语言特点的更多相关文章

  1. powershell,系统学习的第一种脚本语言

    最爱的脚本语言之一.

  2. [HeadFrist-HTMLCSS学习笔记][第一章Web语言:开始了解HTML]

    head title body 元素= 开始标记 + 内容 +结束标记 还能给段落一个变量名 <p id="houseblend"> body </p> s ...

  3. [编程笔记]第一章 C语言概述

    //C语言学习笔记 第一讲 C语言概述 第二讲 基本编程知识 第三讲 运算符和表达式 第四讲 流程控制 第五讲 函数 第六讲 数组 第七讲 指针 第八讲 变量的作用域和存储方式 第九讲 拓展类型 第十 ...

  4. Rust这个新的语言

    Rust这个新的语言 Rust初步(七):格式化 摘要: 在Rust中,如果要进行屏幕输出,或者写入到文件中,需要对数据进行格式化.这一篇总结一下它所支持的几种格式化方式. 这篇文章参考了以下官方文档 ...

  5. CA周记 2022年的第一课 - Rust

    现代编程语言有很多,在我的编程学习里面有小学阶段的 LOGO , 中学阶段的 Pascal ,也有大学阶段的 C/C++.Java..NET,再到工作的 Objective-C .Swift.Go.K ...

  6. 学习GO第一天,自我感觉可麻利的开干了-GO语言配置、开发、服务器部署

    学习GO第一天,自我感觉可麻利的开干了-GO语言配置.开发.服务器部署 第一步下载 go sdk https://golang.org/dl/ https://storage.googleapis.c ...

  7. 第一章C语言简介及输出函数 上机部分

    第一章C语言简介及输出函数 上机1 #include "stdio.h" void main() { printf("南方学院,你好!\n"); printf( ...

  8. Java学习记录第一章

    学习Java第一章的记录,这一章主要记录的是Java的最基础部分的了解知识,了解Java的特性和开发环境还有Java语言的优缺点. 计算机语言的发展大概过程:机器语言--->汇编语言---> ...

  9. javascript的ES6学习总结(第一部分)

    ES6(ESNext学习总结——第一部分) ES6, 全称 ECMAScript 6.0 ,是 JavaScript 的下一个版本标准,2015.06 发版. ECMA每年6月份,发布一个版本 201 ...

随机推荐

  1. Unity 将是驱动 C# 增长的引擎吗 ?

    C# 在中国的采用需要一个杀手级应用的带动, 那么这样的一个杀手级应用是 Unity吗,我这里大胆推测采用CoreCLR 的新一代完全采用C#构建的Unity 将是这样的一个杀手级应用.Unity已被 ...

  2. Minio分布式集群部署——Swarm

    最近研究minio分布式集群部署,发现网上大部分都是单服务器部署,而minio官方在github上现在也只提供了k8s和docker-compose的方式,网上有关与swarm启动minio集群的文章 ...

  3. 日常问题: SQL优化

    日常开发中,除了开辟新项目,业务需求开发,一般还要做负责系统的日常运维.比如线上告警了,出bug了,必须及时修复.这天,运维反馈mysql cpu告警了,然后抓了该时间节点的慢sql日志,要开发分析解 ...

  4. 创建deploymen的几种方式

    创建deployment方式有两种,一种是命令直接创建,一种是使用yaml文件 1. 直接使用命令方式: --record 参数用来记录版本,也可以忽略,建议带上 kubectl create dep ...

  5. C#使用Spire.Pdf包对PDF文档进行数字签名

    背景 对PDF文档进行数字签名的需求 对PDF文档添加水印的需求 网上资料版本不一或不全 本文章提到的Spire.Pdf均是使用的Spire.Pdf for .NET,除此之前还有其他语言的版本,如S ...

  6. centos7使用tar包安装mysql5.7

    特别注意: 文档中涉及到密码的都是用的是弱密码,是存在安全风险的,一定要根据自己的情况修改为复杂度更高的密码! centos 7.6 mysql 5.7.31 基础目录: /srv/{app,data ...

  7. 经纬度转换为距离单位km的方法

    function rad(d){ return d * Math.PI /180.0; }; GetDistance(lat1, lng1, lat2, lng2){ var radLat1 =rad ...

  8. KingbaseES 约束

    目录 什么是约束 如何定义约束 列约束 表约束 为约束创建名称 默认约束名称 自定义约束名称 KingbaseES 的可用约束列表 CHECK约束 非空约束 UNIQUE约束 PRIMARY KEY约 ...

  9. KingbaseES 全局索引

    概述:在分区表上创建的索引可分为全局索引和本地索引.全局索引包括全局非分区索引(Global Nonpartitioned Indexes)和全局分区索引(Global Partitioned Ind ...

  10. C# Parallel类For循环与普通For循环耗时性能比较

    1 static void Main(string[] args) 2 { 3 var dt = DateTime.Now; 4 var rand = new Random(DateTime.Now. ...