图解AI
致力于:机器学习、深度学习、数据分析、算法、架构、C/C++、Rust、HTML5/webApp、Go、Python、Lua...
展开
-
[Rust进阶篇]-Rust之Fn,FnMut,FnOnce运用笔记
1.闭包的含义再弄清楚Fn, FnMut, FnOnce含义之前,需要了解闭包的含义,什么叫闭包闭包:引用了自由变量的特殊函数。注:其中的自由变量来自于函数外的变量,这个变量在闭包中使用就存在3中状态:1. 不可变引用&T1. 可变引用&mut T1. move然而在rust中,函数和闭包都是实现了Fn、FnMut或FnOnce特质(trait)的类型。任何实现了这三种特质其中一种的类型的对象,都是 可调用对象。2. Fn, FnMut, FnOnce 的区别原创 2021-04-23 14:45:03 · 2356 阅读 · 0 评论 -
[C++&Rust] Rust调用C/C++库笔记-02
1.说明在一个Rust工程中,如果集成C/C++编写的代码,具体步骤如下。2. C++代码编写规范2.1 cpplib.h写法 #ifndef CPPLIB_H #ifdef __cplusplus extern "C" {#endif int max(int a, int b);#ifdef __cplusplus}#endif#endif注意:CPPLIB_H 尽量与文件名保持一致#ifdef __cplusplus 目的是C/C++可以相互调用2.原创 2021-04-15 11:27:17 · 2206 阅读 · 0 评论 -
[C++&Rust] C++调用rust库笔记-01
1.说明在一个C/C++工程中,如果集成rust编写的库,那么在rust写代码时应该尽量C/C++编程规范保持一致,具体步骤如下。2. rust库的编写规范1.创建一个rust 库工程 $ cargo new --lib mylib2.在配置文件Cargo.tomal中配置参数[package]name = "mylib"version = "0.1.0"authors = ["LiuYuGang <huayue430@126.com>"]edition = "201原创 2021-04-15 10:18:16 · 1934 阅读 · 0 评论 -
[Rust进阶篇]-Rust之类型之间转换常用方法总结
1. 数字类型之间转换类型(X)i32i64u32i32-X as i64X as u32i64X as i32-X as u32…………let a = 23i32;let a1 = a as i64;let a1 = a as u32 2. 数字类型转字符串类型(X)i32u32f64Stringa.parse::().unwrap()a.parse::().unwrap()a.parse::().原创 2021-01-26 15:33:16 · 2143 阅读 · 0 评论 -
[Rust进阶篇]-Rust之&str与String比较及转换方法使用总结
1.&str与String区别1) &str类型是Rust语言的原生类型,它指向分配在某处的String的一个*固定*容量,这里又分为2类:a 如果&str指向的是String类型,由于String创建于堆区,则&str指向堆。b 如果&str指向的是字面量字符串(&str),则&str指向的是静态区内存。2) Rust中,字符串(&str和String)Unicode 标量值的序列编码为 utf - 8 字节的流3) &原创 2021-01-26 10:35:25 · 6069 阅读 · 0 评论 -
[Rust进阶篇]-Rust之字符串,字符处理
1. 字符串转字符数组let s = String::from("11100");let mut a:Vec<char> = s.chars().collect();println!("{:?}",a); //['1', '1', '1', '0', '0']2. 字符转数字let a = String::from("11100");let b = String::from("11100");let mut a: Vec<char> = a.chars().coll原创 2021-01-13 11:25:53 · 3391 阅读 · 0 评论 -
[Rust进阶篇]-Rust之&和&mut;Cell和Cell的用法
1.Rust提供了两种引用类型&:共享引用;&mut:可变引用原则同一个作用域下,对于资源对象 A 的引用只允许两种情况, 要么是同时存在 n 个共享引用 &,要么只有一个可变引用 &mut, 共享引用不允许对其作任何修改,可变引用可以修改。1.共享引用& 不允许对值进行修改 let a = 12; let c = &a; a = 13;//报错,不可修改2.可变引用&mut 则可以对值进行修改 let m.原创 2021-01-13 11:23:22 · 1266 阅读 · 0 评论 -
[Rust进阶篇]-Rust之单元测试使用总结
1. 单元测试测试(test)是这样一种 Rust 函数:它保证其他部分的代码按照所希望的行为正常 运行。测试函数的函数体通常会进行一些配置,运行我们想要测试的代码,然后 断言(assert)结果是不是我们所期望的。大多数单元测试都会被放到一个叫 tests 的、带有 #[cfg(test)] 属性 的模块中,测试函数要加上 #[test] 属性。fn sayHi(a:i32) -> i32{ println!("say hi !"); a}fn say_hello(原创 2021-01-18 16:41:41 · 1578 阅读 · 0 评论 -
[Rust进阶篇]-Rust之如何组织项目目录
1. 含义Packages: Cargo提供的让我们创建, 测试和分享Crates的工具.Crates: 提供类库或可执行文件的模块树Modules and use: 管理和组织路径, 及其作用域和访问权限Paths: 如结构体(structs), 函数(function), 或模块(module)等事物的命名方式2. 包与单元包关系包(Packages)和箱(Crates)包(Package)通过Cargo创建. 每一个包(Package)都有一个Cargo.toml文件. 包(Pac原创 2021-01-19 19:10:49 · 2738 阅读 · 0 评论 -
「Rust项目」Rust之前端框架总结
1、前言研究Rust很久了,开始给大家上项目,上项目之前先介绍下Rust常用的web框架及各个框架的优缺点。总之项目选型很重要。python流行常用框架有:Django(较重)、Flask(轻量级)、FastAPI(性能最好)Go语言常用框架:beego(较重)、Gin(轻量级)Rust语言框架:Rocket、Actix-web,Hyper, Yew、Warp、Gotham,Rouille,SHIO,Rustful等用的最多的主要Rocket、Actix-web2、Rocke..原创 2020-12-01 14:32:17 · 3845 阅读 · 0 评论 -
「Rust笔记」Rust之JSON数据处理
JSON 处理JSON 是一种无处不在的开放标准格式, 它使用人类可读的文本来传输由键值对组成的数据对象.这里借助一下serde_json这个库.[dependencies]url = "2.2.0"serde = "1.0.117"serde_derive = "1.0.117"serde_json = "1.0.59"假设有如下文件:{ "name": "John Doe", "age": 43, "address": { "s..原创 2020-12-01 14:30:59 · 4683 阅读 · 2 评论 -
「Rust笔记」Rust之Drop介绍
现在我们讨论了 trait,让我们看看一个由 Rust 标准库提供的特殊 trait,Drop。Droptrait 提供了一个当一个值离开作用域后运行一些代码的方法。例如:struct HasDrop;impl Drop for HasDrop { fn drop(&mut self) { println!("Dropping!"); }}fn main() { let x = HasDrop; // Do stuff.}...原创 2020-12-01 14:30:08 · 2373 阅读 · 0 评论 -
「Rust笔记」Rust具有Copy特性的类型
所有权规则Rust 中的每一个值都有一个被称为其所有者(owner)的变量。 值在任一时刻有且只有一个所有者。 当所有者(变量)离开作用域,这个值将被丢弃。Copy的类型:所有整数类型,比如u32。 布尔类型,bool,它的值是true和false。 所有浮点数类型,比如f64。 字符类型,char。 元组,当且仅当其包含的类型也都是Copy的时候。比如,(i32, i32)是Copy的,但(i32, String)就不是。具有Cop...原创 2020-12-01 14:29:32 · 1399 阅读 · 0 评论 -
「Rust笔记」Rust之引用和借用总结
1、引用(&)&符号表示引用,它们允许你使用值但不获取其所有权。错误示例在不用引用的情况,把一个变量值赋值另外一个变量,之前的变量所有权就转移到了新的变量上了,后面再使用,则会报错。 let s = String::from("hello,world"); let r1 = s; println!("{}",s); println!("{}",r1); 正确示例 let s = String::from("hello,world原创 2020-12-01 14:28:55 · 1394 阅读 · 0 评论 -
「Rust笔记」Rust中的生命周期之协变
前言生命周期代表资源的可用时期。显式生命周期标记是泛型参数的一种,但是有协变的概念。长生命周期作为短生命周期的子类型生命周期声明一个变量,其生命周期开始,变量离开作用域,其生命周期结束。生命周期标记生命周期标记是一种泛型参数,标记的类型:复合类型(结构体) 函数 枚举类型仅当与引用(借用)相关联时。多数情况下生命周期标记可以由编译器为我们推导并标注。一些情况需要程序员显式写出生命周期标记。在函数中,需要显式写出生命周期时,一般是在需要返回参数相关的引用时。(返回堆分配内存时,直原创 2020-12-01 14:28:15 · 1005 阅读 · 0 评论 -
「Rust笔记」Rust之自定义宏写法
宏的分类1)宏按照来源分类声明宏(Declarative Macro)和过程宏(Procedural Macro)。前者指的是用某种语法直接声明出的宏。后者是对应直接生成抽象语法树的过程的宏。2)宏按照使用方式分类属性宏:给声明添加属性的宏,例如 #[derive(Debug)] 和 #[test]。调用宏:像函数一样的宏,例如 println!。3)来源分类与使用分类直接关系明宏都是用 macro_rules! 声明出的,它声明出的一定是调用宏。过程宏可以产生属性宏,也原创 2020-12-01 14:26:54 · 3002 阅读 · 1 评论 -
「Rust进阶笔记」Rust之derive特性总结
前言编译器可以通过#[derive]为一些trait提供基础的实现。 如果需要更复杂的逻辑,这些trait也可以被手动实现。这些可导入的实现:比较:Eq、PartialEq、Ord、PartialOrd Clone:从&T的一个拷贝创建T Copy:把一个类型的move转换为copy Hash:从&T计算它的哈希 Default:创建一个数据类型的空实例 Debug: 用{:?}格式化一个值Debug 用于程序员输出Debugtrait 用于开启格式化字符串中的.原创 2020-12-01 14:24:10 · 7266 阅读 · 2 评论 -
「Rust笔记」rust之类型转换总结
as 运算符as适用类型:i32、i64、f32、f64、u8、u32、char等类型 let a1 = 12.123; let a2 = a1 as i32; let a3 = a1 as u16; println!("{},{},{}",a1,a2,a3); let a4 = a3 as u8 as char; println!("{}",a4其中 char只能与u8类型直接进行互转,否则会报错。2. Trait From 和 Into想把普通类型转化原创 2020-12-01 14:20:16 · 1965 阅读 · 0 评论 -
「Rust笔记」Rust之知识点拾遗汇总
1、const 常量必须指定类型const MAX:i32 = 1000_1000;2、函数返回值 fn func_3(x: i32) -> i32 { //返回值必须声明 x + 1 //没有分号,认为是表达式,返回值,不需要return }fn func_4(x: i32) -> i32 { //返回值必须声明 x + 1; //有分号,认为是陈述,不返回值,值为()}3、break 可以返回值```cpp let mut cou原创 2020-12-01 14:15:11 · 851 阅读 · 0 评论 -
「Rust笔记」Rust之约束
就如泛型类型能够被约束一样,生命周期(它们本身就是泛型)也可以使用约束。: 字符 的意义在这里稍微有些不同,不过 + 是相同的。注意下面的说明:T: 'a:在 T 中的所有引用都必须比生命周期 'a 活得更长。T: Trait + 'a:T 类型必须实现 Trait trait,并且在 T 中的所有引用 都必须比 'a 活得更长。下面例子展示了上述语法的实际应用:use std::fmt::Debug; // 用于约束的 trait。#[derive(Debug)]struct Ref&l原创 2020-12-01 14:10:39 · 728 阅读 · 0 评论 -
「Rust笔记」Rust之vector排序总结
1、前言数据排序经常会使用到,很多语言都自带排序方法,Rust也不例外。这里详细介绍Rust数组排序的方法。2、vector整数排序这里通过 vec::sort 对一个整数 Vector 进行排序fn main() { let mut vec = vec![1, 34, 10, 2, 15]; vec.sort(); println!("{:?}",vec);}运行结果[1, 2, 10, 15, 34]另一种方法是使用 vec::sort_unstable,后者原创 2020-11-14 19:39:38 · 2217 阅读 · 1 评论 -
[Rust笔记]Rust生成随机数的方法
1、前言在项目当中,生成随机数、随机密码等经常会使用到。这里总结下Rust随机数生成的方法。Rust我们要用到包模块 rand。具体实现如下:2、添加模块依赖[dependencies]rand="0.7.9"1、生成随机数利用rand::Rng 库,通过 rand::thread_rng 生成随机数。可以开启多个线程,每个线程都有一个初始化的生成器。整数在其类型范围内均匀分布,浮点数是从 0 均匀分布到 1,但不包括 1use rand::Rng;fn main() { let原创 2020-11-14 16:59:26 · 3462 阅读 · 0 评论 -
「rust笔记」rust之文件读写操作
前言Unix 哲学: “一切皆文件”. 它描述了 Unix 的特性–所有输入/输出资源, 如文档, 目录, 硬盘驱动器, 调制解调器, 键盘, 打印机甚至一些进程间和网络通信, 都是通过文件系统描述的简单的字节流.Rust错误处理-unwrap和 expectResult<T, E> 类型定义了很多辅助方法来处理各种情况。其中之一叫做 unwrap,它的实现就类似于 match 语句。如果 Result 值是成员 Ok,unwrap 会返回 Ok 中的值。use std::fs::Fil原创 2020-11-13 15:32:28 · 3373 阅读 · 0 评论 -
【rust笔记】rust之Trait的使用
1. Trait 定义Trait 定义了一个抽象接口,类似其他语言中的interface,这个抽象接口可以被类型继承。2.Trait的组成部分functions(方法)types(类型)constants(常量)所有的Trait都定义了一个隐含类型Self,其指向实现该Trait的类型。Traits可能也包含额外的类型参数,这些类型参数(包括Self),与往常一样可能受到其他Traits等的约束。类型需要通过独立的implementations去实现不同的Trait。2.Self与sel原创 2021-01-06 16:23:56 · 1448 阅读 · 2 评论 -
【rust笔记】rust之泛型的使用
泛型定义rust泛型跟C++中泛型一样的。泛型是具体类型或者其它属性的抽象替代,用于减少代码的重复。在介绍泛型之前需要了解一个概念 泛型约束。如下:泛型约束第一部分举的例子中的PartialOrd + Copy就是泛型约束。那么什么是泛型约束呢?Rust中的泛型和C++中的template是比较相似的,但是差别很大。C++是在实例化的时候进行类型检查。而Rust则是当场进行检查,所以需要用户提供合理的“泛型约束”,比如你需要使用“>”时,需要数据类型能够使用“>”运算符。1.常规函原创 2020-11-12 14:02:39 · 1144 阅读 · 1 评论 -
[rust整理笔记]rust基本语法之交叉编译-06
交叉编译(Cross Compiler)Targetstdrustccargonotesi686-apple-darwin✓✓i686-pc-windows-gnu✓✓i686-pc-windows-msvc✓✓i686-unknown-linux-gnu✓✓x86_64-apple-darwin✓✓...原创 2019-03-15 23:55:19 · 6314 阅读 · 4 评论 -
[rust整理笔记]rust基本语法之控制结构-04
控制结构1. if语句let x = 5; if x == 5 { println!(&quot;相等&quot;) } else { println!(&quot;不相等&quot;) } 错误写法: if x { println!(&quot;相等&quot;) } 注意:if 后面的条件表达式只能是原创 2019-03-03 22:09:46 · 5193 阅读 · 0 评论 -
[rust整理笔记]rust基本语法之通用集合-03
这里主要介绍4种集合类型:1. 数组2. 动态数组vector3. 字符串4. 哈希map1 数组1.1 数组的定义// 1)直接定义 let arr = [1,2,3]; println!(&amp;quot;{:?}&amp;quot;,arr);//[1,2,3]// 2)指定大小 let arr1:[i32;5] = [1,2,3,4,5]; println!(...原创 2019-03-03 15:56:10 · 4872 阅读 · 0 评论 -
[rust整理笔记]rust基本语法数据类型-02
1.变量/常量1.1 不可变变量let a = 5; 是一个不可变的变量,如果改变a的值,编译器则会报错;1.2 可变变量定义let mut a = 10;a = 1001.3 指定类型的变量let a: i16 = 20注意:i:表示有符号整型,i8,i16,i32,i64;u:表示无符号整型,u8,u16,u32,u64;1.4 变量在使用前要进行初始化,否则会...原创 2019-03-02 15:49:04 · 5956 阅读 · 0 评论 -
[rust整理笔记]rust基本操作-01
rust mac安装1)curl https://sh.rustup.rs -sSf | shsource $HOME/.cargo/envrustc --version如果显示版本号、提交的 hash 值和提交时间,恭喜你!则 Rust 已成功安装!cargo --version如果你看到了版本号,一切 OK!作者:MicoCube链接:https://www.jianshu.c...原创 2019-02-27 14:46:45 · 5700 阅读 · 1 评论 -
[rust整理笔记]一门比较有前景的编程语言--rust
Rust是mozilla推出的一款系统级的编程语言,其两大特点在于零开销抽象和安全性。rust特点类似于C++,Rust的定位是一款系统级语言,它所有特点:1.零开销抽象2.没有gc3.内存模型没有高度封装4.语法干净正交,没有C++那么繁琐。5.安全性。Rust语法引入所有权和生命期概念,在编译期就能检查出一部分内存管理错误,这是rust的一个杀手锏的特性。6.现代语言特性。语言...原创 2019-02-21 18:45:00 · 13226 阅读 · 3 评论 -
[rust整理笔记]rust基本语法之option解耦-07
例子let sp = Some(111);if let Some(b) = sp{ println!("{}", b); }else{ println!("wrong"); }原理Some(T)存在于Option枚举类型中,它的定义:enum Option<T> { Some(T), None,}这里使用了范型。也就是说Option枚...原创 2019-03-16 22:54:30 · 7140 阅读 · 1 评论 -
【常用数据结构及应用】算法笔记---链表
链表原创 2019-03-17 12:25:49 · 4856 阅读 · 1 评论 -
[rust整理笔记]rust基本语法之宏的自定义-08
Rust 提供了一个强大的宏系统,可进行元编程(metaprogramming)。但宏并不产生一个函数调用,而是展开成源码并结合程序的其余代码一起进行编译。// 这是一个简单简单的宏,名为 `say_hello`。macro_rules! say_hello { // `()` 表示此宏不接受任何参数。 () =&gt; ( // 此宏将会展开成这个代码块里面的...原创 2019-03-17 14:10:31 · 7984 阅读 · 0 评论 -
[算法Rust,Go,Python,JS实现)]算法与数据结构汇总
用四种语言(go,javascript,python,rust)实现LeetCode题目,顺便对数据结构,算法进行汇总和总结。原创 2019-02-23 21:33:27 · 4738 阅读 · 0 评论 -
[rust整理笔记]rust操作小技巧
原文地址:原文地址:https://saghm.github.io/five-rust-things/#![allow(dead_code)]#[derive(Debug)]struct Soo{ x:i32, y:i32}fn main() {// 1.print 调试 let s0 = Soo{x:12,y:30};// 通过 .. 操作符后面跟着这...原创 2019-04-09 18:48:48 · 5252 阅读 · 0 评论 -
[WebAssembly技术]Rust编译成wasm文件
WebAssembly (以下简称WASM)最近听到最多的,相对比较火的一个技术,现在主流的浏览器已经完成了对WebAssembly 的初步实现,并且围绕wasm的工具链也日趋完善。由于 WASM 是静态类型,因此很难直接使用我们熟悉的 JavaScript来直接编写,目前的 WASM 都是通过其他静态语言编译而来。目前支持 WASM 的语言有 C++、Rust、Go等。其中 Rust 对 WA...原创 2019-04-03 15:39:59 · 7875 阅读 · 1 评论 -
[编译工具]rust交叉编译的使用方法
写程序时,很多时候一般都在本地电脑上写,本地电脑系统有可能是Mac电脑,windows电脑。与线上的系统存在不匹配的问题。这时就需要用到交叉编译,把本地电脑的程序通过交叉编译环境编译成线上服务对应系统版本的可执行程序。大致过程就是这样的本地系统:mac系统目标系统:centos(linux)系统语言:rust具体操作步骤如下1)安装brew包管理工具如果安装了,忽略执行下面命令:...原创 2019-04-28 09:32:00 · 6158 阅读 · 3 评论 -
Rust中的所有权和借用的关系图
英文原文地址:https://rufflewind.com/2017-02-15/rust-move-copy-borrow下面是Rust语言中移动,复制和借用的图形描述。这些概念中的大多数都是Rust特有的,因此是许多学习者的常见绊脚石。为了避免图形混乱,我试图将文本保持在最低限度。它并不意味着可以替代各种教程,但对于喜欢直观地理解概念的程序员来说,更多的是不同的观点。如果您正在学习Rust...翻译 2019-05-07 10:09:51 · 1711 阅读 · 1 评论 -
rust 面向对象之Struct、impl、trait关键字使用
1. 前言rust语言跟C、C++是一个性能级别的语言,在用法上要比C++简单很多。例如:要实现一个web服务,RUST可以通过包管理工具直接安装一个HTTP库,然后使用。而C++则需要手动下载,手动导入相应的文件等等。总的而言rust是非常值得学习的一门语言,根据项目的不同需求,不同的性能,灵活应用不同的语言。2. rust 定义类2. 1 rust 定义类成员变量利用结构体(stru...原创 2019-06-06 14:48:34 · 9437 阅读 · 4 评论