ownership closer rust look
28. 干货系列从零用Rust编写正反向代理,项目日志的源码实现
wmproxy wmproxy已用Rust实现http/https代理, socks5代理, 反向代理, 静态文件服务器,四层TCP/UDP转发,内网穿透,后续将实现websocket代理等,会将实现过程分享出来,感兴趣的可以一起造个轮子 项目地址 国内: https://gitee.com/tic ......
esp32笔记[10]-rust驱动ssd1306显示屏
摘要 使用rust(no-std)环境和esp-hal库实现SSD1306显示屏(128x64)显示bmp图片. 平台信息 esp32(模组:ESP32-WROOM-32D) (xtensa lx6)(xtensa-esp32-none-elf) rust 超链接 esp32笔记[7]-使用rust ......
nginx-rust 基于rust 开发nginx 模块
nginx-rust 是nginx 官方出的可以让我们基于rust 开发nginx 模块,目前还处于早期阶段,对于nginx 类型的生成官方基于了bindgen工具这个工具我以前也简单介绍过,定于header 包装如下图 说明 目前来说官方提供的集成还是比较全的,同时对于标准nginx 模块开发需要 ......
27. 干货系列从零用Rust编写正反向代理,Rust中日志库的应用基础准备
日志在程序中的重要性非常的重要,当系统发生故障时,我们要随时能排查出相关的日志,细数日志在Rust中的定义依赖及其实现。 ......
rust程序设计(3)结构体相关概念和疑问
结构体 // 如何定义结构体 struct User { active: bool, username: String, email: String, sign_in_count: u64, } // 如何使用结构体 let user = User { active: true, username: ......
Pretty State Machine Patterns in Rust
Photo - Samuel Zeller Photo Pretty State Machine Patterns in Rust Ana, Hoverbear 🐻 Articles A computer scientist working in open source towards a mor ......
26. 干货系列从零用Rust编写正反向代理,如何发布Rust项目到Docker
Docker在服务端的应用中已经非常广泛,所以服务端项目支持Docker将是必不可少的存在,此篇讲述如何讲一个Rust项目发布到Docker的公共镜像里,以供他人使用 ......
rust 程序设计笔记(2)所有权 & 引用
所有权 数据存储在栈和堆上,存放在栈上的数据都是已知所占据空间的 突然的问题 // 内存中的栈是怎么存储数据的? 好的,想象一下你有一摞盘子。你只能从上面放盘子,也只能从上面拿盘子,这就是栈的工作方式。 在内存中,栈是用来存储数据的地方,它工作得就像这摞盘子。当你的程序运行一个函数时,这个函数的局部 ......
【论文阅读笔记】【OCR-文本识别】 CLIPTER: Looking at the Bigger Picture in Scene Text Recognition
CLIPTER ICCV 2023 读论文思考的问题 论文试图解决什么问题? 现有的文本识别方法只关注于局部截取的文本区域,识别模型并没有利用全图的上下文信息,导致其可能对有挑战性的文本的识别效果较差 能否以某种方式使识别器利用上global feature的信息? 文章提出了什么样的解决方法? 提 ......
27_rust_智能指针
智能指针 智能指针是一种数据结构,其行为与指针类似,有额外的元数据和功能。 引用计数(reference counting)智能指针类型,通过记录所有者的数量,使一份数据被多个所有者同时持有,并在没任何所有者时自动清理数据。 其中引用只借用数据,而智能指针常拥有所指向的数据。如智能指针String ......
rust 程序设计笔记(1)
简介 - Rust 程序设计语言 简体中文版 hello world & rust相关工具使用 hello world rustc rustc --version complie .rs program main() entry point all blocks wrapped by { } car ......
25. 干货系列从零用Rust编写正反向代理,序列化之serde是如何工作的
序列化在程序中的应用必不可少的一环,从机读到人读,如JSON利于人读但不利于传输,如何将JSON映射成内存结构等,在日常的程序中必不可少的一环 ......
26_rust_cargo、crates.io
rust_cargo、crates.io 通过release profile自定义构建 release profile(发布配置):是预定义的,可自定义,可使用不用的配置,对代码编译拥有更多的控制。 每个profile的配置都独立于其它的profile。 cargo主要的两个profile: dev ......
24_rust_闭包
闭包 函数式编程的风格特点: 函数作为参数 函数作为其他函数的返回值 函数赋值给变量,之后再执行 rust语言也引入了很多函数式编程的语法特性。 闭包的概念 闭包(closure):可捕获其所在环境的匿名函数。 是匿名函数 能够保存为变量、作为参数和返回值 可在一个地方创建闭包,在另一个上下文中调用 ......
25_rust_迭代器
迭代器 什么是迭代器:迭代器模式是对一系列项执行某些任务,迭代器负责遍历每个项,确定序列(遍历)何时完成。 rust的迭代器: layzy(懒惰的):除非调用消费迭代器的方法,否则迭代器本身没任何效果。 fn main() { let v1 = vec![1, 2, 3]; let v1_iter ......
24. 从零用Rust编写正反向代理,细说HTTP行为中的几种定时器
当今互联网HTTP/HTTPS已经成为了不可缺少的一环,此次我们来细数基本是怎么样保持稳定的服务的,定时器又在其中起到了什么作用? ......
Rust 在可执行文件中嵌入代码版本信息
缘起 我想要最终编译出的可执行文件中包含代码仓库的版本信息 fn main() { println!("Hello RustHub"); // git rev-parse --short HEAD let commit_hash = "6c1b45f"; println!("commit_hash: ......
23. 从零用Rust编写正反向代理,流控小姐姐的温柔一刀!
讲述了一个流控小姐姐是怎么把流量控制管理到位,保证互联网的高速公路不会发生拥堵,从而快速的进行数据通行。wmproxy已用Rust正反向代理。 ......
23_rust_练习
练习编码 实现一个简单的grep工具。 建立项目: > cargo new minigrep Created binary (application) `minigrep` package 接收命令行参数 use std::env; fn main() { // args返回一迭代器,collect ......
[Rust] 对整形溢出的处理
1. 两种不同模式下的整形溢出 坑了个爹的,书上说的没理解清楚,在Rust程序语言设计中文版3.2中提到了,当使用--release参数进行发布模式构建时,Rust不会检测导致panic的整形溢出,这里需要分两种情况考虑: 编译期就可以发现的整形溢出 程序运行过程中会发生的整形溢出 1.1 编译阶段 ......
前端开发笔记[5]-rust的webassembly
摘要 基于rust开发webassembly入门,通过rust实现在网页中弹出警告框. rust的webassembly开发方式 https://zhuanlan.zhihu.com/p/104299612 入门 Rust 开发 WebAssembly Rust 编译为WebAssembly 在前端 ......
不可靠的 Rust Lifetime Elision
众所周知,Rust 编译器在分析代码的过程中,会对含有引用参数、返回值的函数、方法进行 lifetime 检查。经历数次版本迭代后 Rust 编译器发展出了一套惯用规则用于隐式推理 lifetime 注解 (lifetime elision),从而减小开发者的编写难度,尽可能省略不必要的 lifet ......
与c++比较学习rust3-2:数据类型
rust 的文章在 数据类型 数据类型 标量类型 整形,浮点型,布尔型,字符 整形 c++ rust go int8_t i8 int8 int16_t i16 int16 int32_t i32 int32 int64_t i64 int64 - i128 - int isize int unsi ......
与c++比较学习rust3-1:变量和可变性
rust 文章: 变量和可变性 let , const 这两个在c++中,没有与let相同的 用法, let let有点像 const auto 1.1. 相同点:不需要指定类型。使用了const auto 之后,不能改变值也不能改变类型。 1.2. 不同点:rust合法, c++中不合法(即c++ ......
rust 指针
指针 deref()方法是将一个智能指针转换为底层数据类型的引用。 fn main() { let a = vec![1, 2, 3]; a.iter().for_each(|f| println!("{}", f)); // deref 方法是将一个智能指针转换为底层数据类型的引用。 let b ......
rust 集合当成智能指针
集合当成智能指针 通过为集合实现 Deref trait,提供其拥有和借用的数据视图。 Vec是一个拥有T的集合,然后通过实现Deref完成&Vec到&[T]的隐式解引用,从而提供借用T的集合(即&[T]) #[stable(feature = "rust1", since = "1.0.0")] ......
rust 使用借用类型作为参数
使用借用类型作为参数 编码时应该总是倾向于使用借用类型而不是借用所有类型。 对于String类型来说,应该倾向于使用使用&str,而不是&String; #[allow(unused)] fn main() { let string: String = "hello".to_string(); le ......
rust 析构器中做最终处理
析构器中做最终处理 Rust中,通常在析构函数中运行退出前必须运行的代码。 #[derive(Debug)] pub struct A(u8); impl Drop for A { fn drop(&mut self) { println!("A exit") } } #[derive(Debug) ......
rust 构造器和默认构造器
构造器和默认构造器 Rust中,通常使用一个关联函数new来创建一个对象,通过Default trait来支持默认构造器。 // #[derive(Default)]来实现Default,而不必显式的实现。 #[derive(Default)] pub struct Person { name: S ......
rust 使用 take 和 replace 来保留所有值
使用 take 和 replace 来保留所有值 枚举类型 enum MyEnum { A { name: String, x: u32 }, B { name: String }, } 使用 std::mem::take() 和 std::mem::replace() 在不克隆 name 的情况下 ......