
rust学习
文章平均质量分 50
rust学习
qwsaedca
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
在rust上和编译器博斗
代码】在rust上和编译器博斗。原创 2022-08-09 10:23:43 · 267 阅读 · 0 评论 -
rust一个生命周期报错的例子(闭包+引用常遇到的例子)
rust生命周期的一个例子原创 2022-08-02 11:31:25 · 296 阅读 · 0 评论 -
身份证号码的正则表达式及验证详解(rust版实现,Regex)
身份证号码的正则表达式及验证详解(rust版实现,Regex)原创 2022-06-17 15:05:19 · 1094 阅读 · 0 评论 -
rust用到生命周期的一个例子,裁剪数据字段
原创 2022-02-14 18:58:01 · 275 阅读 · 0 评论 -
Windows上Rust使用ZeroMQ
1.官方写了一个基于C生态的libzmq动静态库的Rust绑定库。ZeroMQ | Rust基于一本介绍zeroMQ的书的Rust语言版的例子zguide/examples/Rust at master · booksbyus/zguide · GitHubLearning and Using ØMQ. Contribute to booksbyus/zguide development by creating an account on GitHub.https://github.com/bo原创 2022-01-26 15:08:24 · 1083 阅读 · 0 评论 -
Rust中如何应对子类继承的一个技巧
How to model inheritance hierarchy? - #8 by cbiffle - help - The Rust Programming Language ForumI am trying to see if Rust could be used on a project that I am working on and am stuck on how to model an inheritance hierarchy in Rust. I have many objects th翻译 2021-11-30 15:04:49 · 297 阅读 · 0 评论 -
Rust中鼓励组合来代替继承
struct People { eaten_apples: i32,}impl People { fn eat_apple(&mut self) { self.eaten_apples += 1; println!("{} apples eaten", self.eaten_apples); }}struct Student { people: People,}impl Student { fn eat_ap.原创 2021-11-30 14:18:17 · 396 阅读 · 0 评论 -
Rust派生属性宏和属性宏的一个区别
折腾了一天,发现派生属性宏无法操作token流,但记得属性宏是可以的,就怀疑属性宏和派生属性宏的有一个区别是不是,属性宏可以修改ast树,而派生宏不可以。就在群里问了,得到了肯定的回答:派生宏,被派生的struct、enum、union所在的AST是只读的;属性宏,作用范围更广,是将整个被修饰的对象所在的AST输入到属性宏中,再将属性宏的输出重新编译.参考资料(官方英文资料):Procedural Macros - The Rust Reference群友的回答:一个append,一个r.原创 2021-10-26 15:47:23 · 873 阅读 · 0 评论 -
mini-tokio代码分析
在学习tokio,其实指南文章Async in depth | Tokio - An asynchronous Rust runtimehttps://tokio.rs/tokio/tutorial/async中介绍tokio运行时原理,如果轮询future的,完整代码地址:https://github.com/tokio-rs/website/blob/master/tutorial-code/mini-tokio/src/main.rshttps://github.com/tokio-rs/websit原创 2021-10-20 16:45:14 · 859 阅读 · 0 评论 -
利用扩展trait方法实现探视Futures每次poll进度
看一篇英文文章介绍了一种利用扩展Trait技巧来debug Futrue每次poll时的情况。原文:Inspecting Futures(原文代码用的future库演示的,可能是当时异步没稳定时,下面换成了标准库)你有没有想过你的futures在什么时候被poll,然后返回什么?这是一个future的包装类型在任何情况下都会打印出来poll的情况。(显然,内部类型必须是Debug)。use std::fmt::Debug;use std::future::Future;use std.翻译 2021-09-18 11:27:09 · 168 阅读 · 0 评论 -
rust中move后,还能访问到原来的值不及在rust中实现对内存重复释放
use std::ptr;use std::slice;fn main() { let mut rust = "rust".to_string(); let ptr = &rust as *const String as usize;//还指向堆中的u8序列 println!("rust is {:p}", &rust); println(ptr); let java = rust;//move后 println!("java is {.原创 2020-11-27 15:01:30 · 341 阅读 · 0 评论 -
Ringbahn是无船同志(without boats)基于io-uring 的 安全Rust 绑定(第一篇)
Ringbahn:Rust中io-uring的安全符合人体工程学的API在我以前的文章中,我讨论了Linux的新io-uring接口,以及如何创建用于使用Rust的io-uring的安全API。 自从发布该文章以来,我已经实现了此类API的原型。 该create称为Ringbahn,旨在使用户能够在io-uring机制上使用IO,而不会造成内存不安全的风险。对于将来在Linux上开发异步IO来说,io-uring将变得至关重要。Linux是Rust的主要用户,用于各种高性能网络服务的最常用平台。Rus原创 2020-10-09 11:30:29 · 552 阅读 · 0 评论 -
rust的使用css选择器解析网页数据的第三方库nipper,类似java的jsoup库,比另一个库crabquery好用多了
因为在java上习惯了使用了jsoup解析抓取到的网页,在rust的crate.io中搜索jquery,首先出来的就是crabquery,猛一用,感觉还行,用着用着就发现实现在简单了,功能很少,很基础,但胜的名字误导人,又翻了翻才找到了下面这个库https://docs.rs/nipper/0.1.8/nipper/,而且还是国人开发的。大致用了下,功能和jsoup差不多。use nipper::Document;fn main() { let html = include_str!.原创 2020-07-30 17:25:49 · 1203 阅读 · 0 评论 -
在windows下绑定opencv库使用
rust的FFI机制可以很轻松与C库进行调用,但也复杂,如果你自己人工翻译代码的话,还好有bindgen工具。本来觉得像opencv这样的库,rust应该有人进行绑定使用,确实有,但很复杂,原来是多种的,最坑的就是墙,opencv-rust https://github.com/twistedfall/opencv-rust 这个库在配置windows下使用时,光依赖库就下不下去了。然后再看其它库,总之就是感觉想使用起来很复杂。后来仔细看看了FFI相关文档,资料中都是再三强调,C++提供AB原创 2020-06-15 15:58:41 · 414 阅读 · 0 评论 -
windows下rust最具生产力的IDE——Idea社区版+rust插件
首先Idea社区版是免费与收费版功能肯定是有区别的,但使用rust插件来开发rust程序是完全没有问题的。最早是用vscode+rust插件来学习和开发rust程序的,也很好配置而且轻量级,但从使用经验来说还是推荐使用idea社区版(可以用来开发java安卓,我只用来开发rust,所以把相关插件都卸载了)+rust插件,光从代码补全提示这块来说就完胜vscode+rust官方开发的插件,而且用的时间长,rls服务都能点2GB内存,而且代码提示失效。写的这篇文章的目的,最早我也是在群里吐槽vscode原创 2020-06-09 09:06:30 · 9591 阅读 · 1 评论 -
rust docker交叉编译静态单体执行文件
1. 这是有人专门做好对编译对应平台的docker image(https://github.com/messense/rust-musl-cross).Rust toolchain Cross Compile Target Docker Image Tag stable x86_64-unknown-linux-musl x86_64-musl stable i686-unknown-linux-musl i686-musl stable a...原创 2020-05-12 13:56:00 · 3179 阅读 · 3 评论 -
rust liunx 下打包成静态单体(像golang一样,无依赖)
在linux下打包成静态单体,第一种方式就是加上的编译目标--target参数,--target的值可以用rustup target list查看cargo build --release --target=x86_64-unknown-linux-musl还可以用docker容器的方案来打包静态单体。官方rust镜像https://hub.docker.com/_/rust/ 里面有一些如何使用。这里只介绍我用到方式:docker run --rm --user "$(id -u)"...原创 2020-05-12 13:32:55 · 2703 阅读 · 0 评论 -
rust程序打包成最小docker镜像
Dockerfile文件内容。FROM alpine:latestLABEL author.name="qwsaedac" COPY connect /connectENV APP_HOME=/connectWORKDIR /connectENTRYPOINT ["./frame-ioc"]这里有个坑,但网上很多文章都没有说出来,就是你编译的rust程序要是静态单体的,因alpine这个基础镜像只有5MB左右,是不可能就什么动态系统库让你依赖使用的(这坑还是我换成ce...原创 2020-05-12 14:02:43 · 2061 阅读 · 0 评论 -
rust walkdir一个高效地递归地遍历文件夹的库
一个跨平台的Rust库,用于高效地递归地遍历文件夹。它支持以下文件软连接、控制打开的文件描述符的数量和用filter_map方法来过滤需要显示的文件。这个库是用rust zip库里看例子,配合walkdir库进行文件夹压缩。这个轮子很好。Cargo.toml增加依赖use walkdir::WalkDir;fn main() { for entry in WalkDir::new("d:/tmp") { let entry = entry.unwrap().原创 2020-05-09 14:18:17 · 4746 阅读 · 0 评论 -
rust目前实现IOC意义不大的原因
1 首先是可变性。struct A{b:Option<Arc<B>>}struct B{}struct C{b:Option<Arc<B>>}struct IOC{map:Hashmap,}如果A和B有一个需要调用B的可变方法,Arc<B>可引用实现就没有意义了,只能改成Mutex、RwLock...原创 2020-01-07 17:48:08 · 1134 阅读 · 1 评论 -
rust 过程宏例子(rust编程之道的过程宏例子)
Cargo.toml[package]name = "ioc_macro"version = "0.1.0"edition = "2018"[dependencies]syn = "1.0"quote = "1.0"proc-macro2 = "1.0.7"[lib]proc_macro = truelib.rsextern crate proc_ma...原创 2020-01-07 15:52:07 · 2039 阅读 · 0 评论 -
3.教程:使用async-std编写聊天服务(3.8 处理客户端断线连接)
3.8 处理客户端断线连接 目前,我们只在broker中上添加新的客户端连接。 这显然是错误的:如果一个对等方关闭了与聊天室的连接,我们不应该再尝试向它发送任何消息。处理断开连接的一个微妙之处在于,我们可以在读操作的任务或写操作的任务中检测到客户端连接是否连接着。在这两种情况下,最直接的解决方案就是从管理客户端连接的map中移除客户端连接,但这样做是错误的。如果...原创 2019-12-27 17:31:55 · 382 阅读 · 0 评论 -
3.教程:使用async-std编写聊天服务(3.7 完全关闭)
3.7 完全关闭当前实现的一个问题是它不能处理正常关闭。如果我们出于某种原因而中断了accept循环,那么所有的正运行任务都将被丢弃。更正确的关机顺序是:不再接受新的客户 把未处理完的消息正常处理完 (这聊天服务中主要是指把未发送给客户端的消息正常发送出去) 然后开始退出程序在基于通道的体系结构中,是很容易完全关闭的,尽管这样操作可能看起来是不可思议的。因为在Rust中,通道的接...原创 2019-12-27 15:19:49 · 257 阅读 · 0 评论 -
3.教程:使用async-std编写聊天服务(3.6 聊天服务所有职责角色)
At this point, we only need to start the broker to get a fully-functioning (in the happy case!) chat:在这一点上,我们只需要启动代理程序就可以得到一个完全正常的运行(在愉快的情况下!)聊天:use async_std::{ io::BufReader, net::{TcpLi...原创 2019-12-26 18:53:15 · 324 阅读 · 0 评论 -
3.教程:使用async-std编写聊天服务(3.5 连接读和写操作交互)
3.5 连接读和写操作交互那么,我们如何确保在connection_loop中读取的消息传递connection_writer_loop相关的接收人(Alice给bob发送消息,如何确保bob接收到消息)?我们应该以某种方式维护一个对等点:HashMap<String, Sender<String>>,它允许客户端查找到目标channels。然而,这个map可能是一...原创 2019-12-26 18:44:47 · 190 阅读 · 0 评论 -
3.教程:使用async-std编写聊天服务(3.4 发送消息)
3.4 发送消息现在是时候实现另一半了——发送消息。实现发送的一个最明显的方法是让每个connection_loop访问彼此客户端的TcpStream的写半部分。这样,客户端就可以直接向所有接收人发送消息。但是,这是错误的:如果Alice给bob发送foo,Charley给bob发送bar,bob实际上可能会收到fobaor。通过套接字发送消息可能需要几个系统调用,因此两个并发的。...原创 2019-12-26 18:29:48 · 323 阅读 · 0 评论 -
3.教程:使用async-std编写聊天服务(3.3 接收消息)
3.3 接收消息让我们实现接收部分的协议。我们需要:TcpStream并将字节按分割符\n拆分后解码为utf-8将第一行解释为登录将其余行解析为login:messageuse async_std::{ io::BufReader, net::TcpStream,};async fn accept_l...原创 2019-12-26 18:21:38 · 287 阅读 · 0 评论 -
3.教程:使用async-std编写聊天服务(3.2编写Accept Loop代码)
3.2编写Accept Loop代码让我们实现一个“脚手架服务器”:将TCP套接字绑定到地址并开始接受连接的循环。首先,让我们添加所需的导入样板:use async_std::{ prelude::*, // 1 task, // 2 net::{TcpListener, ToSocketAddrs}...原创 2019-12-26 17:57:49 · 300 阅读 · 0 评论 -
3.教程:使用async-std编写聊天服务(规范和快速开始)
3.教程:编写聊天没有什么比创建聊天服务器更简单的了,对吧?不完全是,聊天服务器让您体验异步编程的所有乐趣:服务器将如何处理同时连接的客户端?它将如何处理他们断开?它将如何分发消息?本教程介绍如何用async-std编写聊天服务器。您还可以在我们的仓库中找到教程。3.1 规范和开始3....原创 2019-12-26 17:35:26 · 359 阅读 · 0 评论 -
2.2 Tasks
2.2 Tasks既然我们知道Futures是什么,我们就要运行它们!在async-std中,tasks模块负责这个的。最简单的方法是使用block_on函数:extern crate async_std;use async_std::{fs::File, io, prelude::*, task};async fn read_file(path: &str) ->...原创 2019-12-26 17:09:59 · 333 阅读 · 0 评论 -
2. async-std中的异步概念
2. async-std中的异步概念Rust中的Futures有一个很不好使用的名声。虽然我们并不这样认为。而且是最简单的并发概念之一,并且有一个很直观的表达。当然,这种看法有充分的理由。Futures有三个基本概念,似乎是让人困惑的来源:延迟计算,异步性和独立执行策略。这些概念并不难,但很多人并不习惯。许多面向细节的实现放大了这种基本混淆。对这些大多数的实现解释也针对高级用户,对初...原创 2019-12-26 16:46:30 · 454 阅读 · 0 评论 -
rust async-std文档翻译
借助于百度翻译完成的,如有错误或更好的翻译请留言1. 介绍这本书是async-std的高级文档,也是在Rust中学习异步编程的一种方法。因此,它将重点放在async-std的api和它提供给您的任务模型上。请注意,Rust项目提供了自己的关于异步编程的书,称为“Rust中的异步编程(https://rust-lang.github.io/async-book/)”,我们强烈建议与本书一起阅...原创 2019-12-26 16:34:08 · 1472 阅读 · 0 评论 -
rust中把枚举值variant变体当作函数使用
fn main() { let message = enum_demo( Message::Request,//当作一个闭包,函数使用 Message::Request(person :Person)->Message::Request Person { name: "rust".into(), }, ...原创 2019-12-23 11:38:49 · 885 阅读 · 0 评论 -
rust的match匹配非枚举值变量时,定义穷举最后一个值时的注意事项
在rust中使用match 匹配非枚举值时,例如:fn main() { let val = 15; match_demo(val);}const FLAG: i32 = 25;fn match_demo(val: i32) -> i32 { match val { FLAG => 1, other_value =&...原创 2019-12-23 10:34:27 · 544 阅读 · 0 评论 -
rust的websocket库ws-rs 架构
ws-rs的开源库地址https://github.com/housleyjk/ws-rs架构 WebSocket需要两个基本组件:Factory和Handler。Factory是实现Factory trait的任何struct。WS-RS已经为以Sender为第一个参数的闭包提供了Factory trait实现,因此可以将闭包作为Factory传递给任何一个调用函数。每次成功...原创 2019-12-18 14:15:48 · 2950 阅读 · 1 评论 -
使用rust的image库进行图片压缩
image库中有许多对图片处理方法.可以参考一份中文翻译(https://www.jianshu.com/p/342c6a4bc7a1).也可以去仓库地址中查看(https://github.com/image-rs/image),仓库中examples文件夹中放着一些例子,其中就有图片压缩的例子,提供了几种压缩算法的对比,下面的例子是改动了官方的例子,对文件夹中的图片文件进行压缩:C...原创 2019-12-05 09:24:06 · 5150 阅读 · 0 评论 -
windows下rust静态单体打包,不依赖动态库编译设置(转载)
我的用例是这样的,我想在Windows上避免这种常见的情况:程序无法启动,因为您的计算机缺少VCRUNTIME140.dll。尝试重新安装程序来解决这个问题。此解决方案有效。将此添加到.cargo / config文件:[target.x86_64-pc-windows-msvc]rustflags = ["-C", "target-feature=+crt-static"]...转载 2019-12-05 08:55:30 · 5969 阅读 · 0 评论 -
rust mio的例子
mio是rust的一个低级非阻塞api的网络库文档地址:https://docs.rs/mio/0.6.20/mio/官方的介绍:A fast, low-level IO library for Rust focusing on non-blocking APIs, event notification, and other useful utilities for building hi...原创 2019-11-26 23:03:16 · 911 阅读 · 1 评论 -
rust使用websocket,使用开源库ws
rust的开源库地址https://github.com/housleyjk/ws-rs其实当webscket客户端使用https连接时,依赖的是rust的openssl库,而rust的openssl(https://docs.rs/openssl/0.10.26/openssl/)需要使用到openssl动态库,所以需要操作系统中安装openssl(https://docs.rs/opens...原创 2019-11-25 17:13:16 · 3491 阅读 · 3 评论