自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(14)
  • 收藏
  • 关注

原创 (十四)Rust 定义和实例化struct

使用 struct 关键字,并为整个struct 命名在花括号内,为所有字段定义名称和类型。

2024-04-09 08:45:00 638 1

原创 (十三)Rust 引用与借用

就比如下图所示,s是s1的引用,s实际就是一个指针,它指向了s1,s1也是一个指针,它指向了存在堆上面的真实的内容,在Rust 里,编译器可保证引用永远都不是悬空引用:如果你引用了某些数据,编译器将保证在引用离开作用域之前数据不会离开作用域。引用在默认情况下也是不可以修改的。可变引用有一个非常重要的限制:在特定作用域内,对某一块数据,只能有一个可变的引用,这样做的好处是在编译时可以防止数据竞争。不可以同时拥有一个可变引用和一个不可变的引用,,如果是多个不可变的引用,那是可以的。(1)一个可变的引用。

2024-04-08 08:45:00 340

原创 (十二)Rust 所有权与函数

2.当一个包含堆数据的变量离开作用域时,它的值就会被drop函数清理,除非数据的所有权移动到了另一个变量上。1.把一个值赋给其他变量时就会发生移动。

2024-04-07 19:30:00 385 1

原创 (十一)Rust 所有权规则、内存和分配

没有GC的话,就需要我们去识别内存何时不再使用,并调用代码将它们返回,如果忘了,那就浪费内存,如果提前做了,那变量会非法,如果做了两次,就会出现严重的bug,针对没有GC的语言,都必须每做一次分配,对应一次释放。字符串字面值就是程序里写死的字符串值,虽然方便,但是不能满足所有的需求场景,原因之一就是因为字符串字面值是不可变的,另一个原因就是所有的字符串值都能在编写代码时确定,就比如获取用户的输入并保存,相对这种情况,Rust 提供了第二种字符串类型:String类型。但并没有复制指针所指向的堆上的数据。

2024-04-07 00:06:53 793 1

原创 (十)Rust 所有权

而heap的内存组织性会差一些,当你把数据放入heap时,会请求一定数量的空间,操作系统在heao里找到一块足够大的空间,把它标记为正在使用,并返回一个指针,也就是这个空间的地址,这个过程就叫做在heap上进行分配,有时仅仅称为“分配”,把值压到stack上不叫分配,因为指针是已知固定大小的,可以把指针存放在stack上,但如果想要实际数据,你必须使用指针来定位。在像Rust这样的系统级编程语言里,一个值是在stack上还是在heap上,堆语言的行为和你为什么要做某些决定是有着重大的影响的。

2024-04-05 23:06:00 304 1

原创 (九)Rust 控制流

使用for循环来遍历集合是既安全又快速的,首先索引不会出错,不会出现索引超出数组范围这种事,其次,每次遍历的时候也不需要检查条件,这样执行速度是比较快的,所以由于for循环的安全,简洁性,它在Rust里是用得最多的循环方式。上面的例子中,如果不小心写错了循环条件,写成了number < 6 ,那么索引就会超出范围,导致程序崩溃,而且遍历之前,都需要检查一下循环条件,所以执行相对来说比较慢。使用for循环更简洁紧凑,它可以针对集合中的每个元素来执行一些代码。可选的,在后面可以加上一个else表达式。

2024-03-31 08:45:00 650 1

原创 (八)Rust 函数和注释

在函数签名里,必须声明每个参数的类型,如果有多个参数,用逗号进行隔开。若想提前返回,可以使用 return 这个关键字,并指定一个值。在->符号后边声明函数返回值的类型,但是不可以对返回值命名。定义函数时里边定义的参数,叫形参(parameters)在Rust里边,返回值就是函数体里面的最后一个表达式的值。调用函数时传递的具体参数,叫实参(arguments)函数体由一系列语句组成,可选的由一个表达式结束。表达式会计算产生一个值(表达式本身就是一个值)大多数函数都是默认使用最后一个表达式作为返回值。

2024-03-30 08:30:00 953

原创 (七)Rust 通用的编程概念

在Rust语言中,声明变量是使用 let 关键字,而且变量默认是不可改变的, 一旦值被绑定在一个名称上, 就不能给这个变量重新赋值,如果重新赋值的话,就会在编译的时候报错。下面是一段代码的例子,可以看到,编译报错cannot assign twice to immutable variable,意思是不可以对不可变的变量两次赋值。可以使用相同的名字声明新的变量,新的变量就会 shadow (隐藏)之前声明的同名变量。如果访问的索引超出了数组的范围,那么,可能它在编译的时候不会报错,但在运行的时候会报错。

2024-03-28 20:15:00 813

原创 (六)Rust 猜数游戏3

但这样又会有一个新的问题,那就是程序会无限运行并不会停止,你可以按Ctrl + C可以让程序停止,也可以输入一个非数字的字符串让程序崩溃而停止,但这两种办法都不是我们想要的,所以我们要让程序知道,当用户猜对数字后,先输出猜对了,然后跳出这个循环,办法很简单,加个花括号,再写上break关键字就可以了。cargo run一下,可以看到程序正常运行了,对于比较的大于,小于,等于也都能正常实现,但有个问题,程序只让猜一次就停止了,并没有达到游戏的目的,所以需要做一个无限循环,直到用户猜对为止。

2024-03-27 08:45:00 206

原创 (五)Rust 猜数游戏2

这个猜数小游戏需要生成一个1-100的随机数,但Rust的标准库里,并没有生成随机数的功能,但Rust团队提供了有这个功能的库,叫rand,也可以通过下面的网址了解一下。底部红色就表示正在把rand包从服务器上加载到本地,加载结束后可以构建看一下结果,可以看到相比之前的构建,这里多了rand。准备工作做完,回到代码,先引入一下rand这个包,rand包里有一个Rng的方法。同时运行程序也可以看到,每次的数字是不一样的,这样就完成了随机数的生成。可以看到,这个库的目前最新版本是0.8.5。

2024-03-26 21:15:00 276

原创 (四)Rust 猜数游戏1

然后用vscode打开,打开src文件夹下的main.rs文件,因为目的是做一个猜数小游戏,所以直接把里面打印的信息修改成提示信息把。基本的代码编写完成,我们来cargo run一下试试,结果发现报错了,因为调用了io库,但是没有引用,所以导致编译不成功。4.如果猜测不正确,则循环让玩家猜测,如果猜测正确,打印一个类似恭喜的信息,然后程序退出。3.程序根据玩家猜测的数字进行判断并提示,是比生成的数字大还是比生成的数字小。2.了解外部的crate,crate就是Rust语言的包,或者叫第三方库。

2024-03-26 08:00:00 371

原创 (三)Rust Cargo

接上一篇所讲,rustc只能编译简单的Rust程序,如果编译复杂的项目,就要使用Cargo。Cargo是Rust的构建系统和包管理工具,它能构建代码,下载依赖库,然后也能构建这些库。在安装Rust的时候,就已经自动把Cargo安装了,使用下面的命令可以知道Cargo是否已经安装可以看到版本号和发布时间等信息我们可以试一下用Cargo来创建一个项目,命令如下cargo new 项目名称。

2024-03-25 21:45:00 722

原创 (二)Rust的第一个程序

打开vscode,并打开事先创建好的文件夹,我这边已经创建了一个名为hello_world的文件夹,然后在资源管理器处右键鼠标,选择新建文件,命名也用hello_world吧,这里需要注意两个地方。4.rustc这个命令只适合编译简单的Rust程序,如果一个Rust程序比较大,里面的文件比较多,那就不合适用rustc命令了,这个时候需要用Cargo,关于Cargo,下一篇再细说。编译完成,那就运行看一下效果,下面是运行的命令,注意Windows系统是反斜杠,Linux和Mac系统是斜杠。

2024-03-25 10:15:00 529

原创 (一)Rust的安装

下载结束后直接双击运行就好,然后出现下图,它提示可能会添加一些注册表,修改一些环境变量什么的,1选项是继续安装,2选项是自定义安装,3选项是取消安装,直接选1继续安装就好。图中,1.74.0表示的是版本号,括号中前边的是commit hash,后面是commit日期。在安装完Rust后,也会在本地安装文档,可离线浏览,运行下面的命令可在浏览器打开本地文档。需要注意的地方是,下载时确认自己的电脑是32位的或者是64位的。打开vscode,在扩展里面搜索rust,点击安装即可。进官网按照指示下载即可。

2024-03-25 03:28:55 422

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除