学习Rust第一天 Rust语言特点
学习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语言特点的更多相关文章
- powershell,系统学习的第一种脚本语言
最爱的脚本语言之一.
- [HeadFrist-HTMLCSS学习笔记][第一章Web语言:开始了解HTML]
head title body 元素= 开始标记 + 内容 +结束标记 还能给段落一个变量名 <p id="houseblend"> body </p> s ...
- [编程笔记]第一章 C语言概述
//C语言学习笔记 第一讲 C语言概述 第二讲 基本编程知识 第三讲 运算符和表达式 第四讲 流程控制 第五讲 函数 第六讲 数组 第七讲 指针 第八讲 变量的作用域和存储方式 第九讲 拓展类型 第十 ...
- Rust这个新的语言
Rust这个新的语言 Rust初步(七):格式化 摘要: 在Rust中,如果要进行屏幕输出,或者写入到文件中,需要对数据进行格式化.这一篇总结一下它所支持的几种格式化方式. 这篇文章参考了以下官方文档 ...
- CA周记 2022年的第一课 - Rust
现代编程语言有很多,在我的编程学习里面有小学阶段的 LOGO , 中学阶段的 Pascal ,也有大学阶段的 C/C++.Java..NET,再到工作的 Objective-C .Swift.Go.K ...
- 学习GO第一天,自我感觉可麻利的开干了-GO语言配置、开发、服务器部署
学习GO第一天,自我感觉可麻利的开干了-GO语言配置.开发.服务器部署 第一步下载 go sdk https://golang.org/dl/ https://storage.googleapis.c ...
- 第一章C语言简介及输出函数 上机部分
第一章C语言简介及输出函数 上机1 #include "stdio.h" void main() { printf("南方学院,你好!\n"); printf( ...
- Java学习记录第一章
学习Java第一章的记录,这一章主要记录的是Java的最基础部分的了解知识,了解Java的特性和开发环境还有Java语言的优缺点. 计算机语言的发展大概过程:机器语言--->汇编语言---> ...
- javascript的ES6学习总结(第一部分)
ES6(ESNext学习总结——第一部分) ES6, 全称 ECMAScript 6.0 ,是 JavaScript 的下一个版本标准,2015.06 发版. ECMA每年6月份,发布一个版本 201 ...
随机推荐
- a 标签 rel 属性值 opener 的作用
<a> 元素,原英文单词为 anchor 的缩写,所以又称之为锚点元素.锚点元素的 href 属性用来创建通向其他网页.文件.同一页面内的位置.电子邮件地址或任何其他 URL 的超链接. ...
- [CF1500E] Subset Trick (平衡树)
题面 洛谷翻译 V a n y a \rm Vanya Vanya 有一个初始大小为 n n n 的集合 S S S 和 q q q 次往集合加数/删数的操作.(集合中每个数字不同) 称一个数 x x ...
- 解决eclipse中的Java文件,使用idea打开的乱码问题
吐槽: 在克隆一些Github上面资源的时候,使用idea打开,会出现乱码的情况 而使用eclipse打开,这种情况就会消失.「是因为eclipse使用的是GBK编码,idea使用的是utf-8」 这 ...
- 被一位读者赶超,手摸手 Docker 部署 ELK Stack
被一位读者赶超,容器化部署 ELK Stack 你好,我是悟空. 被奇幻"催更" 最近有个读者,他叫"老王",外号"茴香豆泡酒",找我崔更 ...
- HBase集群部署与基础命令
HBase 集群部署 安装 hbase 之前需要先搭建好 hadoop 集群和 zookeeper 集群.hadoop 集群搭建可以参考:https://www.cnblogs.com/javammc ...
- JAVA反序列化漏洞修复解决方法
MyObject类建立了Serializable模块,而且重新写过了readObject()变量,仅有建立了Serializable模块的类的目标才能够被实例化,沒有建立此模块的类将无法使他们的任意状 ...
- Docker容器网络基础总结
ifconfig 之 docker0 基于Linux的虚拟网桥(通用网络设备的抽象) 虚拟网桥特点: 1. 可以设置IP地址 2.相当于拥有一个隐藏的虚拟网卡 docker0 的地址划分 IP: 17 ...
- Nginx反代服务器基础配置实践案例
转载自:https://www.bilibili.com/read/cv16149433?spm_id_from=333.999.0.0 方式1: 轮询 RR(默认轮询)每个请求按时间顺序逐一分配到不 ...
- centos7.5升级系统内核版本
1.yum update curl nss 2.yum install wget 3.rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.or ...
- 实战---在Portainer中编排docker-compose.yml文件
选择要部署容器的主机上,不用事先安装配置docker-compose 官方示例文档地址,2.0版本的:https://docs.docker.com/compose/compose-file/comp ...