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零碎总结的更多相关文章

  1. Rust语言的多线程编程

    我写这篇短文的时候,正值Rust1.0发布不久,严格来说这是一门兼具C语言的执行效率和Java的开发效率的强大语言,它的所有权机制竟然让你无法写出线程不安全的代码,它是一门可以用来写操作系统的系统级语 ...

  2. Rust初步(七):格式化

    在Rust中,如果要进行屏幕输出,或者写入到文件中,需要对数据进行格式化.这一篇总结一下它所支持的几种格式化方式. 这篇文章参考了以下官方文档,不过,按照我的风格,我还是会突出于C#语言的比较,这样可 ...

  3. Rust初步(六):在C#中使用Rust组件

    上一篇文章,我们通过实例比较了一下C#和Rust的性能表现,应该说在Release模式下面,Rust进行计算密集型的运算还是有些比较明显的优势的.那么,我们有没有可能,在C#中做一些快速应用开发,而一 ...

  4. Rust初步(五):Rust与C#性能比较

    我学习Rust的目的并不是说期望用它来取代掉现有的开发平台或语言.相反,我认为当前绝大部分研发团队,都不可能只用一个平台或者一个语言. 当组织增长,他们越来越依赖大量的编程语言.不同的编程语言有不同的 ...

  5. Rust初步(四):在rust中处理时间

    这个看起来是一个很小的问题,我们如果是在.NET里面的话,很简单地可以直接使用System.DateTime.Now获取到当前时间,还可以进行各种不同的计算或者输出.但是这样一个问题,在rust里面, ...

  6. Rust初步(三):使用atom搭配racer进行rust编程

    在rust.cc社区中有一个关于rust编辑器的讨论(话说很多人要学一个新语言,都会立即考虑编辑器的问题,包括我在内),主要关注的是,智能提示(这个真的太重要了).大家讨论下来有几个选择 1. ecl ...

  7. Rust初步(二):使用Visual Studio Code编写Rust程序(猜猜看游戏)

    我是照着下面这篇帮助文档,完成了第一个完整的Rust程序: 猜猜看 游戏 http://kaisery.gitbooks.io/rust-book-chinese/content/content/3. ...

  8. Rust初步(一):介绍

    最近在研究Rust这个新的语言.那么Rust是什么呢? Rust是一个注重安全与速度的现代系统编程语言,通过在没有垃圾回收的情况下保证内存安全来实现它的目标,这使它成为一个在很多其它语言不适合的用例中 ...

  9. webdriver零碎知识点

    #零碎知识点,用于记录平时遇到的比较杂的知识点 driver.current_url 获取当前url phantomjs 实现无浏览器界面自动化测试(driver = webdriver.Phanto ...

随机推荐

  1. php md5算法

    <!DOCTYPE html> <html> <body> <?php $str = "Shanghai"; echo md5($str) ...

  2. Note_4.7

    2019/4/7 奇奇怪怪的笔记 狄利克雷卷积  \(μ∗1=ϵ\),莫比乌斯反演 \(Id=φ∗1⇒φ=μ∗Id\) \(d=1∗1⇒1=μ∗d\) \(σ=Id∗1⇒Id=μ∗σ\) \(σ=φ∗ ...

  3. tecplot三维模型绘制二维切片流线

    原视频下载地址链接: https://pan.baidu.com/s/1csugHK 密码: xrni

  4. mysql8数据库连接kettle

    1.将kettle连接mysql的包放入lib文件目录 2.修改data-integration\simple-jndi路径下的jdbc.properties配置文件,加上如下内容(kettle为数据 ...

  5. Java初级黄金体验 其二

    Java初级黄金体验 其二 引言:让我们看一下你的C盘有多少个文件和文件夹 初级 Java IO : 第一个纪念碑 小程序大致功能 让我们看一下E盘有多少个文件 上代码 最近太多的作业 代码可以无限改 ...

  6. Shell登陆远程服务器

    现场服务器较多,密码3个月过期,在到期时需更改密码. 使用expect编写,尝试登陆2次后退出(防止密码错误时账号锁定),超时重试一次. shell脚本调用并定时执行,登陆成功后执行一条命令,如:ho ...

  7. [spring-boot] 多环境配置

    application-{profile}.properties 按照格式创建两个配置文件,一个DEV环境,一个测试环境 修改其端口: server.port=8888 DEV server.port ...

  8. MFC调用CEF实现单页面单COOKIE管理《转》

    cookie简单介绍 cookie存储了网站的一些很重要的信息,如用户身份信息.常用设置.设置地理位置等等各种信息.使用cef访问网站时,如果设置了CefSettings.cache_path参数,则 ...

  9. 快速创建 Vue 项目

    转载:https://www.jianshu.com/p/c7df292915e7 为了便于 Vue 项目的管理, Vue 团队官方开发了 vue-cli 工具. 本文将带您使用 vue-cli 快速 ...

  10. FineReport 交叉报表

    交叉报表 - FineReport报表官网http://www.finereport.com/knowledge/professional/crossreport.html FineReport--- ...