- 博客(53)
- 资源 (1)
- 收藏
- 关注
原创 rust语言match模式匹配涉及转移所有权Error Case
rust语言模式匹配解构时,有可能涉及所有权转移的情况,稍不注意就会导致编译错误,现在给出一个错误小例子。
2025-03-10 20:06:41
337
原创 rust函数指针和闭包异同探索随笔
/rust函数指针可以指向“非捕获型闭包” , 我的理解:在rust中“捕获型闭包”因为需要记录被捕获的值,所以需要创建一个结构体记录之!打开注释,注意编译报错信息。//rust函数指针fn是rust本身具有的数据类型之一,而闭包是trait,确切说是三个trait: Fn/FnMut/FnOnce.//而“非捕获型闭包”实际上就是一个函数,因为他需要的值都是通过调用传参获得,不需要记录什么,所以只需要一个函数指针记录执行入口即可。//case8:编译通过,通过闭包trait形参接受函数指针和闭包。
2024-06-20 11:31:57
572
原创 rust显示类型转换-语言规则设计思考
初上手写rust代码时确实有些抓狂,比如上面简单平常的数值运算,c++默认就帮你自动转换了, 当然是否符合预期需要运行时发现问题后跟踪调试!比如:溢出、截断、环绕、符号位等,这些问题不论是用c++还是用rust编程时都需要认真考虑的!只不过我们习惯了在写代码时的自由发挥无拘无束的感觉,随后运行调试时的煎熬酸爽!反正你要赋值,你要运算,那么你的类型就要明确!不同的类型需要转换为同一个类型,比如用as, 或者自己实现From&Into trait特征,令人感到刻板无情,一根筋!你以为类型转换是个简单问题!
2024-06-02 17:44:37
373
原创 rust语言trait特性综述,老于聊技术
Trait为rust强大的抽象表达能力注入了灵魂,融入rust各个角落, rust集众家之长,去其糟粕,若是没有了trait, 我认为rust的优雅将黯然失色!rust中各种约束和限定主要由trait来表达,系统优雅严密,好比胶水,将泛型、并发、异步、内存管理等等诸多语言特性优雅地融合到一起,设计可谓精妙。定义一个Traitpub trait Summary { fn summarize(&self) -> String; //可以定义许多接口方法,类似于ja...
2020-11-01 11:34:14
2957
1
原创 Rust 析构函数
Trait std::ops::Drop 如果你的自定义类型需要自己的析构函数,则只要实现std::ops::Drop trait 即可。例如: struct HasDrop; //你的自定义类型。impl Drop for HasDrop { fn drop(&mut self) { //std::ops::Drop trait 只有一个方法drop。 println!("Dropping!"); //当你的自定义类型变量离开了`作用域`时...
2020-06-03 21:11:11
1384
原创 Too -many-lists学习摘要
IterMute实现要点难点 ...pub struct List<T> { head: Link<T>,}type Link<T> = Option<Box<Node<T>>>;struct Node<T> { elem: T, next: Link<T>,}.........pub struct IterMut<'a, T> { ...
2020-05-30 20:58:00
505
原创 A Guide to Global Data in Rust-学习笔记
为什么需要Global Data (1) 应用程序的配置。(2) 例如全局变量,不需要一层层函数传参。(3) 数据库链接,连接池以及其他网络资源。(4) 日志。(5) 例如在build.rs中生成Rust代码,如:date/time/git commit rev. 权衡取舍 (1) 编译时/运行时 load global data value.(2) 只读/可写。(3) 生命周期 : 要'static , 还是局部一点。(4) 创建到栈上, 还...
2020-05-28 21:47:28
267
原创 Rust Iterator迭代器-学习随笔
我认为熟记吃透Rust Option、Result、Iterator这3块的方法集,非常有助于写出简洁高效符合Rust Style的代码!原理性的东西好多前辈都讲过了,我就不啰嗦了!这三块的方法功用必须要记牢!我收集了几个常用方法的小例子,方便查询记忆而已。 iter() => &T iter_mut() => &mut T into_iter() => T //不一定为T, 也可能是&T、&mut T ;由into_iter()
2020-05-28 10:07:06
882
原创 Rust:Structuring and handling errors in 2020学习笔记
Rust: Structuring and handling errors in 2020- 学习笔记直接上菜, 首先介绍两个新的Crate用于Rust Error处理,anyhow 和thiserror, 其代表Rust Error处理的最新探索成果! anyhow面向Application应用程序开发, thiserror面向Library开发, 为什么一个Rust Error处理需要分成两个Crate来处理呢?! 理由如下:(1) 库应专注于生成有意义的结构化错误类型/变体。...
2020-05-25 16:42:56
288
原创 Rust FFI (C vs Rust)学习杂记
前言"FFI"是" Foreign Function Interface"的缩写,大意为不同编程语言所写程序间的相互调用。鉴于C语言事实上是编程语言界的万国通,世界通用语,所以本文主要围绕着C和Rust之间的互通来学习。单刀直入,话不啰嗦,好比学外语, 先要从认字开始, 对于编程语言来说就是各种“基础类型”, 因为类型代表了:可操作集和布局, 有人会疑问“类型布局”是个什么东西?! 好吧, 换个词“房屋布局”, 这词的意思,您好理解吧!对!代表了:位置、大小、方向,排列、顺序等信息!在类型的基础.
2020-05-24 11:59:40
2206
原创 Rust 位操作(Bitwise Operations )
基础篇 fn main() { //(1)最原始直接基础的位操作方法。 let mut byte: u8 = 0b0000_0000; println!("0b{:08b}", byte); byte |= 0b0000_1000; // Set a bit println!("0b{:08b}", byte); b...
2020-05-08 16:05:09
3432
原创 Rust enum 杂记
rust enum是典型的代数数据类型系统ADT, 可以传参,可以组合等,非常强大易用。 enum 定义 enum WebEvent { // An `enum` may either be `unit-like`, //类似于:struct PageLoad ; // 一个empty struct。 PageLoad, PageUnload, ...
2020-05-03 16:55:46
875
原创 Rust 不允许C++方式的函数重载overloading
C++方式的函数重载,即同一个函数名以及多个不同的形参类型和个数(不包括返回值类型), 以Ad-hoc(临时,随时,不用事先深思熟虑)的方式来实现函数的重载!功能非常强大, 同时也是惹祸根源之一!Rust 只允许通过预先定义和实现Trait的方式来近似模拟C++ ad-hoc 函数重载!比如Rust允许部分运算符重载,比如:std::ops::Add Trait , 只要为你的自定义类型实现了...
2020-04-29 13:31:17
782
原创 Kademlia Lookup nodes各种算法收集分析
https://github.com/cfromknecht/kademlia /findnode.go IterativeFindNode //for golangfunc (k *Kademlia) IterativeFindNode(target NodeID, delta int, final chan Contacts) { done := make(chan ...
2020-04-26 18:48:03
420
原创 Rust async block-future-task::spawn-how to ref self
综述 rust有借用的概念,代码中具体称为引用,如:&str, &mut String, &'a str, &'b mut String, 而且每一个变量都有一个关键属性:life time生命周期,代表每一个变量从创建到销毁的全过程!引用变量(可理解为c语言中指针变量)同样有自己的生命周期!通俗地讲就是存活时间,通常由变量所在的词法作用域决定!而且每...
2020-03-17 17:20:41
900
原创 Rust tokio::select学习杂记
Rust tokio::select学习杂记 前言 Linux系统有select/poll/epoll等,主要用于监控各种fd上发生的各种event, 从而识别派发处理。golang语言中也有一个select,作用相似,主要监控channel上发生的可读可写event。 对于rust tokio/async_std/crossbeam/futures等也需要一个select去统一集中监控...
2020-03-16 12:32:37
2703
原创 How to verify the peer socket is dead?
前言对于TCP/IP网络编程而言,我们在读写数据时,当然希望获知对端是否还活着!量子纠缠态当然很是理想,但是现实网络世界中,两个不可见端点互相通讯,确定对方还活着的方法就是不断询问!我问-你答, 我问-你不答,我就当你死了, 所以对于TCP/IP网络编程而言, read最好有timeout机制保护,避免server无限制浪费资源去等待可能早已失效的对端;若业务层需要及时感知对端已死, 则需要心跳...
2020-03-14 08:27:45
243
原创 Rust mio 0.6v 学习杂记
内容详见:https://github.com/yujinliang/rust_learn/tree/master/mio
2020-03-13 21:36:08
263
原创 Rust模块的理解
RUST模块的理解 每一个crate就是一个根模块。如:exp, lip, lip1, lip2, lip3。 独立的一个文件就是一个mod,文件名就是mod名;但是main.rs, lib.rs, mod.rs除外,mod.rs的模块名就是其所在目录的名字; 而main.rs, lib.rs 的目录结构,如:exp/src/main.rs或 lip/src/lib.rs ;...
2020-03-13 21:20:58
1654
原创 Rust 协变,逆变,不变
Rust 协变,逆变,不变对于逆变和协变的判断,有时候观察角度不同,结论可能不同,不必纠结,明白原理就好。这个笔记是我学习随笔,不严谨,也没有多方考证,只是记录一下自己的理解,以备他日进一步考证!在rust中, 'a : 'b 表达'a为'b的子类,'b为父类,子类生命周期大于等于父类。一般面向对象编程中涉及父类、子类、型变等概念, 用于表达父类与子类之间的相互替代关系。型...
2020-03-13 16:27:17
1938
2
原创 Panic IN Rust
Option::None and Result::Err => unwrap() expect() to panic. Panicking will unwind the stack, running destructors and ensuring that memory is cleaned up. Abort does not do this, and relies...
2020-03-13 16:16:33
630
原创 Linux Signal 处理 with Rust
Linux Signal 特点: 异步性、并发性、无序性。POSIX.1允许系统递送该信号一次或多次。Linux是这样实现的:常规信号在递达之前产生多次只计一次,而实时信号在递达之前产生多次可以依次放在一个队列里。在单线程时代,编写信号处理程序就是一件棘手的事情,更何况多线程时代,由于Signal会打断正在运行的线程,包括Signal handler也会被其后的信号打断!所以Sign...
2020-03-13 15:49:27
911
原创 Rust Option and Result 杂记
https://github.com/yujinliang/rust_learn ? 如何向外传递错误 use std::io;use std::io::Read;use std::fs::File;fn read_username_from_file() -> Result<String, io::Error> {let f = File::ope...
2020-03-13 15:32:39
1135
原创 Golang 随笔杂谈
本想着写完,但是琐事太多,累了!换个活法,开个小店,希望大家来捧场。我的微店:https://weidian.com/?userid=423856015&wfr=wechatpo_keywords_shop我的公众号:lingzhuge8866最近我迷上了Rust语言和区块链,作为C++入行的我还是很难接受GC类语言,C++程序员对于性能效率有着本能地渴望和追求!但是C++却又......
2020-03-13 13:43:38
1313
原创 go语言方法Value Receiver, Pointer Receiver各种不同情况的实验笔记
go语言, 方法, value receiver, pointer receiver实验笔记
2016-08-16 09:40:29
4173
Rust FFI C/C++ & Rust 互操作
2022-06-22
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人