刷新
Rust多线程中安全的使用变量

博主头像 在Rust语言中,一个既引人入胜又可能带来挑战的特性是闭包如何从其所在环境中捕获变量,尤其是在涉及多线程编程的情境下。 如果尝试在不使用move关键字的情况下创建新线程并传递数据至闭包内,编译器将很可能返回一系列与生命周期、借用规则及所有权相关的复杂错误信息。 不过,这种机制虽然增加了学习曲线,但也 ...

[rustGUI][iced]基于rust的GUI库iced(0.13)的部件学习(05):svg图片转为png格式(暨svg部件的使用)

博主头像 前言 本文是关于iced库的部件介绍,iced库是基于rust的GUI库,作者自述是受Elm启发。 iced目前的版本是0.13.1,相较于此前的0.12版本,有较大改动。 本合集是基于新版本的关于分部件(widget)的使用介绍,包括源代码介绍、实例使用等。 环境配置 系统:window10 平台 ...

[rustGUI][iced]基于rust的GUI库iced(0.13)的部件学习(04):实现窗口主题(颜色)变换(暨menu菜单的使用)

博主头像 前言 本文是关于iced库的部件介绍,iced库是基于rust的GUI库,作者自述是受Elm启发。 iced目前的版本是0.13.1,相较于此前的0.12版本,有较大改动。 本合集是基于新版本的关于分部件(widget)的使用介绍,包括源代码介绍、实例使用等。 环境配置 系统:window10 平台 ...

rust学习十七.1、async和await

本文对应相关书籍17.1章节。 先言:async和多线程没有什么密切关系,当然也不是毫无关系! 一、async在rust到底是什么 async中文的意思是异步,在编程中指的是:执行一段代码,主线程可以在等待完成之前,先做其它事情。 如果有写过前端代码,就明白这个东西。例如经典的jquery的ajax ...

rust学习十六.3、并发-线程之间共享数据

线程之间共享内存数据,即go中部分人所憎恶的方式! 然而,这个方式并非没有其优点,否则操作系统也不提供这种实现方式。 闲言少序,上正文! 一、概述 * 1.当我们大谈基于信道通信时,应该指的是应用级别。如果是操作系统,应该还是会有多种措施的,否则rust的源头在哪里来着。 * 2.rust共享内存, ...

rust学习十六.2、并发-利用消息传递进行线程间通讯

通过信道(channel)传递消息是rust的解决线程之间通信的2个工具之一,另外1个是共享内存状态。 注:channel有多种译法,有的地方翻译为通道、频道,此处循例称为“信道" rust推出这个,明显地是因为受到go之类的影响。 在书籍中,作者提到go编程文档中的内容: 不要通过共享内存来通讯; ...

[rustGUI][iced]基于rust的GUI库iced(0.13)的部件学习(03):图像的导入、显示、调整(暨image部件的使用介绍)

博主头像 前言 本文是关于iced库的部件介绍,iced库是基于rust的GUI库,作者自述是受Elm启发。 iced目前的版本是0.13.1,相较于此前的0.12版本,有较大改动。 本合集是基于新版本的关于分部件(widget)的使用介绍,包括源代码介绍、实例使用等。 环境配置 系统:window10 平台 ...

rust学习十六.1、并发-乱弹和一个简单并发例子

如书本作者所言,并发编程在绝大部分语言中,都是相对复杂和困难的。 所以,涉及的内容会相对多一些,所涵盖的内容绝对不是几篇文章所可以容纳的。 权当一个乱弹琴! 和此系列的其它文章一样,本文的内容绝大部分来自于相关书籍,本人做了一些摘裁的工作,取我所需! 一、无畏并发 * 1.并发(concurrent ...

[rustGUI][iced]基于rust的GUI库iced(0.13)的部件学习(02):滑动条部件实现部件(文本或其他)缩放(slider)

博主头像 前言 本文是关于iced库的部件介绍,iced库是基于rust的GUI库,作者自述是受Elm启发。 iced目前的版本是0.13.1,相较于此前的0.12版本,有较大改动。 本合集是基于新版本的关于分部件(widget)的使用介绍,包括源代码介绍、实例使用等。 环境配置 系统:window10 平台 ...

rust学习十五.5、引用循环和内存泄露

这个章节主要是为了引出弱引用这个奇怪的概念。 说实在,这个没有什么太好写的,因为内容比较晦涩难懂! 在其它语言中,也常常存在所谓循环引用问题,和大部分问题一样,在其它语言中这些基本上都不是问题。但是在rust中,这是一个致命的问题。 例如有a,b两个点,a指向b,b指向a。 如果根据截止当前的知识( ...

rust学习十五.4、Rc和RefCell指针

一、前言 作为初学者,在只学习了前面几个章节的时候,我以为rust的所有权规则和它说的是一样的。 但实际上,rust发明人并没有遵循这个规则。按照我的想法,应该是因为如果坚持那样可能编写某些代码会太痛苦,甚至可能根本无法实现。 “可能根本无法实现”这是一个没有去证实的猜想。 不过,我很坚信:如果还是 ...

rust学习十五.3、智能指针相关的Deref和Drop特质

一、前言 智能指针为什么称为智能指针? 大概因为它所包含的额外功能。 这些额外的功能使得编码或者运行时让指针看起来更有效、并体现某些“智”的特征,所以,我猜测这应该是rust发明人这么称呼此类对象为智能的原因。 据前面有关章节所述,我们知道智能指针多基于结构体(struct)扩展实现。 我们知道,s ...

rust学习十五.2、智能指针之Box(盒子)指针

Box 原意是盒子,实际生活是作为容器使用。 Rust没有称为Container,而是称为Box,体现了他们一贯的随意性。 不过Box这个词汇倒是可以反映盒子指针的特点:就是一个容器,没有什么特别的。 一、盒子指针定义 #[lang = "owned_box"] #[fundamental] #[s ...

rust学习十五.1、智能指针基本概念

本文没有什么需要特别详细阐述的内容,基本都是一些基础性的概念和一些空洞的定义。 一、基本概念 指针 -拥有一个指向一个堆数据的地址的变量。本身是变量,但其数据就是一个地址。 智能指针-一种特别的指针(也是变量),除了指向数据的地址,通常还具有元数据和其它功能。 智能指针通常使用结构体实现。智能指针不 ...

rust学习十四.2、工作空间(workspace)

和大部分语言一样,cargo也可以创建一个工作空间,以便可以包含多个二进制单元和库单元,从而构建较为复杂的工程。 构建这样一个空间空间主要依赖两个手段:Cargo.toml和单元之间的目录结构 从效果上看,rust的Cargo在工作空间上的管理和maven大体相似,但是还不如maven那么的人性化。 ...

rust学习十四.1、编译和发布单元包Crate

本文简要介绍如何编译和发布单元包(crate)。 很可惜的是,找了一会,没有发现可以发布到除了Crates.io之外的地方。 可能是我没有找到,也可能仅仅是因为我本人仅是初学者。希望国内的大学和其它机构能够创建那么一个国内的库,避免哪天封禁后,无处可去。 本文对应相关书籍的第十四章节的第1,2子章节 ...

rust学习十三.2、迭代器

Iterator(迭代器)是一个比较常见的概念,大部分语言都有。大部分语言实现迭代器的逻辑并没有特别的。 看完了有关内容,作者的意思是:rust的迭代器和匿名函数一样,都是为了提供时下流行的函数式编程。 此二者为rust实现零成本抽象提供了不少的贡献。 本部分概念比较多,如果是编程初学者可能会有点吃 ...