点击查看代码 fn main() { let v = vec![1, 2, 3, 4]; let a: Vec<_> = v.iter().filter(|x: &&i32| *x % 2 == 0).map(|x: &i32| x * 2).collect(); let b: Vec<_> = v ...
有的时候,可能希望使用的特质已经实现了其它特质(看后面可以知道,实际是要求相关类型实现了其它特质)。 RUST支持为特质(trait)指定限定的特质。 例如我们定义特质A,之后定义了类型T,这个时候还希望T已经实现了特质TC。 在rust中就是这个语法: trait tx:t1 trait tx:t ...
rust中看不到java等一些OOP语言的中用于修饰方法的static之类的关键字眼。 注:rust有static关键字,目前是用于修饰生命周期的或者是变量的 例如: let leaked_str: &'static str = Box::leak(tmp.into_boxed_str()); st ...
一、前言 为通用类型赋予一个默认的类型,大部分的语言是没有这个特性的,但是也有例外的,例如TypeScript(可能还有其它)。 例如TypeScript可以这样使用: class MyClass<T = number> { value: T; constructor(value: T) { thi ...
这是rust特质(trait)中颇有意思的一个特性。 一、前言 这个特性,在前面已经有接触过,例如书本的第十三章节的迭代器特质就有这个例子: impl Iterator for BooksIterator { type Item = String; fn next(&mut self) -> Opt ...
一、前言 看UNION的定义,颇为惊讶,居然有这样的类型(以前没有怎么用过C)。 以下一段来自于文心一言: 1.定义和用途union允许在相同的内存位置存储不同类型的数据,但在任意时刻只能使用其中一个类型。适用于需要在节省内存的情况下灵活存储不同类型数据的场景。2.内存布局所有字段共享相同的内存位置 ...
一、前言 1.1、为什么要使用不安全块访问可变静态变量 根据rust设计人的理解:静态变量是可以修改,所以在并发情况下是可能存在并发/并行时候的不一致问题(如果要修改),这可能就不安全了。 所以,rust规定访问可变静态变量需要使用不安全代码块(unsafe块)。 1.2、比较静态变量和常量 1.常 ...
本文涉及到不安全函数和FFI(foreign function interface)(外部函数接口) 一、简述 在开始前,先介绍下unsafe代码块。 这个其实上一个章节有用到,但是未有正式介绍。 unsafe块形如: unsafe{ } unsafe块可以位于一个函数/方法内,也可以位于函数参数中 ...
一、前言 指针在前面的篇幅中已经介绍过许多,但主要是智能指针。 智能指针管理堆上的数据,并且受到rust的所有权和借用规则管理(注意,这里的所有权和借用有时候不同于最原始的那种)。 智能指针好歹能管着这些数据,但是rust中存在一些不能使用所有权管理的数据,它们需要利用原始指针来管理。 本文简要讨论 ...
浮声三 EAR_v3,基于 Actix_Web 框架的智能化图书管理系统,版本 2.1.2,由 Rusty_Borders 的在线控制系统演变而来。该项目采用 Rust 语言编写,依赖库有 Actix_Web、Tokio、OpenSSL 等,提供用户注册登录、借阅归还图书、单会话、集中身份检查等服务... ...
前言 本文是关于iced库的部件介绍,iced库是基于rust的GUI库,作者自述是受Elm启发。 iced目前的版本是0.13.1,相较于此前的0.12版本,有较大改动。 本合集是基于新版本的关于分部件(widget)的使用介绍,包括源代码介绍、实例使用等。 环境配置 系统:window10 平台 ...
本章节大概是书本上比较特殊一个,因为它没有什么复杂的内容,通篇主要讨论模式匹配的语法。 一、两个名词 a.可反驳 - refutable 对某些可能的值进行匹配会失败的模式被称为是 可反驳的(refutable) let Some(x) = some_option_value;如果 some_opt ...
很可惜,出于一些理由,rust抛弃了OOP的核心特性之一:继承 其中一个理由应该是至关重要的,但是解释的比较模糊:继承增加了复杂性 的确,继承会让rust编译器变得更加复杂。rust编译器虽然足够体贴,但是它偏慢的编译速度也是很多人所吐槽的。 在我对rust编译了解更多之前,我对这个理由无法给出更加 ...
gRPC in Rust Abdusami Rust gRPC abdusami.dev@aliyun.com 背景 最近在开发一个基于微服务架构的项目,最初将各种服务之间的调用设计为通过 HTTP API 的形式,因此每个服务节点都应该实现一个 Web 服务器,并已经确定使用 Actix web ...
在Rust语言中,一个既引人入胜又可能带来挑战的特性是闭包如何从其所在环境中捕获变量,尤其是在涉及多线程编程的情境下。 如果尝试在不使用move关键字的情况下创建新线程并传递数据至闭包内,编译器将很可能返回一系列与生命周期、借用规则及所有权相关的复杂错误信息。 不过,这种机制虽然增加了学习曲线,但也 ...
前言 本文是关于iced库的部件介绍,iced库是基于rust的GUI库,作者自述是受Elm启发。 iced目前的版本是0.13.1,相较于此前的0.12版本,有较大改动。 本合集是基于新版本的关于分部件(widget)的使用介绍,包括源代码介绍、实例使用等。 环境配置 系统:window10 平台 ...
前言 本文是关于iced库的部件介绍,iced库是基于rust的GUI库,作者自述是受Elm启发。 iced目前的版本是0.13.1,相较于此前的0.12版本,有较大改动。 本合集是基于新版本的关于分部件(widget)的使用介绍,包括源代码介绍、实例使用等。 环境配置 系统:window10 平台 ...
本文对应相关书籍17.1章节。 先言:async和多线程没有什么密切关系,当然也不是毫无关系! 一、async在rust到底是什么 async中文的意思是异步,在编程中指的是:执行一段代码,主线程可以在等待完成之前,先做其它事情。 如果有写过前端代码,就明白这个东西。例如经典的jquery的ajax ...
线程之间共享内存数据,即go中部分人所憎恶的方式! 然而,这个方式并非没有其优点,否则操作系统也不提供这种实现方式。 闲言少序,上正文! 一、概述 * 1.当我们大谈基于信道通信时,应该指的是应用级别。如果是操作系统,应该还是会有多种措施的,否则rust的源头在哪里来着。 * 2.rust共享内存, ...
通过信道(channel)传递消息是rust的解决线程之间通信的2个工具之一,另外1个是共享内存状态。 注:channel有多种译法,有的地方翻译为通道、频道,此处循例称为“信道" rust推出这个,明显地是因为受到go之类的影响。 在书籍中,作者提到go编程文档中的内容: 不要通过共享内存来通讯; ...