![](https://img-blog.csdnimg.cn/20200905110711718.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Rust
文章平均质量分 67
Rust 基础语言 + 异步 + opencv + actix-web + WebAssembly
SongpingWang
计算机视觉相关--程序语言相关
展开
-
Rust 中文社区与库
Rust中文社区:https://rustcc.cn/section?id=f4703117-7e6b-4caf-aa22-a3ad3db6898f实时的 rust 语言社区动态。原创 2021-03-18 10:35:48 · 1190 阅读 · 0 评论 -
Rust 编写 Python 拓展 Whl文件
pyo3 官方使用手册:【点击查看】maturin 构建使用工具: 【点击查看】安装 pip install maturin官方示例Cargo.tmol[lib]name = "string_sum"crate-type = ["cdylib"][dependencies.pyo3]version = "0.13.2"features = ["extension-module"]lib.rsuse pyo3::prelude::*;use pyo3::wrap_pyfuncti原创 2021-06-25 15:23:25 · 816 阅读 · 1 评论 -
Rust 正则表达式 Regex
regex使用:在Cargo.toml文件中[dependencies]下添加regex一、简单示例(来自regex文档)use regex::Regex;// 常规日期查找let re = Regex::new(r"^\d{4}-\d{2}-\d{2}$").unwrap();assert!(re.is_match("2014-01-01"));// 表达式反复与搜索字符串进行匹配let re = Regex::new(r"(\d{4})-(\d{2})-(\d{2})").unwr翻译 2021-05-08 10:24:03 · 8145 阅读 · 0 评论 -
Rust walk库,zip库,文件夹与文件
文章目录一、walk 遍历文件夹内所有文件二、zip 压缩与解压三、统计文件夹内所有文件所占空间一、walk 遍历文件夹内所有文件使用walk 遍历文件夹,可设置遍历深度,符号链接等。查看 walkdirCargo.toml文件添加依赖:walkdir = "2.3.2"use walkdir::WalkDir;fn main() { // 直接遍历所有条目 for entry in WalkDir::new("./") { println!("{}", entry?.pat原创 2021-05-06 17:33:58 · 2512 阅读 · 0 评论 -
Rust vs Pandas 数据处理
文章目录介绍1、读取和即时数据2、过滤3、分组4、Mutation5. Merge结论介绍pandas 是 python 的主要数据分析包,但是由于很多原因,如果没有使用 numpty 等工具的话,原生 python 在数据分析等方面性非常差,pandas 是由 Wes McKinney 开发的,并且将这些操作封装到漂亮的 api 中,方便 python 开发者使用其进行数据分析rust 因为具有出色的数据性能,这也是为什么 rust 不需要像 pandas 那样进行 api 的包装我相信在 rus转载 2021-04-14 16:28:24 · 2832 阅读 · 1 评论 -
Rust 工厂模式
文章目录一、前言二、工厂方法模式结构创建型设计模式 之 工厂方法模式 (虚拟构造函数,Virtual Constructor, Factory Method)一、前言意图工厂方法模式是一种创建型设计模式,其在父类中提供一个创建对象的方法,允许子类决定实例化对象的类型。在Rust中的实现就是提供一个抽象的trait,结构体实现该trait。问题假如你正在开发一款应用,最初的版本只能处理的业务逻辑只有单一的一个,比如开始只有简单的邮寄个人信的业务。而后面随着业务的扩大,需要增加邮寄公司订单业务。转载 2021-04-14 14:16:46 · 460 阅读 · 0 评论 -
Rust 建造者模式(Builder)
建造者模式(Builder)概述构建者模式是一种设计模式,提供一种灵活的解决方案,已解决面向对象程序设计中的各种对象创建问题。Builder设计模式的目的是将复杂对象的构造与其表示分离开来。是"是四人帮"设计模式之一[wiki]。建造者模式是一种创建型设计模式,使你能够分步骤创建复杂对象。该模式允许你使用相同的创建代码生成不同类型和形式的对象。定义:Builder设计模式的目的是将复杂对象的构造与其表示分离开来。通过这样做,同样的构造过程可以创建不同的表示。历史假如有一个复杂的对象,需要对其进行构转载 2021-04-14 13:56:21 · 1220 阅读 · 0 评论 -
Rust structopt库
标准库参数解析let args: Vec<String> = env::args().collect();let query = &args[1];let filename = &args[2];println!("Searching for {}", query);println!("In file {}", filename);structoptstructopt可以方便的将命令行参数解析为一个struct。use structopt::StructOpt原创 2021-03-18 17:24:28 · 1033 阅读 · 0 评论 -
Rust 图像处理库 image-rs
文章目录一、简介像素类型图像处理函数二、GenericImageView与GenericImage三、ImageBuffer 与 DynamicImageImageBufferDynamicImageSubImage四、示例打开和保存图像Generating Fractals例子一、简介Rust下的图像处理库,image-rs 提供了基本的图像处理功能和用于在各种图像格式之间进行转换的方法。所有图像处理功能都对实现GenericImageView和GenericImage特性并返回ImageBuffer原创 2021-03-10 10:45:23 · 9507 阅读 · 0 评论 -
Rust 聊天软件 chat-client
代码来自于【视频】服务端use std::io::{ErrorKind, Read, Write};use std::net::TcpListener;use std::sync::mpsc;use std::thread;const LOCAL:&str = "127.0.0.1:6000";const MSG_SIZE:usize = 32;fn sleep(){ thread::sleep(std::time::Duration::from_millis(100原创 2021-01-19 13:46:54 · 662 阅读 · 1 评论 -
reqwest 请求示例
reqwest 请求示例:读取图片编码成base64组装请求头、请求体,发起请求返回值映射成HashMap:use std::collections::HashMap;use reqwest::header::HeaderMap;use serde_json::value::Value;use std::collections::hash_map::RandomState;use reqwest::Error;async fn do_post(url:&str,base64原创 2021-01-05 09:06:08 · 1771 阅读 · 0 评论 -
Rust 错误处理(二)
文章目录一、自定义返回错误信息二、完整的错误处理Rust 错误处理示例:一、自定义返回错误信息声明自定义错误种类的枚举体,为错误枚举体实现Display ,为每种错误实现 Fromuse std::io::{self,Read};use std::fs::File;use std::path::Path;use std::fmt::{self,Debug};use std::num;#[derive(Debug)]enum CliError{ Io(io::Error),原创 2021-01-05 09:02:55 · 1390 阅读 · 0 评论 -
Rust polars库 DataFrame
polars 库文档查看【点击】数据结构与特征:DataFrame structSeries structSeries traitChunkedArray struct数据读写 CSV/ JSON点击查看更多示例在使用相应的模块时,需要开启此特性,否则该方法无法使用。则会出现报错:use of undeclared type 'JsonReader'[dependencies]polars = { version = "0.10.1", features = ["json"] }原创 2021-01-05 08:58:48 · 2316 阅读 · 0 评论 -
Rust 错误处理
文章目录一、返回错误与异常处理OptionResult: Option 加强版二、错误传递try! 宏Error TraitFrom trait三、统一自定义错误类型如何处理错误?四、小结在学习 Rust 的过程中,错误处理是一个必需要迈过的坎。主要原因是所有的标准库都以统一的方式处理错误,我们就来谈一谈 Rust 中是如何处理错误的吧。Rust Book 对 rust 中的错误处理有详细的讲解,本文对其中一些选择背后的原因进行了思考和总结。强烈建议先看原文。一、返回错误与异常处理名正则言顺,我们先转载 2020-12-28 10:48:23 · 2239 阅读 · 0 评论 -
Rust 爬虫(简单)
文章目录方法一、tokio + reqwest + futures方法二、async-std + surf + futures代码来自于 【原子之音】 视频,感谢up主.主要测试了三个模块: tokio surf reqwestsurf【使用文档】tokio【使用文档】reqwest【使用文档】方法一、tokio + reqwest + futures[dependencies]reqwest = {version="0.10.10",feature=["json"]}tokio = {v原创 2020-12-20 10:14:20 · 5037 阅读 · 2 评论 -
Rust 异步编程 - async-std
文章目录代码来自于【原子之音】 视频,感谢up主.async-std 【使用文档】使用示例:[dependencies]futures = "0.3.8"[dependencies.async-std]version = "1.7.0"features = ["attributes"]use std::time;use futures::future::{join,join_all};use async_std::task;use std::sync::{Arc,Mutex};原创 2020-12-17 08:57:45 · 1375 阅读 · 0 评论 -
rust 文件读写操作
文章目录一、读取文件二、写入文件一、读取文件use std::fs::File;fn main() { let f = File::open("hello.txt").unwrap();}1、按字节读取use std::fs::File;use std::io::prelude::*;fn main() { let mut f = File::open("/src/1.txt").unwrap(); let mut buf = vec![0; 8];原创 2020-11-23 18:13:24 · 6218 阅读 · 0 评论 -
Rust webserver服务
文章目录一、单线程服务二、使用线程池Rust 的简单的webserever服务。编写参考于令狐一冲的视频。一、单线程服务use std::net::TcpListener;use std::net::TcpStream;use std::io::{Read, Write};use std::fs;fn handle_client(mut stream:TcpStream){ let mut buffer = [1;512]; stream.read(&mut buf原创 2020-11-22 16:57:13 · 1072 阅读 · 0 评论 -
Rust 使用 reqwest 发起 GET/POST 异步请求
文章目录一、GET请求二、POST请求三、完整代码一、GET请求1、准备工作,在 Cargo.toml 中加入 reqwest 依赖。reqwest 的 async 使用的是 Tokio 的,所以要同时加入 Tokio 的依赖。[dependencies]reqwest = { version = "0.10", features = ["json"] }tokio = { version = "0.2", features = ["full"] }2、编写GET代码use std::col原创 2020-11-23 18:13:51 · 13756 阅读 · 2 评论 -
Rust 全局静态变量(match、lazy_static! 、phf)
文章目录一、全局变量1.1 如何使用 lazy_static! 创建全局可变变量的例子二、创建全局静态变量的三种方式2.1 match2.2 lazy_static!宏2.2.1 lazy_static!的作用接下去使用 lazy_static! 消除上面的所有问题。2.2.2回到颜色的例子2.3phf2.4BenchmarksRust中的全局静态变量: rust-lang一、全局变量我在写actix-web时,用到了长字符串以及多维数组时,然而这两个变量我是设定为不可变,并且需要重复使用的,若将其初转载 2020-11-23 18:14:48 · 8255 阅读 · 0 评论 -
Rust actix-web服务(第三方库的使用ini time uuid base64 photon)
使用 ini安装:cargo install -f cargo-edit并执行:cargo add rust-iniCargo.toml文件中添加依赖[dependencies]actix-web = "3"rust-ini = "0.16.0"使用方法( 代码来源 ):use ini::Ini;// 初始化,设置文件变量及属性,并保存文件let mut conf = Ini::new();conf.with_section(Some("User".to_owned()))原创 2020-11-10 20:45:37 · 732 阅读 · 0 评论 -
Tensorflow Rust实战下篇[整合actix-web提供http服务]
上一篇我写的文章Tensorflow Rust实战上篇. 这一次我们看看使用tensorflow建立了什么,并通过http接口提供服务。随着Actix Web1.0版本发布,我认为用它构建一些东西将是一个很好的时机。本文假设您对Futures及其运作方式有一定的了解。我将尽量用更简单的术语解释,但理解Futures生态系统将非常有效地帮助阅读本文。为此,我建议你从tokio开始。有些人建议在深入Futures之前等待async/await和friends功能发布。我认为你现在应该亲自动手:异步编程总是转载 2020-11-09 20:09:19 · 856 阅读 · 0 评论 -
Rust OpenSSL编译报错问题
在actix-web中使用openssl:[dependencies]actix-web = { version = "3", features = ["openssl"] }openssl = { version="0.10" }cargo build编译报错如下:error: failed to run custom build command foropenssl-sys v0.9.55``需要安装windows平台openssl:下载地址:https://slproweb.com/原创 2020-11-08 21:27:27 · 2187 阅读 · 0 评论 -
Rust 减小程序编译后的体积
Rust编译出的可执行文件大解决方法有时会痛苦的感慨Rust程序编译后的文件为什么那么大,而C语言的那么小。其实,Rust之所以大,是因为里面包含了较多的标准库等相关的东西。当然,Rust体积也是可以缩小的。这里给出两个简单的建议:使用–releasecargo build --release启用LTO,并strip编译后的二进制文件编辑Cargo.toml文件,里面添加lto配置:[profile.release]lto = true上面两种方法是最简单快速的。另外还可以原创 2020-10-29 20:58:25 · 5285 阅读 · 0 评论 -
Rust json 序列化与反序列化
文章目录一、json-rust1.1 反序列化1.2 序列化 Serialize二、Serde JSON三、拓展:【使用 Rust 写 Parser 】json在大多数的语言中都具有举足轻重的地位,特别在网络传中的常用数据交换格式。【百度百科】关于 Rust 结构数组、序列化与反序列化 。一、json-rust下面会举例一些常用的json序列化与反序列化的用法,在Rust中json对象详情【请查看】1.1 反序列化反序列化 json::parsejson-rust:https://github原创 2020-10-29 20:19:47 · 11358 阅读 · 3 评论 -
Rust 生命周期
文章目录一、函数二、方法生命周期(lifetime) 是这样一种概念,编译器(中的借用检查器)用它来保证所有的借用都是有效的。确切地说,一个变量的生命周期在它创建的时候开始,在它销毁的时候结束。例如考虑这种情况,我们通过&来借用一个变量。该借用拥有一个生命周期,此生命周期由它声明的位置决定。于是,只要该借用在出借者(lender)被销毁前结束,借用就是有效的。然而,借用的作用域则是由使用引用的位置决定的。一、函数排除省略(elision)的情况,带上生命周期的函数签名有一些限制:任何引用原创 2020-10-29 20:17:07 · 1597 阅读 · 0 评论 -
Rust RAII &所有权 &引用
文章目录一、RAII二、析构函数三、所有权和移动四、可变性五、可变引用一、RAIIRAII源自于现代C++,Rust 强制实行 RAII(Resource Acquisition Is Initiallization,资源获取即初始化),所以任何对象在离开作用域时,它的析构函数(destructor)就被调用,然后它占有的资源就被释放。这种行为避免了资源泄漏(resource leak),所以你再也不用手动释放内存或者担心内存泄漏(memory leak)!小示例:fn main() { //嵌原创 2020-10-28 20:11:24 · 691 阅读 · 0 评论 -
Rust trait特性与约束
文章目录一、trait二、约束三、多重约束四、关联项五、虚类型参数Rust 依赖库管理工具–cargo。如果你曾经手动管理过库依赖,那么你就知道这会带来的极大的痛苦。在Rust 的生态链下,有cargo 可以管理项目的各种依赖关系。// 二进制可执行文件cargo new foo// 或者库cargo new --lib foo一、trait如下定义了一个泛型 trait ,它把 Drop trait 作为泛型方法实现了,可以 drop (丢弃)调用者本身和一个输入参数。struct原创 2020-10-28 20:09:15 · 1519 阅读 · 0 评论 -
Rust 迭代器与闭包与高阶函数
文章目录迭代器与闭包迭代器与闭包与高阶函数迭代器与闭包fn main() { let vec_1 = vec![1, 2, 3,4,5]; let vec_2 = vec!["a","b","c","d","e"]; //对vec的`iter()`举出`&i32`,(通过用`&x`匹配)把它解构成`i32`。 //对vec的`into_iter()`举出`i32`类型。无需解构。 println!("是否有能整除2的数:{}",vec_1.ite原创 2020-10-20 20:14:17 · 435 阅读 · 0 评论 -
Rust function & closure
文章目录函数与方法闭包输入函数作为输出参数函数与方法struct Point{ x:f64, y:f64,}impl Point{ // 静态方法(static method) fn origin() ->Point { Point{ x:0.0,y:0.0} } fn new(x:f64,y:f64)->Point{ Point{x:x, y:y} }}struct Rectangle{原创 2020-10-20 20:26:10 · 413 阅读 · 0 评论 -
Rust while & if
简单的示例:enum Foo{ Zhangsan, Lisi, Wangwu(u8)}fn main() { let a = Foo::Zhangsan; let b = Foo::Lisi; let c = Foo::Wangwu(23); if let Foo::Zhangsan = a{ println!("a is Foo::zhangsan"); } if let Foo::Zhangsan =原创 2020-10-20 20:19:11 · 306 阅读 · 0 评论 -
Rust iter& match
文章目录一、迭代器二、match匹配一、迭代器关于更多详情查看【标准库】fn main() { // iter - 在每次迭代中借用集合中的一个元素 let names = vec!["zhangsan", "lisi","wangwu","zhaoliu"]; for name in names.iter(){ match name{ &"zhangsan" => println!("The people is zhang原创 2020-10-20 20:10:27 · 279 阅读 · 0 评论 -
Rust From与into
函数方法:【标准库】示例:use std::convert::From;#[derive(Debug)]struct Number{ value:i32,}impl From<i32> for Number{ fn from(item:i32) -> Self{ Number{ value:item } }}fn main() { let num = Number::from(3原创 2020-10-20 20:09:53 · 2319 阅读 · 0 评论 -
Rust 数组与向量
数组数组是单一类型的对象的集合 T, 存储在连续内存中。 它们的大小在编译的时候确定,类型签名的一部分 [T; size].切片切片和数组相似,但它们的大小在编译时是不知道的。相反,切片是一个双字对象,第一个字是一个指针中的数据,第二个字是切片的长度。切片可借用数组的截面,并具有式签名 &[T]声明和初始化数组,示例:use std::mem;fn analyze_slice(slice:&[i32]){ println!("first element of the原创 2020-10-19 19:19:17 · 1475 阅读 · 0 评论 -
Rust 练习fmt,简单算术练习
std::fmt【详情地址】动手实现:自定义显示:use std::fmt;struct List(Vec<i32>);impl fmt::Display for List{ fn fmt(&self,f:&mut fmt::Formatter)->fmt::Result{ let vec = &self.0; let len_vec = &self.0.len(); write!(f,原创 2020-10-19 19:18:57 · 498 阅读 · 0 评论 -
Rust-OpenCV 图取与显示
关于安装 Rust-OpenCV 【请查看】,或者查看【crates安装方法】一、读取本地图片并显示extern crate opencv;use opencv::imgcodecs::imread;use opencv::prelude::MatTrait;use opencv::highgui::{imshow, wait_key, destroy_all_windows};fn main() { let imgpath = "C:\\Users\\xxx\\Desktop\\ss原创 2020-10-17 15:32:03 · 1986 阅读 · 0 评论 -
Rust log库的使用
【github地址】https://blog.csdn.net/s_lisheng/article/details/78250340原创 2020-10-14 20:30:10 · 5510 阅读 · 0 评论 -
Rust-opencv 安装
Rust-opencv安装:参考:https://github.com/twistedfall/opencv-rust/issues/118安装 Chocolatey以管理员身份启动powerShell执行:Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityP原创 2020-10-14 20:01:01 · 1226 阅读 · 0 评论 -
Rust 结构数组、序列化与反序列化
#[stable(feature = "rust1", since = "1.0.0")]pub struct Arc<T: ?Sized> { ptr: Shared<ArcInner<T>>,}#[stable(feature = "rust1", since = "1.0.0")]unsafe impl<T: ?Sized + Sync + Send> Send for Arc<T> {}//实现Send Trait#[s原创 2020-09-27 21:22:22 · 3320 阅读 · 0 评论 -
Rust (三)Owner语义与生命周期
一、所有权转移一般情形下的函数调用移动所有权。// takes_ownership 取得调用函数传入参数的所有权,所以变量进来了就出不去了fn takes_ownership(some_string: String) { println!("{}", some_string);} // 这里,some_string 移出作用域并调用 `drop` 方法。占用的内存被释放// gives_ownership 将返回值移动给调用它的函数fn gives_ownership() ->原创 2020-09-26 17:19:44 · 374 阅读 · 0 评论