Rust语言学习笔记
文章平均质量分 90
已经六七年没有用过C/C++做项目了,最近承接了一个项目,做得非常痛苦,连续几个通宵也无法改变失败的结局。但这坚定了学习Rust的决心,希望能借助Rust打开一片新天地。
swanmy
这个作者很懒,什么都没留下…
展开
-
在Windows上搭建Rust开发环境——Clion篇
文章目录在Windows上搭建Rust开发环境——Clion篇安装mingw64安装Rusthello world安装Clion使用Clion创建并调试项目在Windows上搭建Rust开发环境——Clion篇刚开始学习Rust的时候,写过一篇《在Windows上搭建Rust开发环境》,当时选择使用VSCode作为开发工具。由于工作的原因,放下Rust很久了,Rust的生态也发生了很大的变化。听闻Jetbrains出品的Clion配置Rust插件已经可以很好的支持Rust的开发了。一向对jetbrain原创 2021-10-21 10:29:26 · 14600 阅读 · 4 评论 -
使用Rust创建库,并在exe中调用
文章目录使用Rust创建库,并在exe中调用创建numrust库在库中创建mod在exe中调用库使用Rust创建库,并在exe中调用使用cargo new创建项目时,有项目类型的选项:–bin:编译为可执行文件–lib:编译为库文件默认的,是–lib。事实上,Rust能创建的库的种类有下面几种:rlib:Rust库,这是cargo new默认的种类,只能被Rust调用;dylib:Rust规范的动态链接库,windows上编译成.dll,linux上编译成.so,也只能被Rust调用;原创 2021-10-21 14:28:02 · 4108 阅读 · 0 评论 -
Rust综合实践——模拟cmd的文件操作
Rust综合实践——模拟cmd的文件操作这是我用Rust写的第一个项目:实现一个cmd,可以从标准输入中读取命令,命令包括:ls:列出当前目录的文件列表touch: 创建指定名称的文件cat:显示指定文件的内容mkdir: 创建指定名称的目录cp:复制文件mv:重命名文件或目录rm: 删除文件或目录exit:退出当然,不可能完全实现上面linux命令的全部功能,只是为了学习文件操作,实现最基本的功能。框架搭建使用cargo创建项目:cargo new cmd将上述命令定义为原创 2020-09-16 15:32:45 · 2530 阅读 · 0 评论 -
Rust的并发编程(三)协程并发
文章目录Rust的并发编程(三)协程Rust的并发编程(三)并发,是指在宏观意义上同一时间处理多个任务。并发的方式一般包含为三种:多进程、多线程以及最近几年刚刚火起来的协程。协程协程与进程和线程不是一个级别的概念。进程和线程都是操作系统任务调度的单位,而协程不是,他并不受操作系统的约束,只是通过异步的手段,让单线程的程序有了并发的能力。协程的并发需要自己的程序实现调度,而Rust的标准库中并没有提供调度协程的模块,需要通过第三方库futures来进行,futures库的资料能查到的很少,大部分都是原创 2020-09-11 11:33:53 · 8997 阅读 · 8 评论 -
Rust的并发编程(二) 多线程并发
文章目录Rust的并发编程(二)多线程并发创建子线程线程间通信使用通道传递数据共享内存Rust的并发编程(二)并发,是指在宏观意义上同一时间处理多个任务。并发的方式一般包含为三种:多进程、多线程以及最近几年刚刚火起来的协程。多线程并发线程(thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。创建子线程Rust使用标准库中的thread模块创建线程:use原创 2020-09-10 11:33:12 · 9923 阅读 · 1 评论 -
Rust的并发编程(一)多进程并发
文章目录Rust的并发编程(一)多进程并发创建子进程等待子进程结束指定子进程的命令行参数进程间通信Rust的并发编程并发,是指在宏观意义上同一时间处理多个任务。并发的方式一般包含为三种:多进程、多线程以及最近几年刚刚火起来的协程。(一)多进程并发创建子进程首先,我们创建两个项目,一个为子进程,一个为主进程。在子进程的main.rs中,编写如下代码:use std::thread::sleep;use std::time::Duration;fn main() { print原创 2020-09-09 11:23:33 · 6793 阅读 · 0 评论 -
Rust的错误处理机制
文章目录Rust的错误处理Rust还会发生崩溃吗?错误的分类不可恢复的错误可恢复的错误传播错误Rust的错误处理任何语言都需要有错误处理机制,看到主流的语言清一色的try…catch…,Go和Rust又坐不住了,纷纷提出了自己的错误处理机制。Go的错误处理机制被骂的体无完肤,而Rust的错误处理却获赞不少。那么Rust的错误处理有什么独到之处呢,一起来学习一下吧。Rust还会发生崩溃吗?即使try…catch…,也有很多不能处理的错误而引发崩溃,是的,任何一种错误处理机制都不可能100%的捕获所有的原创 2020-09-07 17:12:59 · 2877 阅读 · 0 评论 -
Rust的闭包
文章目录Rust的闭包创建闭包闭包捕获当前环境中的变量闭包作为函数参数Rust的闭包几乎每一种比C语言高级的语言都有闭包。Rust也同样支持闭包。闭包有一个很通俗的名称:匿名函数,它有着如下优点:创建闭包不用为函数取名,方便快捷闭包可以捕获调用者作用域中的值闭包可以被保存进变量或作为参数传递给其他函数创建闭包Rust创建闭包的语法很简单:|参数列表| -> 返回类型 {代码段}。用两个竖线将函数参数包裹起来,后面接返回值的类型,最后是用花括号包裹的代码段就可以了。如:fn main原创 2020-09-07 10:51:27 · 3851 阅读 · 4 评论 -
Rust的泛型
文章目录Rust的泛型在函数中使用泛型特性与特性绑定在结构体中使用泛型Rust的泛型在函数中使用泛型项目经理总是善变的,有一天项目经理告诉我,替客户计算一个圆形的面积。客户要求很简单,半径只会是u8类型。好,我写了如下代码:fn area_u8(r: u8) -> u8 { r * r}fn main() { println!("{}", area_u8(3));}可第二天项目经理又来了,说客户说的不对,半径某种情况下还会是u16。唉,客户就是上帝,项目经理也没有办原创 2020-09-04 10:55:35 · 3946 阅读 · 2 评论 -
详解Rust的模式
文章目录详解Rust的模式什么是模式哪里能用到模式letif letwhile letfor函数参数match解构进阶解构结构体解构枚举匹配进阶匹配多个模式匹配值的范围匹配结构体详解Rust的模式模式是学习Rust以来见过最多的词汇之一。最开始,我对模式的印象就是指的是match语句。随着学习的深入,我意识到这个理解太片面了。Rust的模式主要有两个作用,一个是解构,一个是匹配。模式Rust编程的始终,可以说,有赋值的地方,就有模式。什么是模式模式是 Rust 中特殊的语法, 它用来匹配类型中的结构原创 2020-09-03 16:32:32 · 3049 阅读 · 0 评论 -
Rust的面向对象(五)——面向对象
文章目录Rust的面向对象(五)——面向对象面向对象封装继承与多态(特性)Rust的面向对象(五)——面向对象从1973年C语言主体完成到1983年C++正式命名,10年的时间,编程理念经历了一次从面向过程到面向对象的蜕变。数据的组织形式也从struct到class得到了升华。自那以后,几乎所有语言的类都是class,相当一部分程序员知道怎么用class却不能准确说出来面向对象是什么。然而,Go和Rust却同时站出来说:“我们不需要class。”顿时,全场静音。事实上,面向对象的概念早在1967年的S原创 2020-09-02 17:21:21 · 5368 阅读 · 1 评论 -
Rust的面向对象(四)——为结构体或枚举实现特性
文章目录Rust的面向对象(四)——为结构体或枚举实现特性为结构体或枚举实现特性定义特性为结构体实现特性调用结构体的特性方法为多个结构体实现同一特性Rust的面向对象(四)——为结构体或枚举实现特性从1973年C语言主体完成到1983年C++正式命名,10年的时间,编程理念经历了一次从面向过程到面向对象的蜕变。数据的组织形式也从struct到class得到了升华。自那以后,几乎所有语言的类都是class,相当一部分程序员知道怎么用class却不能准确说出来面向对象是什么。然而,Go和Rust却同时站出来原创 2020-09-02 13:53:25 · 794 阅读 · 0 评论 -
Rust的面向对象(三)——为结构体或枚举实现方法
文章目录Rust的面向对象(三)——为结构体或枚举实现方法为结构体或枚举实现方法方法关联函数为枚举实现方法多个impl块Rust的面向对象(三)——为结构体或枚举实现方法从1973年C语言主体完成到1983年C++正式命名,10年的时间,编程理念经历了一次从面向过程到面向对象的蜕变。数据的组织形式也从struct到class得到了升华。自那以后,几乎所有语言的类都是class,相当一部分程序员知道怎么用class却不能准确说出来面向对象是什么。然而,Go和Rust却同时站出来说:“我们不需要class。原创 2020-08-26 11:37:21 · 1226 阅读 · 0 评论 -
Rust的面向对象(二)——枚举
文章目录Rust的面向对象(二)——枚举枚举一般的枚举不一般的枚举内置的枚举(Option\)模式匹配Rust的面向对象(二)——枚举从1973年C语言主体完成到1983年C++正式命名,10年的时间,编程理念经历了一次从面向过程到面向对象的蜕变。数据的组织形式也从struct到class得到了升华。自那以后,几乎所有语言的类都是class,相当一部分程序员知道怎么用class却不能准确说出来面向对象是什么。然而,Go和Rust却同时站出来说:“我们不需要class。”顿时,全场静音。事实上,面向对象原创 2020-08-26 11:12:30 · 947 阅读 · 0 评论 -
Rust的面向对象(一)——结构体
Rust的面向对象(一)——结构体从1973年C语言主体完成到1983年C++正式命名,10年的时间,编程理念经历了一次从面向过程到面向对象的蜕变。数据的组织形式也从struct到class得到了升华。自那以后,几乎所有语言的类都是class,相当一部分程序员知道怎么用class却不能准确说出来面向对象是什么。然而,Go和Rust却同时站出来说:“我们不需要class。”顿时,全场静音。事实上,面向对象的概念早在1967年的Simula语言中就开始提出来了,比C语言的面世还早了6年。可是时至今日,全网也原创 2020-08-26 11:05:54 · 2099 阅读 · 0 评论 -
理解Rust的所有权
什么是所有权Rust的所有权,是一个跨时代的理念,是内存管理的第二次革命。较低级的语言依赖程序员分配和释放内存,一不小心就会出现空指针、野指针破坏内存;较高级的语言使用垃圾回收的机制管理内存,在程序运行时不断地寻找不再使用的内存,虽然安全,却加重了程序的负担;Rust的所有权理念横空出世,通过所有权系统管理内存, 编译器在编译时会根据一系列的规则进行检查,在运行时,所有权系统的任何功能都不会减...原创 2020-01-15 16:33:23 · 1851 阅读 · 0 评论 -
第一个完整的工程——解析《Rust程序设计语言第二版中文版》中猜猜看游戏代码
《Rust程序设计语言第二版中文版》中,把猜猜看游戏放在了第二章讲解,我个人觉得还是学完了基本的语法后再回来学习。现在,终于可以用这个实例来感受Rust的风采了。这个实例可谓麻雀虽小,五脏俱全,包含了使用cargo进行工程管理、包管理以及使用Rust引用库和对标准输入输出的处理。工程管理创建工程使用cargo new命令创建新的工程,先来使用cargo help new命令看一下new的参...原创 2020-01-13 14:07:40 · 1428 阅读 · 1 评论 -
Rust的控制流:条件、循环以及模式匹配
条件控制Rust的条件控制也是使用if else,和其他语言相比没有多大区别,直接看例子:fn main() { let number = 10; if number < 0 { println!("number小于0"); } else if 0 <= number && number <= 5...原创 2020-01-10 09:02:01 · 1975 阅读 · 2 评论 -
Rust的基础概念
文章目录数据类型标量类型整型浮点型布尔类型字符类型复合类型数组元组字符串切片元类型变量与常量变量绑定变量的可变性常量静态变量函数与宏函数宏语句与表达式语句表达式数据类型Rust是静态类型的语言,在编译时,必须明确数据的类型。当然,编译器可以根据其值和使用方式,自动推导出数据的类型,不一定需要人工的指定。只有当多种类型都有可能时,需要显式的指定类型。rust使用let关键字绑定(不是声明)变量...原创 2020-01-07 16:18:44 · 2801 阅读 · 2 评论 -
Rust的学习资料
Rust的学习资料Rust的官方网站提供了丰富的学习资料,包括三个部分:开启Rust学习之旅这里面介绍了三本书,第一本是被称为Rust学习圣经的《Rust 程序设计语言》,GitBook中有该本中文版的pdf;第二本名为《Rustlings》会指导我们下载并设置 Rust 工具链,在命令行中教我们阅读和编写 Rust 代码的语法基础;第三本是《通过例子学 Rust》它花了很多篇幅来解释代码...原创 2020-01-03 16:28:09 · 958 阅读 · 0 评论 -
在Windows上搭建Rust开发环境
文章目录安装前的准备安装mingw64安装Rust安装vscode安装前的准备在Windows上搭建Rust开发环境并不困难,前面提到Rust只有编译器没有链接器,还需要C/C++的链接器。所以我们需要先安装C/C++的编译链,Windows上C/C++的编译链有微软提供的visual studio和GNU的mingw,visual studio太过庞大了,我选择使用mingw64作为C/C+...原创 2020-01-03 14:06:07 · 7516 阅读 · 4 评论 -
我为什么选择Rust
我为什么选择Rust原创 2020-01-02 14:22:05 · 1887 阅读 · 1 评论