学习新时代编程语言Rust
文章平均质量分 63
零基础学习新时代编程语言Rust,有趣有料有深度的编程课,最重要的是听得懂学得会答疑及时!
一个不安分的程序员
愿做技术社区的一股清流,让技术帮助更多的人,分享编程感悟,成长我们一直在路上
展开
-
cargo lambda invoke Error: x invalid error payload expected value at line 1 column 1
需要先执行cargo lambda watch, 先前误执行成了cargo watch。原创 2023-11-20 09:42:25 · 145 阅读 · 0 评论 -
dangerousRemoteUrlIpcAccess
在使用Tauri窗口加载外部链接时,需要也能继续使用Tauri API与Rust交互。修改Cargo.toml文件,先前使用的tauri 1.2.4 修改版本为1.3.0 删除tauri-api。步骤1. 升级tauri-cli 及 tauri相关依赖,删除不需要的依赖,执行cargo update。问题解决,发布公告中使用的配置项名称于官方文档中使用的名称不一致,按照官方文档中修改解决。步骤2. 编辑tauri.conf.json文件修改。执行cargo update后仍然报错。原创 2023-05-05 19:42:20 · 695 阅读 · 1 评论 -
Rust Atomic总结笔记
在Rust中原子操作通过std::sync::atomic模块下的原子类型提供,比如:AtomicI32.比较后交换(Compare-and-exchange)操作比较灵活通用,也是实现其它类型操作的基础。获取后修改(Fetch-and-modify)操作在多个线程中修改同一个原子变量时比较有用。简单的存取(load和store)适用于比较简单的线程内部通信,比如:停止标志,状态报告。原子(Automic)操作是不可再分的操作,要么全部执行完成,要么全部不执行。并不是所有的原子类型在所有平台上都有提供。原创 2022-12-26 11:45:52 · 1202 阅读 · 3 评论 -
Rust并发编程总结
普通的线程有可能跟程序运行一样长的时间,所以需要借用有静态生命周期('static)的数据或者使用泄露分配(Box::leak)当条件取决于已经被Mutex保护的数据时,使用Condvar会更方便也相对使用thread::park更高效。&T是共享引用,&mut T是排它引用。数据如果是Send的就可以发送到其它线程中,如果数据是Sync的就可以在线程间共享。可以使用有范围的线程限制线程的生命周期,这样就可以借用非静态生命周期的数据了。一个程序中的多个线程可以并行执行,可以使用spawn创建新的线程.原创 2022-12-26 10:47:00 · 765 阅读 · 0 评论 -
nextjs13 webpack5 使用wasm报错
问题描述:在next 13, webpack 5, react 18的项目中使用Rust编写的wasm报错: ./node_modules/image-map-path/image_map_path_bg.wasmModule parse failed: Unexpected character '' (1:0)The module seem to be a WebAssembly module, but module is not flagged as WebAssembly mo原创 2022-12-08 10:24:33 · 1232 阅读 · 0 评论 -
docker ps报无权限
问题描述:安装docker后使用非root账户不使用sudo执行docker ps报以下错误:解决方法:查看报无权限的/var/run/docker.sock文件属性:看到所属组docker有权限,给当前执行用户添加docker用户组其中tianlang为当前执行用户名再次执行docker ps仍然报错.使用groups检查用户组是否添加成功可以看到使用groups tianlang能看到新添加的docker用户组,直接使用groups却看不到。看来是新增的用户组信息在当前登陆环境还没生效,需要重新登陆下。原创 2022-06-12 21:58:09 · 1011 阅读 · 1 评论 -
Rust编译加速crates.io
编译Rust项目时需要访问crates.io, 由于网络环境原因通常比较慢,可以使用国内的crates.io地址:编辑或新建~/.cargo/config文件,添加以下内容:[source.crates-io]registry = "https://github.com/rust-lang/crates.io-index"replace-with = 'ustc'[source.ustc]registry = "git://mirrors.ustc.edu.cn/crates...原创 2022-03-01 15:05:57 · 887 阅读 · 0 评论 -
Rust Edition 2021发布
随着2021年10月21日Rust 1.56.0发布也一同带来了Edition 2021.发布的新特性有:Disjoint Capture在闭包中如果使用了结构体的某个属性,使用版本2021只会尝试捕获使用到的属性而不是整个结构体,示例代码://-- 可以这样写了,而不用像先前版本还需要先let y = &a.ylet c = || print!("{}", aStruct.y);在使用宏(macros)时支持or patterns了,不需要这样写了:Some(1)|.原创 2021-11-07 18:16:09 · 572 阅读 · 0 评论 -
Rust游戏引擎Bevy初探
那天我偶然看到一个使用Rust编写的游戏引擎(其实是我刻意找的,就是这么自虐),瞬间有了操起来玩玩的兴致,可还没让小妮给爷笑一个就先被它折腾的换了内核。怎么回事,且听我慢慢说。原创 2021-03-30 22:11:03 · 4109 阅读 · 0 评论 -
使用Rust编写推箱子游戏功能篇
教程已翻译完成可以从Github查看也可以在线查看你好棒棒哦,已经读到第2章啦!在这一章中我们将实现一些游戏的基本功能比如:加载地图,让角色动起来等,总之完成了这一章,我们的程序就有点游戏的意思了.激不激动,让我们继续前进,前进,前进进!加载地图在上一章中为了测试渲染系统是否正常,我们编写了一些实体.接下来是时候渲染一个合适的地图了.在这一节中我们就先创建一个文本格式的地图配置文件,后面再加载这个配置文件.以此学习怎么创建加载地图.地图配置首先让我们看一个二维的地图: N N原创 2021-03-08 20:59:22 · 632 阅读 · 0 评论 -
使用Rust编写推箱子游戏基础篇
项目搭建建议使用rustup安装管理Rust。安装好Rust后可以在命令行输入以下俩条命令,检查确认是否安装成功:$ rustc --version rustc 1.40.0$ cargo --version cargo 1.40.0输出的版本信息未必都是这样的,但建议使用比较新的Rust版本。创建项目Cargo是Rust的包管理工具,可以使用它创建我们的游戏项目。首先切换到游戏项目存储路径,然后再输入以下命令:$ cargo init rust-sokoban命令执原创 2021-03-08 14:07:24 · 916 阅读 · 0 评论 -
#![feature]` may not be used on the stable release channel 问题解决及设置Rust Channel的三种方式
今天在编译一个Rust开源项目时报了下面的错误:Compiling base_proc_macro v0.1.0 (/data/code/rust/tensorbase/crates/base/proc_macro)error[E0554]: `#![feature]` may not be used on the stable release channel --> crates/base/proc_macro/src/lib.rs:17:1 |17 | #![feature...原创 2021-01-26 16:55:00 · 5288 阅读 · 2 评论 -
30分钟学Rust教程
以前编写系统如果对性能要求比较高就选用偏低层的开发语言如:C, C++。 如果想快速开发一个系统就使用比较上层的语言如:Python, Java。运行性能还是开发效率这好像是个鱼和熊掌的问题,顾此失彼。直到一门新的语言的出现才给了打破这种僵局的希望,这门新诞生的语言带来了很多语言上的创新,带来了很大胆的尝试,近六年连续荣登StackOverflow最受欢迎语言榜首,微软等科技巨头也纷纷加入试用者的行列并逐渐大规模使用。这门新诞生的语言就是Rust,不是包了层什么语言起个新名字或者直接起个新名字,它真的是一门原创 2020-08-08 22:57:23 · 1008 阅读 · 0 评论 -
使用Rust开发推箱子游戏第一章
第一章: 开始编写游戏前欢迎来到 《使用Rust编写推箱子游戏教程》! 在开始动手编写游戏前,我们需要先了解下:推箱子是个啥样的游戏嘞?没玩过推箱子游戏?想当年用诺基亚黑白屏手机的时候就有这款游戏了。你可以下载一个玩一下或者点这里看下维基百科的介绍。本教程就是教大家怎么使用Rust和现有的游戏引擎、素材,编写一个可以玩的推箱子游戏。谁编写了本教程呢?本教程是由@oliviff 主笔编写,另外还得到了很多优秀贡献者的支持,感谢您们的辛勤付出(排名不分先后):BlaineIva.翻译 2020-07-21 12:26:23 · 1155 阅读 · 0 评论 -
一文读懂Rust的async
因为这些运行时之间有很多`相通`的地方,熟悉了一个再去熟悉其它的就简单了。就像我们学习编程语言一样,学好学深一门编程语言,再去学习其它的语言就快了。不要一开始就几门语言一起学,这样很可能实际开发时这也不行那也不行换来换去还是不能开发出东西.原创 2020-07-13 09:22:51 · 8928 阅读 · 2 评论 -
Rust模板引擎Tera中文英文对照官方文档
翻译中…引入Tera要使用Tera只需要在 Cargo.toml中添加:tera = "1"是不是很简单?默认情况下, Tera会引入一些依赖比如: truncate, date, filesizeformat slugify, urlencode 和 urlencode_strict ,这些依赖是某些过滤器(后面会讲解)要用的. 如果你确定不需要可以在 Cargo.toml中这么配置:[dependencies.tera]version = "1"default-features .翻译 2020-07-03 19:28:04 · 2632 阅读 · 0 评论 -
Rust开发问题记录
error: cannot find derive macro `Serialize` in this scope --> common/src/result.rs:2:10 |2 | #[derive(Serialize,Deserializ)] | ^^^^^^^^^error: cannot find derive macro `Deserializ` in this scope --> common/src/result.rs:2:20 |2 |原创 2020-06-17 15:01:06 · 3876 阅读 · 0 评论 -
Rust Web开发Web第一步用户先登录
开始试用Rust的Web开发组件actix-web使用cargo new新建一个项目rust_login用于实现用户登录功能。在Cargo.toml文件中配置需要的依赖[package]name = "rust_login"version = "0.1.0"authors = ["Tianlang <[email protected]>"]edition = "2018"# See more keys and their definitions at htt原创 2020-05-17 08:13:24 · 3082 阅读 · 3 评论 -
Rust错误处理
简单的错误处理要不是使用“?”,Rust的错误处理会显得有些不够灵巧。要使用“?”我们需要声明返回值类型为Result类型,这种类型可以包含任何具备std::error::Error特征从而可以转换为Bax<Error>类型的错误类型。拿我们需要处理IO错误和字符串转换为数字错误举例:use std::fs::File;use std::io::prelude::*;use ...翻译 2019-12-10 05:47:02 · 1080 阅读 · 0 评论 -
零基础学编程Rust-实战篇-编写乒乓球小游戏2
乒乓球小游戏2-绘制球拍上一期我们成功运行了一个Piston示例,打开了一个窗口并在窗口上画了个红色的方框,为什么画的是一个红色的方框呢?我们能不能画个绿色的长方形呢?接下来我们就研究下代码:打开main.rs文件在文件的第一行使用的extern关键子,声明需要使用外部crate piston_window;我们先前介绍过crate是rust组织代码共享代码的一种形式,类似Java中的...原创 2019-10-24 23:11:34 · 1265 阅读 · 1 评论 -
零基础学编程Rust-实战篇-编写乒乓球小游戏1
这一期开始我们使用Rust编写一个乒乓球小游戏,这个游戏虽然简单但也“麻雀虽小五脏俱全”从这个游戏入门游戏开发再好不过了。游戏界面包含三个部分,一个窗口一个球拍和一个乒乓球。可以通过按左右上下方向键在窗口范围内移动球拍击打乒乓球,乒乓球遇到窗口边缘或球拍时反弹,遇到窗口底部时即游戏失败。我们后面还可以给这个游戏添加记分器,通过增加乒乓球的移动速度提升游戏的难度甚至还可以增加双人对战模式增加游戏...原创 2019-10-18 08:34:08 · 1272 阅读 · 0 评论 -
学习新时代编程语言Rust视频教程-19装代码的箱子——面向对象之封装
接着上期继续说封装,为什么要把代码封装起来呢?因为要将代码分而治之,就像一个团队如果人数太多了就分成多个组,各个组的事务自己管理,组内解决不了的再上升到团队。就像用箱子把相关的代码装起来尽量跟外部做到最少的粘连,这也是面向对象编程中常提的高内聚低耦合,这样对一部分代码的修改升级改造不会影响其它代码。从而达到分而治之易于维护的目的。在Rust中我们可以使用module做为装代码的箱子。module也...原创 2019-10-17 09:20:46 · 262 阅读 · 0 评论 -
学习新时代编程语言Rust视频教程-18罗列出所有裤子品牌名称——面向对象之抽象
上一期我们介绍了struct的使用以及使用impl关键字定义方法、类型关联方法,使用println宏输出裤子对象的编号、名称、长度信息。接下来我们接着说裤子。我们先前讲到小胖的裤子分为A/B/C3个品牌,但是在编写代码时我们的裤子名称是使用字符串表示的,也就是说我们可以任意写裤子品牌名称,可能一不小心就把B牌写成了BB牌,把Adidas写成了Adadas。怎么帮助我们不写错品牌名称呢?在Rust中...原创 2019-10-17 09:15:13 · 463 阅读 · 0 评论 -
学习新时代编程语言Rust-17重构裤子——面向对象之类型系统
上一期我们学习了HashMap的基本使用,在练习中提到裤子的品牌属性,如果现在需要在我们的String类型的裤子上再像添加编号一样添加个品牌,这样在读取裤子品牌时是不是比较麻烦?!能不能自己创建一个裤子类型,可以方便存储和读取编号、品牌、长度等属性信息?在Rust中我们可以使用结构体struct创建一个裤子类型。那什么是结构体呢?我们一再强调编程是需要动手的艺术,不是只拿来讲理论背概念的,所以这...原创 2019-10-14 19:13:26 · 308 阅读 · 0 评论 -
学习新时代编程语言Rust-16使用编号提取裤子
上一期我们使用Vector做为一个可变容量的箱子存放裤子,为了便于区分裤子还给裤子添加上了编号。小胖现在想使用编号从箱子里获取裤子该怎么办呢?! 是不是可以编写一个for循环遍历箱子中的每一条裤子,如果裤子的开头编号跟我们需要的编号一致就返回这条裤子。我们编写代码实现下。这里我们使用字符串的starts_with方法来判断一个字符串是不是以某个字符串为开始的,编写好后运行看下效果,从命令...原创 2019-10-14 19:06:05 · 231 阅读 · 0 评论 -
学习新时代编程语言Rust-15再放里一条裤子
在上一期视频中我们学习了使用切片,使用了一个数组做为箱子存放小胖的裤子。小胖想把其他的裤子也放在这个箱子里。我们使用代码实现下。 首先我们定义另一条裤子。然后使用push方法把裤子放入箱子。在这里输出下箱子里的裤子条数,如果这条裤子放进去了加上原来的5条裤子,箱子里应该有6条裤子了吧?我们运行看下是不是有6条裤子。控制台输出了个错误,错误信息提示我们数组没有push方法。那是不是方法名...原创 2019-10-14 18:48:54 · 184 阅读 · 0 评论 -
学习新时代编程语言Rust-5布尔字符基本数据类型及if表达式
上一期我们学习了数字基本类型包括整数数据类型和浮点数数据类型,并使用 Rust 进行了一些算数运算。在进行算数运算时我们是使用修改 Rust 代码然后重新编译执行的方式,这种方式对于懂编程语言懂 Rust 的人还可以使用,而且每次需要计算新的数字都需要编写代码再编译运行这样也太麻烦。能不能把它做成一个不需要重新编写重新编译只需要在命令行输入我们需要计算的数字和表达式就能计算出结果呢?就像这样,在...原创 2019-09-14 16:02:13 · 299 阅读 · 0 评论 -
学习新时代编程语言Rust-4数字基本数据类型
上一期我们介绍了常量、变量及常用的基本数据类型,在课程的最后我们编写了一个使用常量和变量的例子,大家在观看视频后一定要动手编写运行一下。编程语言就像一个兵器,好比是一把宝剑,无论你读多少武林秘籍看过多少剑术表演不去自己把剑拿起来去感觉下它的重量去舞动下你就永远不会成为一个用剑的高手。这一期我们继续介绍 rust 提供的基本数据类型。数据类型分为俩大类,一类是用来表示单个值的我们称为单量数据类型(...原创 2019-09-09 18:32:57 · 438 阅读 · 0 评论 -
学习新时代编程语言Rust-3基本数据类型
在上一期视频里我们使用 cargo run 运行了个 helloworld ,在 hello-rust 目录里再次运行 tree 命令:我们发现在 hello-rust 目录下多了一个 Cargo.lock 文件和一个 target 文件夹。Cargo.lock 文件用于记录锁定我们当前项目依赖的库版本号,什么意思呢? 比如我们项目现在依赖一个库 L,L 库有俩个版本 1.1 和 1.2 ...原创 2019-09-09 18:24:55 · 234 阅读 · 0 评论 -
学习新时代编程语言Rust-2安装Rust
上一期我们准备了学习环境,如果你在准备过程中遇到了问题欢迎通过平台给我们留言,这一期我们开始安装 Rust首先我们打开 Rust 官方网站:rust-lang.org 有同学可能会问:你直接告诉我们怎么安装不就行了,还看什么官方网站? 这里需要向大家说明下在我们的视频里不但是要像大家展示一个语言怎么用,更重要的是向大家展示我们学习一门新语言的方式方法,我觉得学会怎么学习比学会某一门...原创 2019-09-08 11:18:30 · 485 阅读 · 0 评论 -
学习新时代编程语言Rust-1附件Windows下学习环境准备
有同学反馈不知道怎么在windows下安装linux虚拟机,我们就增加了这一期教大家怎么在windows使用虚拟机软件VirtualBox安装linux虚拟机。 首先我们需要下载一个Virtualbox安装包,可以通过访问virtualbox官网网站virtualbox.org点击左侧的download菜单进入下载页面。选择windows安装包,如果你使用的是苹果操作系统需要点击OSX安装包...原创 2019-09-08 11:00:39 · 274 阅读 · 0 评论 -
学习新时代编程语言Rust-1准备学习环境
这一期我们开始学习前准备工作,首先我们需要一个安装了 Elementray 或者 Ubuntu 操作系统的电脑。 Elementary 和 Ubuntu 都是支持桌面环境的 Linux 操作系统,为什么这里要推荐使用 Linux 而不是Windows 呢 , 原因有俩点: 第1点是根据我学习系统级编程语言如C、C++等的经验,在 windows 下需要的依赖文件比较大,配置毕竟繁琐而在...原创 2019-09-08 10:42:48 · 335 阅读 · 0 评论 -
学习新时代编程语言Rust-6练习优化计算程序
上一期我们留了个练习题,我们一起做一下:打开命令终端,使用 cargo new learn-if 创建一个 learn-if 项目,进入 learn-if 文件夹,使用文本编辑器打开 main.rs 文件,输入双斜杠注释掉 Cargo 帮我们生成的 Hello World 代码,声明一个变量num 并赋值为 30 。接下来创建一个 if 表达式,如果 num大于 100 我们使用 println!...原创 2019-09-14 16:08:34 · 288 阅读 · 0 评论 -
学习新时代编程语言Rust-7复合基本数据类型
在上几期中我们学习了 Rust 提供的4中基本单量类型:整数、浮点数、布尔及字符基本数据类型,学习了 if 表达式用于使用条件控制代码流程,我们还编写了一个计算程序用于练习。如果你在完成练习的过程中遇到问题,欢迎通过平台给我们留言。接下来我们开始学习 Rust 提供的复合基本数据类型,也就是可以表示多条数据的类型。在 Rust 中提供了俩种复合基本类型:第1个大家在数学课上应该都接触过就是数组(...原创 2019-09-14 16:14:11 · 251 阅读 · 0 评论 -
学习新时代编程语言Rust-8复合基本数据类型练习
上一期学习复合数据类型时我们留了一个练习题: 获取当前的月份,如果是 1 月就输出“现在是一月 ”,如果是 2 月就输出”现在是二月,依次类推。我们一起做一下,首先使用 cargo new compound-data-type-exercise 创建一个 Rust 项目,进入项目文件夹,用文本编辑器打开 main.rs 文件。需要输出月份,我们首先需要定义一个数组存储所有月份的中文名...原创 2019-09-14 16:22:32 · 226 阅读 · 0 评论 -
学习新时代编程语言Rust-9循环语句
上一期我们学习并练习了Rust的复合基本数据类型,在练习中我们定义了一个数组用于存储月份的中文名称,现在有一个需求,需要把月份的中文名按顺序打印到控制台,也就是把months数组里的所有元素按顺序输出到控制台: 当然我们可以使用12条println语句一条一条获取并打印months中的元素,现在是一个只有12条元素的数组,如果是一个有100条1000条元素的数组,还这么写就不现实了吧?那有...原创 2019-09-16 23:25:08 · 176 阅读 · 0 评论 -
学习新时代编程语言Rust-10函数
上一期我们学习了循环语句并做了遍历数组的练习,接下来我们学习函数,也就是Function。 如果把基本数据类型比作人的属性比如年龄、性别,那么函数就可以比作是一个人所具备的行为能力,比如:蹦、跳、打招呼。在早期的面向对象语言如Java,中所说的方法其实就是依附在类或者对象上的函数。我们从编写Hello World就开始使用的main方法就是一个函数。 这里我们对比下Rust的Hell...原创 2019-09-18 08:37:05 · 248 阅读 · 0 评论 -
学习新时代编程语言Rust-11垃圾回收机制
先前我们讲到Java等支持自动垃圾回收的语言由于需要在程序运行的时候启动垃圾回收器进行垃圾的扫描标记回收操作,所以会影响程序性能和流畅度。Rust也是不需要程序员手动回收内存的同时又具备C、C++语言的性能,它是怎么做到的呢?接下来我们就开始解密! 我们把从程序编写到运行简单分为三个阶段:编写,编译和执行。 编写阶段是程序员编写程序源代码的阶段,编译是把程序员编写的源代码翻译成机器可以读...原创 2019-09-18 08:45:02 · 3608 阅读 · 2 评论 -
学习新时代编程语言Rust-12小胖的裤子
上一期我们讲垃圾回收机制和拥有关系(所有权)时留了一个思考题:声明一个变量i并赋值为1000,那它的内存结构是怎么样的呢?跟声明的v有什么区别呢? 我们来看下i的内存结构,当我们声明一个i32类型的变量i时并没有使用堆内存而只使用了栈内存。 这跟声明的String类型的v的内存结构就不一样了。这是因为i的类型是i32在程序编译时可以根据i的类型知道i的长度是32位的,也是长度已知并且是...原创 2019-09-18 08:53:39 · 271 阅读 · 0 评论 -
学习新时代编程语言Rust-13裤子太长了
上一期我们说到小胖使用引用在不发生裤子拥有关系变更的情况下让新同事看了裤子,接下来小胖发现裤子太长了,现在裤子长度是10个单位,他穿9个单位长度的裤子。小胖就找女朋友帮他改下裤子,女朋友说这会儿去找工作了需要等晚上回去才能改。小胖又去找妈妈。妈妈把裤长移除了一个单位长度。现在裤子的长度是9了。 我们使用代码实现下故事场景,先输出现在裤子的长度,再定义一个女朋友和妈妈修改裤子的函数。小胖只是找女...原创 2019-09-21 09:47:48 · 162 阅读 · 0 评论