Rust零碎总结
1.Rust里没有null的概念,但是实际上有很多地方是需要null的概念的,这个时候就可以用Option来代替,它是泛型T的一个包装类,就是C#里的int?或Java里的Optional;
【但反序列化貌似是可以没有null概念,没有这个属性用默认值就好了,Java的Json反序列化貌似本身就是这样做的】
2.rust里没有分号结尾的代码叫表达式expression,如a+b,它能够被自动"return",有分号的叫语句statement;
3.Rust里void类型是叫单元类型,一般用()表示,也可以忽略;
4.Rust里有引用和解引用的概念,引用变量销毁时由于它没有指向对象的所有权,所以不会销毁对象(即不会delete),而解引用是获得了所有权所以在其声明周期结束后会主动销毁指向的对象;引用用&,解引用用*;
5.Rust对于基础类型是复制语义,而对于复合类型是移动语义;
6.移动后的变量它的所有权将发生转移,如let a = b,此时之后b销毁了不会释放其之前指向的地址空间;
7.所有的变量都有隐式的生命周期,生命周期一过,那些拥有所有权的变量将会释放它们指向的地址(编译器帮我们做,不需要像C++一样手动delete)
8.rust里默认的变量(绑定一个值)是不可变的(所以它的借用或叫引用也必须是不可变的,当变量是不可变变量时,它可以在一个作用域里拥有多个不可变借用;
而如果变量是可变的(加了mut),那么在一个作用域里只能有一个可变借用;(有点像读写锁)
9.变量默认不可变,而不是不能移动所有权;
10.虽然非mut的变量,不同获取其mut的引用,但是可以将非mut变量移动所有权给mut变量,比如let a = S{};let mut b = a;
11.Rust里mod.rs和lib.rs都是很特殊的文件,最好就不要定义某个mod文件是mod.rs【对比student.rs】,mod.rs是用来描述一个模块的,比如model模块,可以创建一个model目录,然后里面添加一个mod.rs来描述model目录以及声明model里哪些子模块或者model模块里的哪些方法或struct等可以导出到外部使用;
而lib.rs则是创建lib项目时会在src根目录下,它用来描述src根目录下哪些rs文件可以被导出【其实可以理解为src是一个mod目录,这个时候lib.rs就类似mod.rs了,不过一般不在lib.rs里定义类型或函数】
12.Rust用cargo build来生成库文件或可执行文件,默认是debug的,可以通过cargo build --release来生成release文件;【cargo build会自动去下载依赖包及更新Cargo.lock文件】
13.Rust可以通过include_str!(...)宏在编译期间从配置文件里获取数据赋值给常量;
1
Rust零碎总结的更多相关文章
- Rust语言的多线程编程
我写这篇短文的时候,正值Rust1.0发布不久,严格来说这是一门兼具C语言的执行效率和Java的开发效率的强大语言,它的所有权机制竟然让你无法写出线程不安全的代码,它是一门可以用来写操作系统的系统级语 ...
- Rust初步(七):格式化
在Rust中,如果要进行屏幕输出,或者写入到文件中,需要对数据进行格式化.这一篇总结一下它所支持的几种格式化方式. 这篇文章参考了以下官方文档,不过,按照我的风格,我还是会突出于C#语言的比较,这样可 ...
- Rust初步(六):在C#中使用Rust组件
上一篇文章,我们通过实例比较了一下C#和Rust的性能表现,应该说在Release模式下面,Rust进行计算密集型的运算还是有些比较明显的优势的.那么,我们有没有可能,在C#中做一些快速应用开发,而一 ...
- Rust初步(五):Rust与C#性能比较
我学习Rust的目的并不是说期望用它来取代掉现有的开发平台或语言.相反,我认为当前绝大部分研发团队,都不可能只用一个平台或者一个语言. 当组织增长,他们越来越依赖大量的编程语言.不同的编程语言有不同的 ...
- Rust初步(四):在rust中处理时间
这个看起来是一个很小的问题,我们如果是在.NET里面的话,很简单地可以直接使用System.DateTime.Now获取到当前时间,还可以进行各种不同的计算或者输出.但是这样一个问题,在rust里面, ...
- Rust初步(三):使用atom搭配racer进行rust编程
在rust.cc社区中有一个关于rust编辑器的讨论(话说很多人要学一个新语言,都会立即考虑编辑器的问题,包括我在内),主要关注的是,智能提示(这个真的太重要了).大家讨论下来有几个选择 1. ecl ...
- Rust初步(二):使用Visual Studio Code编写Rust程序(猜猜看游戏)
我是照着下面这篇帮助文档,完成了第一个完整的Rust程序: 猜猜看 游戏 http://kaisery.gitbooks.io/rust-book-chinese/content/content/3. ...
- Rust初步(一):介绍
最近在研究Rust这个新的语言.那么Rust是什么呢? Rust是一个注重安全与速度的现代系统编程语言,通过在没有垃圾回收的情况下保证内存安全来实现它的目标,这使它成为一个在很多其它语言不适合的用例中 ...
- webdriver零碎知识点
#零碎知识点,用于记录平时遇到的比较杂的知识点 driver.current_url 获取当前url phantomjs 实现无浏览器界面自动化测试(driver = webdriver.Phanto ...
随机推荐
- 安装php的oracle扩展
PHP 版本5.5 Windows下 1.首先下载OCI8的扩展 http://pecl.php.net/package/o... 我这里下的版本是5.5 Thread Safe (TS) x86 版 ...
- luogu_P3313 [SDOI2014]旅行
传送门 Solution 第二次学习可持久化线段树 打了一道裸题来练习一下-- 对于每个宗教都可以开一个主席树 基础操作 树剖lca Code #include<bits/stdc++.h&g ...
- SSH如何使用
如何查看SSH服务是否已经安装? 在终端命令行执行 rpm -qa | grep "ssh" 执行结果请看下图,说明已经安装:其实在安装linux操作系统的时候默认就会安装上的. ...
- 怎么根据id匹配到名字?
下拉框---(ps:为了不泄漏隐私,只能截出来一丢丢) table某两列--- 在下拉框是有调渠道的接口,但是table中只获取到了一个id,并没有渠道名称 1.首先获取到那个接口,将mapForCh ...
- 2018-2019-2 网络对抗技术 20165322 Exp8 Web基础
2018-2019-2 网络对抗技术 20165322 Exp8 Web基础 目录 实验原理 实验内容与步骤 Web前端HTML Web前端javascipt Web后端:MySQL基础:正常安装.启 ...
- C# WinForm中的一些小问题
前言 记一些C#窗体应用编程中的小问题. DataGridView 设置Selected = true后实际选中行标依旧是第一行. 通常通过this.dataGridView1.Rows[i].Sel ...
- Windows 实例远程桌面报错“没有远程桌面授权服务器可以提供许可证”
参考阿里云帮助文档: https://help.aliyun.com/knowledge_detail/40859.html?spm=5176.10695662.1996646101.searchcl ...
- 小福bbs-冲刺日志(第五天)
[小福bbs-冲刺日志(第五天)] 这个作业属于哪个课程 班级链接 这个作业要求在哪里 作业要求的链接 团队名称 小福bbs 这个作业的目标 UI改进,前端页面改进,后端部分功能测试交予UI 作业的正 ...
- std::shared_mutex和std::mutex的性能对比(banchmark)
原文作者:@玄冬Wong 转载请注明原文出处:http://aigo.iteye.com/blog/2296462 key world: std::shared_mutex.std::mutex.pe ...
- OMPL RRTConnet 生成路径和可视化
默认规划路径算法和RRTConnet路径规划算法生成路径 1. 源代码 #include <ompl/base/SpaceInformation.h> #include <ompl ...