学习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 ...
随机推荐
- 从零开始Blazor Server(13)--消息通知
我们现在做了用户管理.角色管理.菜单管理. 但是大家有没有发现,我们的菜单要变化的话必须要刷新页面才行.这个体验感觉不太好. 今天我们就用全局通知组件来解决这个问题. 首先我们要改造以下我们的Main ...
- [CF1538G] Gift Set (数学简单题)
题面 相信英文题面也很好理解 有 x \tt x x 个红糖, y \tt y y 个蓝糖.每一个礼包里面要么有 a \tt a a 个红糖+ b \tt b b 个蓝糖,要么是 a \tt a a ...
- 四连测总结(XYX)
目录 成绩 总结 事后... 成绩 telephonewire monkey 总分 0 56 56 cowjog guard path temperature 总分 0 40 0 68 108 cba ...
- [CSP-S 2019 day2 T1] Emiya家今天的饭
题面 题解 不考虑每种食材不超过一半的限制,答案是 减去 1 是去掉一道菜都不做的方案. 显然只可能有一种菜超过一半,于是枚举这种菜,对每个方式做背包即可(记一维状态表示这种菜比别的菜多做了多少份). ...
- QPanter 绘画
Qpainter 绘图 1 绘图事件 void paintEvent(QPaintEvent *event) 2 声明一个画家对象 QPainter painter(this) this 指定绘图设 ...
- 并发与并行,同步和异步,Go lang1.18入门精炼教程,由白丁入鸿儒,Go lang并发编程之GoroutineEP13
如果说Go lang是静态语言中的皇冠,那么,Goroutine就是并发编程方式中的钻石.Goroutine是Go语言设计体系中最核心的精华,它非常轻量,一个 Goroutine 只占几 KB,并且这 ...
- zabbix_agentd断断续续端无法访问问题记录
问题现象: zabbix监控上出现zabbix_agentd无法访问,但是实际上zabbix_agentd是存活状态 每隔一段时间就会出现这样的情况 问题原因 zabbix_agentd端任务较多,活 ...
- Netty整合STOMP
1.STOMP协议简介 常用的WebSocket协议定义了两种传输信息类型:文本信息和二进制信息.类型虽然被确定,但是他们的传输体是没有规定的,也就是说传输体可以自定义成什么样的数据格式都行,只要客户 ...
- 【ASP.NET Core】自定义Session的存储方式
在开始今天的表演之前,老周先跟大伙伴们说一句:"中秋节快乐". 今天咱们来聊一下如何自己动手,实现会话(Session)的存储方式.默认是存放在分布式内存中.由于HTTP消息是无状 ...
- 内存溢出(OOM)分析
当JVM内存不足时,会抛出java.lang.OutOfMemoryError. 主要的OOM类型右: Java heap space:堆空间不足 GC overhead limit exceed ...