
Rust
文章平均质量分 52
笨笨D幸福
一个因好奇而误入地球的太阳系生物.
https://gitcode.com/mycat
https://github.com/BBDXF
展开
-
Rust 全局变量的最佳实践 lazy_static/OnceLock/Mutex/RwLock
在实际项目开发中,难免需要用到全局变量,比如全局配置信息,全局内存池等,此类数据结构可能在多处需要被使用,保存为全局变量可以很方便的进行修改与读取。在Rust中,如果只是读取静态变量是比较简单的,比如全局变量是一个usize或者& str等类型的值。如果全局变量是需要初始化产生的就比较复杂了,比如解析一个配置文件,然后把配置文件中的内容赋给全局变量。由于全局变量要被修改,这个全局变量得是可变的,也就是说产生了全局可变变量,而这种方式违反了Rust的设计原则。原创 2024-09-23 16:48:34 · 1328 阅读 · 0 评论 -
Rust 实战练习 - 12. Axum Web 简单demo
Rust 的异步框架tokio非他莫属,而web框架一直是悬而未决,说到底还是因为没有官方成熟的方案指引,大家各玩各的,互不兼容,白白浪费精力。这个事情一直等到半官方组织tokio推出axum有了改善。原创 2024-04-27 22:50:26 · 978 阅读 · 0 评论 -
Rust 实战练习 - 11. Rust异步的基石 tokio
Tokio是一个异步运行时。同时支持embedded devices.- 对异步代码的多线程运行时- 对标准库的异步实现 (**这个可以省很多事情**)- 生态系统丰富,非常多的工具库实现Tokio不是万能的,部分场景不建议,可以考虑使用其他的:- 多CPU计算密集型,并行计算。Tokio主要解决多个任务IO等待问题,对于并行计算没有太大优势。- 大量文件读取。Tokio没有提供异步文件API. 使用它与普通线程读取文件没有区别。- 单个Web请求,或者阻塞型请求。因为Tokio优势原创 2024-04-27 22:49:55 · 797 阅读 · 0 评论 -
Rust 实战练习 - 10. JSON、XML、YAML/TOML、Ini专题
常见的配置文件有很多:JSON, Ini, XML, TOML, YAML ...目标:- JSON/YAML/TOML- Ini- XMLRust中序列化用的最多的是 `serde`, 依赖它,有很多出色的第三方库可以使用。其中,`serde`本身支持JSON/YAML/TOML/JSON5...多种,这里使用`serde_json`. XML需要第三方库`quick-xml`,他通过支持`serde`也支持了结构体序列化,配合十分完美.INI比较特别,这里有一个比较强大的原创 2024-04-08 21:19:17 · 797 阅读 · 0 评论 -
Rust 实战练习 - 9. 文本编码,URL编码,加密解密
编程工作中,很复杂的一个环节的就是编解码和多语言。这里只讨论编解码的工作。目标:- 常见文本编码的转换(GBK, Shift-JIS, UTF8, Unicode, ASCII)- Web中常用的编码- 常见的加密算法(md5, sha1, HMAC, AES/DES, RSA)原创 2024-04-08 21:18:00 · 1240 阅读 · 0 评论 -
Rust 实战练习 - 8. 内存,ASM,外挂 【重磅】
目标:- C写一个Demo版本的游戏- 由浅入深,了解外挂原理- Linux/Android下实现内存读取- ptrace实现内存修改(依赖第三方ptrace 提供了一种机制使得父进程可以观察和控制子进程的执行过程,ptrace 还可以检查和修改子进程的可执行文件在内存中的image及子进程所使用的寄存器中的值。在Linux下如何搜索内存找到我们需要的数据,不在这里讨论,我们根据gamebox提供的地址,直接定位。这也就是简单的游戏外挂范围的技术。/c 就可以随机改变其中的等级,金钱,位置信息。原创 2024-03-25 20:01:17 · 1699 阅读 · 0 评论 -
Rust 实战练习 - 7. FFI, 库, ABI, libc
FFI(Foreign Function Interface)是这样一种机制:用一种编程语言写的程序能调用另一种编程语言写的函数(routines)。调用约定,类型表示和名称修饰这三者的统称,即是众所周知的应用二进制接口(ABI)。如果所有的语言在调用时都能认识同样一套 ABI 规范,那么就能完全畅通的调用了。可惜,世界不会像我们人为想象的那样干净。等。。而 Rust 目前支持如下 ABI目前我们 IT 工业的基石,绝大部分是由 C 语言写成。原创 2024-03-25 19:57:11 · 1518 阅读 · 2 评论 -
Rust 实战练习 - 6. 指针指针+各种指针区别
【代码】Rust 实战练习 - 6. 指针指针+各种指针区别。Box,RC,Arc,Cell,RefCell,Cow,String,Vec,RawRec,Unique, Shared原创 2024-03-25 19:54:00 · 531 阅读 · 0 评论 -
Rust 实战练习 - 5. 多线程,多进程,协程
Rust通过await, async, Future 支持无栈协程。内部生成了一个状态机以保证代码正确的流程。虽然使用起来没有golang的方便,但胜在效率很高。(早期有类似go的绿色线程GreenThread,现在已经抛弃)协程的并发需要依赖第三方库,目前支持1:N, N:M 模型,可以在一个线程池里完成N:M模型的并发。但是,rust没有提供官方的运行时,需要社区驱动。比如futures, tokio, std-.对于golang语言,使用的是有栈协程。使用栈和上下文切换来执行异步代码逻辑的机制。原创 2024-03-25 19:51:55 · 885 阅读 · 1 评论 -
Rust 实战练习 - 4. 网络 TCP/UDP/Channel
多播,也称为“组播”,与单播一样,多播是允许在广域网即Internet上进行传输的,多播的地址是特定的,D类地址用于多播。是“多个生产者,单个消费者”(Multiple Producers, Single Consumer)的缩写,意味着多个线程可以同时向通道发送数据,但只有一个线程可以从通道接收数据。3、管理权限多播地址:在239.0.0.0~239.255.255.255之间,可供组织内部使用,类似于私有IP地址,不能用于Internet,可限制多播范围。函数来创建一个通道。原创 2024-03-25 19:50:06 · 796 阅读 · 0 评论 -
Rust 实战练习 - 3. 文件系统,权限,读写,路径组合,time
【代码】Rust 实战练习 - 3. 文件系统,权限,读写,路径组合,time。原创 2024-03-25 19:47:44 · 562 阅读 · 0 评论 -
Rust 实战练习 - 2. OS,IO,Platform(注册表,/etc)
【代码】Rust 实战练习 - 2. OS,IO,Platform(注册表,/etc)原创 2024-03-25 19:43:55 · 395 阅读 · 0 评论 -
Rust 实战练习 - 1. 输入,输出,环境变量,字符,字符串
cargo传递参数,需要加上。原创 2024-03-25 19:38:55 · 487 阅读 · 0 评论 -
Rust Thrift Demo
Cargo[package]name = "thdemo1"version = "0.1.0"authors = ["BBDXF <zhang206zyx@163.com>"]edition = "2018"[dependencies]thrift=""try_from=""ordered-float=""clap=""Tree├── Cargo.toml├── note.md├── src│ ├── comms│ ├── main.rs│ └─原创 2021-12-15 16:39:43 · 880 阅读 · 0 评论 -
Rust Option 链表 数据提取与修改
Rust Option 链表 数据核心解释链表中比较难处理的就是Option的解析处理,一般情况使用match 进行匹配,然后再处理: let mut l1 = Some(Box::new(ListNode::new(1))); // 简单匹配 if let Some(ref mut _l1) = l1{ _l1.next = Some(Box::new(ListNode::new(2))); }如果不使用匹配,需要自己实现类似Some的解构处理: // 关键点,原创 2021-05-18 15:08:23 · 711 阅读 · 0 评论 -
RustEmb_4.Stop
心路历程为了完成 USB HID Rust例程,先学习了Keil C 版本内容,经过一系列学习之后,大概明白了USB和HID的原理,在编写Rust版本过程中,折腾了将近一个星期,每进步一小步总有一个细节问题拷问我自己,加上本身对于USB和HID驱动的细节一知半解,这个RUST版本终将难产,胎死腹中!/(ㄒoㄒ)/~~其中,Keil C版本参考正点原子的STMF4系列教程,链接 https://www.bilibili.com/video/BV1Rx411R75t ,非常感谢前辈们的付出!Rust版本参原创 2020-07-27 21:15:10 · 369 阅读 · 1 评论 -
RustEmb_3.USART串口
说明串口在嵌入式领域是一个非常重要的功能,它不仅用来做普通的通信,还可以作为一种通用的调试手段。在STM32F4系列芯片中,大多都同时支持4-8个串口,这一章我们参考Keil版本串口通信代码,实现一个Rust版本的串口。C版本其核心是配置IO端口复用,以及串口时钟及中断。其中USART1_IRQHandler函数是固定的用来处理USART1的中断功能函数,在startup_stm32f40_41xxx.s文件中引用。#include "stm32f4xx.h"#include "stm32f4原创 2020-07-04 16:02:36 · 2083 阅读 · 1 评论 -
RustEmb_2.HelloWorld
说明在传统的C编写STM32代码时,有两种使用方式:寄存器版本和HAL库版本。使用Rust编写时也一样,你需要考虑使用寄存器版本或者HAL库版本。toolchain与STM32对应关系使用Rust编写实质上是将Rust代码编译为无STD库的arm平台代码(二进制,汇编为arm指令集),然后将其中的代码段根据嵌入式硬件的要求,写入到芯片中,从而实现在STM32中跑RUST的效果。我们这里使用的芯片STM32F407ZGT6 是一颗Cortex-M4架构的芯片,其对应RUST toolchain关系为原创 2020-06-29 22:50:40 · 489 阅读 · 0 评论 -
RustEmb_1.环境配置
说明此系列文章是参考 The Embedded Book 和 Discovery 以及众多第三方文章杂糅而成????,仅用于学习和探索Rust在STM32嵌入式领域的使用。为了方便自己使用,以下工具和方式非官方推荐,但是适合自己。环境准备Rust本体具体安装方式见官方 https://www.rust-lang.org/tools/installRust依赖安装rustup component add llvm-tools-previewrustup component add原创 2020-06-29 21:37:29 · 509 阅读 · 0 评论 -
RUST编写STM32F4嵌入式程序
文章目录Toml 文件跑马灯代码Toml 文件[package]authors = ["Andy"]edition = "2018"readme = "README.md"name = "stm32app"version = "0.1.0"[dependencies]cortex-m = "*"cortex-m-rt = "*"cortex-m-semihosting = "*"panic-halt = "*"# Uncomment for the panic example.原创 2020-06-27 21:34:10 · 3319 阅读 · 0 评论 -
Rust绿色版(Win10)制作&安装教程
Rust绿色安装说明 针对Win10下Rust安装和绿化的指导说明。 附带Rust国内源加速的方法。 版本信息: λ rustup-init.exe -y info: syncing channel updates for 'stable-x86_6...原创 2017-12-14 09:16:09 · 2279 阅读 · 0 评论 -
Rust基础总结
rust 基础总结基础的语法和常用表达式写法常见结构、类、算法的实现常见库的说明和使用与其他语言交互总览优缺点一个项目basichttps://blog.youkuaiyun.com/bbdxf/article/details/78798809很多基础的类型和操作都很简单,不做说明。下面仅列举一些最容易产生阻碍性疑问的点。&引用*解引用一个及其重要,但是与实际“看似”矛...原创 2019-02-23 11:28:20 · 1380 阅读 · 0 评论 -
RUST标准库
Rust标准库std::threadRust 通过 spawn 函数提供了创建本地操作系统(native OS)线程的机制,该函数的参数是一个转移闭包(moving closure)。Rust默认会开4个线程,新开的线程另算。use std::thread;static NTHREADS: i32 = 10;// 这是主(`main`)线程fn main() { // 提...原创 2019-02-23 11:28:49 · 5804 阅读 · 0 评论 -
RS调用DLL
Rust调用DLL简单调用(动态)extern crate libloading;use std::env;use libloading::{Library, Symbol};type AddFunc = fn(isize, isize) -> isize;fn main() { let library_path = env::args().nth(1).expec...原创 2019-02-23 11:29:33 · 4049 阅读 · 0 评论 -
Tokio学习
Tokio 学习原本想直接学习Actix-Web,一层层看下来,发现内容太多,杂乱,没有目的。所以,一层层剥下来,最终落脚到Tokio上,现在先了解Tokio的相关内容,最终学习Actix相关内容。Tokio是Rust的一个异步编程库,它是一个事件驱动,使用非阻塞IO编写异步程序的库。总的来说,有几个特点:多线程、基于调度的任务窃取(work-stealing)一个reactor后端,通...原创 2019-02-23 11:29:50 · 2791 阅读 · 0 评论 -
Actix学习
actix 学习Actix是一个rust库,它为并发应用程序的开发提供了一个框架。Actix是基于Actor模型构建的,它允许将应用程序编写为一组独立执行但协作的“Actor”,这些“Actor”通过消息进行通信。Actor是封装状态和行为并在actix库提供的Actor系统中运行的对象。参与者在特定的执行上下文上下文中运行。上下文对象仅在执行期间可用。每个参与者都有一个单独的执行上下文。执...原创 2019-02-23 11:30:08 · 1719 阅读 · 0 评论 -
Actix-Web学习
Actix-web 学习请求处理分为两个阶段。首先调用处理程序对象,返回实现Responder trait的任何对象。然后,在返回的对象上调用respond_to(),将其自身转换为AsyncResult或Error。默认情况下,actix为一些标准类型提供响应器实现,比如静态str、字符串等。要查看完整的实现列表,请查看响应器文档。基础的Demoextern crate actix_...原创 2019-02-23 11:30:25 · 6339 阅读 · 0 评论 -
深入浅出Rust
深入浅出RustV1.33.0 RFC -> nightly -> beta -> stable主版本号:API不兼容修改次版本号:向下兼容功能新增修订号:向下兼容问题修正国内源:export RUSTUP_DIST_SERVER=https://mirrors.ustc.edu.cn/rust-staticexport RUSTUP_UPDATE_ROOT=htt...原创 2019-03-19 17:14:06 · 4695 阅读 · 0 评论 -
Rust常用操作
Rust常用操作列举常用的一些功能的demo或者实现形式。当前路径&遍历目录use std::fs;use std::env;fn main() { println!("curdir: {}, curexe: {}", env::current_dir().unwrap().display(), env::current_exe().unwrap().display(...原创 2019-03-19 17:15:08 · 4912 阅读 · 0 评论 -
Rust初识
Rust初识 Rust 是一门系统级编程语言,被设计为保证内存和线程安全,并防止段错误。作为系统级编程语言,它的基本理念是 “零开销抽象”。理论上来说,它的速度与 C / C++ 同级。 Rust 可以被归为通用的、多范式、编译型的编程语言,类似 C 或者 C++。与这两门编程语言不同的是,Rust 是线程安全的! Rust 编程语言的目标是,创建一个高度安全和并发的软件系统原创 2017-12-14 09:18:15 · 7046 阅读 · 2 评论