学习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 ...
随机推荐
- 应用性能监控:SkyWalking
目录 SkyWalking 简介 SkyWalking 搭建 平台后端(Backend) 平台前端(UI) Java Agent(Java 应用监控) Java Agent 下载 Java 演练项目 ...
- docker容器数据卷的使用
什么是容器数据卷 docker的理念回顾 将应用和运行的环境打包形成容器运行,运行可以伴随着容器,但是我们对于数据的要求,是希望能够持久化的! 就好比,你安装一个MySQL,结果你把容器删了,就相当于 ...
- KingbaseES 的行列转换
目录 背景 行转列 数据准备 分组聚合函数+CASE 根据压缩数据的格式,横向展开数据列选取不同方式 crosstab函数 PIVOT 操作符 PIVOT 操作符的限制 工具 ksql 的元命令 \c ...
- LIMIT和OFFSET分页性能差!今天来介绍如何高性能分页
GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. GreatSQL是MySQL的国产分支版本,使用上与MySQL一致. 前言 之前的大多数人分页采用的都是这样: SELEC ...
- Fluentd 使用 multiline 解析器来处理多行日志
转载自:https://mp.weixin.qq.com/s?__biz=MzU4MjQ0MTU4Ng==&mid=2247500439&idx=1&sn=45e9e0e0ef ...
- 深入探究 K8S ConfigMap 和 Secret
ConfigMap 1.什么是 ConfigMap? ConfigMap 是用来存储配置文件的 Kubernetes 资源对象,配置对象存储在 Etcd 中,配置的形式可以是完整的配置文件.key/v ...
- java基础之常用类1
java基础 以下内容为本人的学习笔记,如需要转载,请声明原文链接 java常用类: 1.内部类 2.Object类 3.Object类常用方法 4.包装类 5.String类 6.BigDeci ...
- 天天向上力量B
N=eval(input()) up=pow(1+0.001*N,365) down=pow(1-0.001*N,365) print("{:.2f}, {:.2f}, {:.0f}&quo ...
- 5G 与数字化转型的关系是怎样的?
5G提供的是通信网络服务,数字化转型需要网络服务,但并不是必须使用5G网络,也就是说5G在数字化转型中并不是必虚的,但可以作为备选项,不过在某些行业比如农业.林业.牧业.港口.建筑等布设有线网络.无线 ...
- docket打包镜像内部报错
临时记录,后面再完善 对于前端docker一般不太熟悉,当我们想要打包镜像的时候会去找教程,我按着教程去打包一个使用KOA框架搭建的node服务. 这是一个 koa + ts + pm2的项目 结果出 ...