Rust入坑指南:齐头并进(下)】的更多相关文章

我们知道,如今CPU的计算能力已经非常强大,其速度比内存要高出许多个数量级.为了充分利用CPU资源,多数编程语言都提供了并发编程的能力,Rust也不例外. 聊到并发,就离不开多进程和多线程这两个概念.其中,进程是资源分配的最小单位,而线程是程序运行的最小单位.线程必须依托于进程,多个线程之间是共享进程的内存空间的.进程间的切换复杂,CPU利用率低等缺点让我们在做并发编程时更加倾向于使用多线程的方式. 当然,多线程也有缺点.其一是程序运行顺序不能确定,因为这是由内核来控制的,其二就是多线程编程对开…
如果说前面的坑我们一直在用小铲子挖的话,那么今天的坑就是用挖掘机挖的. 今天要介绍的是Rust的一个核心概念:Ownership.全文将分为什么是Ownership以及Ownership的传递类型两部分. 什么是Ownership 每种编程语言都有自己的一套内存管理的方法.有些需要显式的分配和回收内存(如C),有些语言则依赖于垃圾回收器来回收不使用的内存(如Java).而Rust不属于以上任何一种,它有一套自己的内存管理规则,叫做Ownership. 在具体介绍Ownership之前,我想要先声…
如果你已经开始学习Rust,相信你已经体会过Rust编译器的强大.它可以帮助你避免程序中的大部分错误,但是编译器也不是万能的,如果程序写的不恰当,还是会发生错误,让程序崩溃.所以今天我们就来聊一聊Rust中如何处理程序错误,也就是所谓的"亡羊补牢". 基础概念 在编程中遇到的非正常情况通常可以分为三类:失败.错误.异常. Rust中用两种方式来消除失败:强大的类型系统和断言. 对于类型系统,熟悉Java的同学应该比较清楚.例如我们给一个接收参数为int的函数传入了字符串类型的变量.这是…
今天想和大家一起把我们之前挖的坑再刨深一些.在Java中,一个对象能存活多久全靠JVM来决定,程序员并不需要去关心对象的生命周期,但是在Rust中就大不相同,一个对象从生到死我们都需要掌握的很清楚. 在Rust入坑指南:核心概念一文中我们介绍了Rust的几个核心概念:所有权(Ownership).所有权转移和所有权借用.今天就来介绍Rust中的另外一个核心概念:生命周期. 为什么生命周期要单独介绍呢?因为我在这之前一直没搞清楚Rust中的生命周期参数究竟是怎么一回事. 现在我终于弄明白了,于是迫…
很久没有挖Rust的坑啦,今天来挖一些排列整齐的坑.没错,就是要介绍一些集合类型的数据类型."鳞次栉比"这个标题是不是显得很有文化? 在Rust入坑指南:常规套路一文中我们已经介绍了一些基本数据类型了,它们都存储在栈中,今天我们重点介绍3种数据类型:string,vector和hash map. String String类型我们在之前的学习中已经有了较多的接触,但是没有进行过详细的介绍.有些有编程基础的同学可能不屑于学习String类型,毕竟它在所有编程语言中可以说是最常用的类型了,…
搭建好了开发环境之后,就算是正式跳进Rust的坑了,今天我就要开始继续向下挖了. 由于我们初来乍到 ,对Rust还不熟悉,所以我决定先走一遍常规套路. 变不变的变量 学习一门语言第一个要了解的当然就是变量啦.Rust使用关键字let来定义变量.我们写一个简单的demo so easy!等等,这个小红线是怎么回事?编译错误???别着急,哪里不对点哪里. IDEA告诉我,这个错误是 Cannot assign twice to immutable variable [E0384] 不可变的变量不能赋…
欢迎大家和我一起入坑Rust,以后我就是坑主,我主要负责在前面挖坑,各位可以在上面看,有手痒的也可以和我一起挖.这个坑到底有多深?我也不知道,我是抱着有多深就挖多深的心态来的,下面我先跳了,各位请随意. Rust简介 众所周知,在编程语言中,更易读的高级语言和控制底层资源的低级语言是一对矛盾体.Rust想要挑战这一现状,它尝试为开发者提供更好的体验的同时给予开发者控制底层细节的权限(比如内存使用). 低级语言在开发过程中很容易出现各种细微的错误,它们难以发现但是可能影响巨大.其他大部分低级语言只…
坑越来越深了,在坑里的同学让我看到你们的双手! 前面我们聊过了Rust最基本的几种数据类型.不知道你还记不记得,如果不记得可以先复习一下.上一个坑挖好以后,有同学私信我说坑太深了,下来的时候差点崴了脚.我只能对他说抱歉,下次还有可能更深.不过这篇文章不会那么深了,本文我将带大家探索Structs和Enums这两个坑,没错,是双坑.是不是很惊喜?好了,言归正传.我们先来介绍Structs. Structs Structs在许多语言里都有,是一种自定义的类型,可以类比到Java中的类.Rust中使用…
前文中我们聊了Rust如何管理线程以及如何利用Rust中的锁进行编程.今天我们继续学习并发编程, 原子类型 许多编程语言都会提供原子类型,Rust也不例外,在前文中我们聊了Rust中锁的使用,有了锁,就要小心死锁的问题,Rust虽然声称是安全并发,但是仍然无法帮助我们解决死锁的问题.原子类型就是编程语言为我们提供的无锁并发编程的最佳手段.熟悉Java的同学应该知道,Java的编译器并不能保证代码的执行顺序,编译器会对我们的代码的执行顺序进行优化,这一操作成为指令重排.而Rust的多线程内存模型不…
随着我们的坑越来越多,越来越大,我们必须要对各种坑进行管理了.Rust为我们提供了一套坑务管理系统,方便大家有条不紊的寻找.管理.填埋自己的各种坑. Rust提供给我们一些管理代码的特性: Packages:Cargo的一个特性,帮助你进行构建.测试和共享crates Crates:生成库或可执行文件的模块树 Modules和use:用于控制代码组织.范围和隐私路径 Paths:struct.function和module的命名方法 下面我们来具体看一下这些特性是如何帮助我们组织代码的. Pac…