- 博客(1716)
- 收藏
- 关注
转载 【转】folyd:Rust 的 Pin 与 Unpin
Rust 的 Pin 与 Unpin 机制解析 摘要: Rust 1.33 引入的 Pin 和 Unpin 机制主要用于解决自引用结构体的内存安全问题。Pin 是一个智能指针包装器,可以"钉住"其指向的数据防止被移动(move),这一特性对实现 Generator 和 async/await 至关重要。默认情况下,所有类型都自动实现 Unpin 使 Pin 失效,只有少数特殊类型(如 PhantomPinned 和 Future 相关结构体)会实现!Unpin。当处理自引用结构体时,Pi
2025-12-24 17:03:09
2
转载 【转】folyd:Rust Pin 进阶
Rust Pin 进阶摘要 本文深入解析Rust中的Pin API及其高级用法。Pin的主要作用是保证被包裹类型的内存地址稳定性,防止被意外移动。文章详细剖析了Pin的13个方法,将其分为Pin<P: Deref>和Pin<P: DerefMut>两大类,并解释了每个方法的安全边界和unsafe版本的区别。特别强调了Pin如何通过类型系统保证安全:当T不满足Unpin时,可能破坏Pin契约的操作都被标记为unsafe。此外还介绍了Pin的#[fundamental]和#[repr(t
2025-12-24 16:53:18
2
原创 Rust: 量化策略回测与简易线程池构建(MPMC)
在上文中介绍了自定义MPSC+Arc+Mutex线程池框架方案。下面来介绍一下MPMC的线程池方案。提供的MPMC框架,具体相关文章可以详细阅读。和上文中相比,本文中的MPMC方案技术相对难度较大,要点较多。
2025-11-21 15:19:37
497
原创 Rust: 量化策略回测与Rayon线程池
本文介绍了使用Rust的Rayon库实现量化策略并发回测的方法。通过ThreadPoolBuilder创建3个线程的线程池,利用par_bridge()实现策略的并行执行。文中展示了三种量化策略(趋势跟踪、布林带和高频交易)的实现,每个策略耗时1秒。测试结果显示8个策略在3个线程上分配执行,总耗时约3秒,与预期性能相符。相比自定义线程池方案,Rayon提供了更简洁的并发编程接口,同时保持了相似的执行效率。
2025-11-21 08:56:14
238
原创 Rust :量化策略回测与tokio异步实践
本文探讨了在Rust中使用Tokio框架实现量化策略异步回测的方案。虽然Tokio更适合IO密集型场景,但通过将策略封装为Pin<Box<dyn Future>>类型,可以在CPU密集型任务中简化多线程管理。文中展示了使用3个Tokio工作线程并行执行8个策略(每个耗时1秒)的示例,总耗时约3秒,与线程池方案性能相当。这种方案通过#[tokio::main]属性配置线程数,实现了策略的异步抽象化,为量化框架开发提供了一种简化方案。
2025-11-19 15:55:26
323
原创 Rust: 量化策略回测与简易线程池构建、子线程执行观测
本文探讨了使用Rust构建简易线程池回测框架的方法,重点介绍了两种消息传递机制:MPSC+Arc+Mutex和MPMC方案。作者展示了一个基于MPSC+Arc+Mutex的线程池实现,包含任务分发、反馈收集和线程管理功能。该框架通过Message枚举类型处理任务、反馈和关闭指令,Worker结构体管理线程执行,ThreadPool负责整体调度。代码示例演示了如何创建线程池、执行任务和实现优雅关闭,为量化策略回测提供了基础的多线程技术支持。
2025-11-11 14:04:24
549
原创 Rust : 量化策略回测与多线程技术原型
本文探讨了在Rust中实现多策略并行回测的技术方案。通过枚举类型统一封装不同策略的输入参数(Parameter)和输出结果(OutPut),将策略函数抽象为统一的FnOnce()->OutPut闭包格式,并使用Box<dyn FnOnce>进行动态分发。采用标准库thread模块实现1:1的线程策略映射,使3个策略的并行执行时间从单线程的3秒缩短到1秒左右。文章详细介绍了参数封装、输出定义、函数抽象和多线程实现的关键技术点,并通过完整代码示例验证了方案的可行性。该方案可根据实际需求进一步优
2025-11-11 09:21:45
390
原创 Rust : Send、Sync与现实世界的映射
摘要:Rust中的Send和Sync特性是并发编程的关键概念。Send表示类型所有权可在线程间转移,Sync表示类型引用可在线程间共享。文章详细解析了不同组合的特性类型:1)标准类型通常同时实现Send+Sync;2)内部可变类型(Cell)实现Send但不Sync;3)线程保护类型(MutexGuard)实现Sync但不Send;4)不安全指针类型(Rc)既不Send也不Sync。最后通过书籍版权、借阅等现实场景类比解释了这些特性的实际意义,帮助理解Rust的安全并发设计理念。
2025-11-06 16:08:55
406
原创 dbpystream webapi: 一次clickhouse数据从系统盘迁至数据盘的尝试
本文介绍了如何将部署在阿里云上的ClickHouse数据库从系统盘迁移至专用数据盘的过程。首先需要购买并挂载数据盘到/home/data目录下,包括查看磁盘信息、格式化、挂载和配置自动挂载。然后详细说明了ClickHouse数据迁移步骤:停止服务、移动数据文件、设置权限、创建软链接,最后重启服务并进行验证。通过将数据迁移至专用数据盘,解决了系统盘空间不足的问题,提高了存储可扩展性。整个迁移过程需要注意目录权限设置和软链接的正确创建。
2025-10-27 14:29:09
785
原创 dbpystream webapi: 从阿里云福州站点到上海站点的迁移之旅
本文记录了将开源Web Api项目dbpystream从阿里云华东5/6地域迁移到其他地域的过程。通过创建实例镜像、跨地域复制镜像、新建ECS三个步骤完成整体迁移,保持原有用户和密码不变。重点处理了IP地址变更问题,并验证了数据完整性。整个迁移过程顺利,充分体现了云服务的高效便捷,熟练操作仅需10余分钟即可完成。迁移后项目运行正常,展现了云技术的强大优势。
2025-09-23 13:56:08
502
原创 Rust:关于下划线“_”的七种场景总结
本文系统梳理了Rust语言中下划线的7种典型应用场景,包括参数占位、生命周期表示、变量忽略、类型擦除、所有权保护、模式匹配通配、类型推断辅助等用法。
2025-09-17 09:42:44
335
原创 Rust : 关于解引用“*”
本文主要探讨Rust中解引用操作符(*)的使用场景和注意事项。通过多个代码示例展示了:1) 基本解引用和重新借用的模式匹配;2) 自定义智能指针MyBox与Deref特性的实现;3) 解引用导致所有权转移的情况;4) 可变引用的解引用赋值;5) match语句中与ref、_等模式搭配使用时的所有权处理。特别指出Box和自定义MyBox在解引用行为上的差异,以及match模式中ref和_等特殊符号避免所有权转移的作用。
2025-09-15 15:45:09
371
原创 Rust : 关于Deref
本文介绍了Rust中Deref Trait的核心概念和用法。Deref Trait通过隐式自动解引用来简化代码操作,其核心逻辑是将*T转换为*(T.deref())。文章详细解析了常见的取引用和解引用操作,包括&*T、&**T等组合操作的含义,并重点说明了点操作符.背后隐含的多步自动解引用过程。此外,还介绍了通过Deref实现的类型转换&T到&U的机制,以及这种转换在函数参数传递中的应用场景。理解Deref Trait的自动解引用特性对掌握Rust所有权系统至关重要。
2025-09-12 16:50:54
398
转载 【转】Rust的Cow类型有什么用?详解Cow及其用途
本文介绍了Rust中的Cow<B>智能指针,它实现了写时复制(COW)优化策略。Cow<B>是一个枚举类型,包含Borrowed和Owned两个变体,当需要修改数据时才进行复制。文章详细讲解了Cow<B>的定义、构造方法、Deref特性,以及通过to_mut()和into_owned()进行修改和消费的操作。最后以标准库中的String::from_utf8_lossy方法为例,展示了Cow在实际应用中的价值,能够有效减少不必要的复制开销,提升性能。
2025-09-11 10:11:29
162
转载 【转】Rust语言圣经之定海神针 Pin 和 Unpin与补充
相信大家看到这里,脑袋里已经快被 Pin 、 Unpin 、!Unpin 整爆炸了,没事,我们再来火上浇油下:)若 T: Unpin ( Rust 类型的默认实现),那么 Pin<'a, T> 跟 &'a mut T 完全相同,也就是 Pin将没有任何效果, 该移动还是照常移动绝大多数标准库类型都实现了 Unpin ,事实上,对于 Rust 中你能遇到的绝大多数类型,该结论依然成立 ,其中一个例外就是:async/await 生成的 Future 没有实现 Unpin。
2025-08-19 09:23:54
241
原创 zread.ai:源代码学习利器
Zread.ai是一个专注于文本智能处理的AI平台,提供高效的内容生成、摘要提取和语义分析服务。其核心技术基于深度学习模型,可快速处理各类文档,为用户节省时间并提升工作效率。该平台操作简单,适合个人和企业用户,支持多种文件格式输入输出。Zread.ai致力于通过AI技术优化信息处理流程,帮助用户更便捷地获取关键信息。目前平台提供免费试用和不同等级的付费订阅方案。
2025-08-06 08:31:37
192
原创 Rust:AI编程、过程宏与源码
宏是rust的灵魂小料和魔法。从println!("hello world!")那刻开始,rust世界无宏不成席,无宏不欢。和显性的声明宏不同,隐藏在代码深处的过程宏,静悄悄。尽管它的出现并不是用来装B的,但如果你喜欢装,过程宏一定不可以不玩。你可以不用,但你不能不懂。对rust人来讲,不理解宏,定会少了一份亲切和挚爱。如果从定义逐步展开,过程宏的线索就会慢慢就浮出水面。
2025-07-22 14:54:06
478
原创 【转】Rust: PhantomData,#may_dangle和Drop Check 真真假假
《Rust中的PhantomData解析》一文深入探讨了PhantomData类型在Rust中的作用,包括其与#may_dangle属性及Drop检查机制的关联。文章建议对PhantomData理解不深的开发者阅读,以厘清相关概念。该文发表在知乎专栏,详细解析了这些特性之间的真假关系,对理解Rust所有权系统具有参考价值。
2025-07-15 15:09:50
267
原创 【转】林雪萍:中国机床的春天
林雪萍| 中国机床的春天2025年04月22日 00:02北京机床是工业母机,过去多年一直让人操心不少。中国机床是一个万亿产值的行业,但利润率只有百分之2.5。机床工具全行业企业数量超过1.6万家,而机床主机也近5000家。厂家数量太多,利润自然也差强人意。细节看过去,依然是窟窿百出。但这两年中国机床还是取得了不小的突破。中国制造增加值占比全球的1/3左右,而2024年中国机床产值则超过了全球的1/3,机床消费额也是全球1/3。“三个1/3”意味着机床就是中国制造水平的最精确指针。
2025-04-25 10:59:09
742
原创 【转】愚夫:Jane Street防抖动简明教程
• 猜错的代价:如果 CPU 猜错了(比如分支预测错误,或者等待的数据终于来了发现之前推测执行的基础是错的),它就必须扔掉所有推测执行的结果,清空一部分流水线,再从正确的地方重新开始。比如,买频率更高、时序更紧的“电竞内存条”(带 RGB 灯的那种),换个体质更好、可以超频的 CPU,再配上强大的水冷散热系统,把 CPU 超到一个更高的稳定频率。• 用在自旋等待循环里,告诉 CPU:“老兄,我这是在等东西呢,你先别瞎猜执行后面的指令了,也让我这个核心稍微歇歇,省点电,别影响隔壁超线程兄弟干活。
2025-04-22 13:57:03
1094
原创 Rust: 从内存地址信息看内存布局
同时,56个字节的分配,从各字段看,第1部分,分配的是field3(24个字节,因其占用最大,排在第1个),其通过3个align结构(8+8+8)来进行安排;它的alignment是8。在最后4个字节中,field6,field7已经用掉了2个,还有2个空的(alignment padding)。内存布局其实有几个:address(地址)、size(大小)、alignment(对齐位数,2 的自然数次幂,2,4,8…(2)接下来是field1,field2,field4,field5,依次占了1个字节。
2025-04-21 17:16:12
726
原创 Rust : 关于*const () 与type erase
const () 可以替代泛型,更加灵活。下面举了两个完全不一样的数据结构Foo和Bar;以及不同的函数,来说明。
2025-04-16 17:14:56
472
转载 Rust: 十亿行数据挑战,从 5 分钟到 9 秒的历程
有趣的是,在查看 fast-float 的 GitHub 仓库时,我发现这个仓库中使用的技术现在已经合并到标准库核心的 parse 方法中了。read_to_string 在系统调用次数方面效率很高,但它有个缺点,就是会产生大量不必要的内存使用,并且每行都需要重复分配拥有所有权的 String,之后又将其丢弃。虽然对于中等长度的键,它的性能很有竞争力,但对于像整数这样的小键以及像长字符串这样的大键,其他哈希算法的性能会更优,不过那些算法通常无法防范诸如哈希拒绝服务攻击(HashDoS)之类的攻击。
2024-12-27 10:02:44
279
原创 Rust : tokio中select!
但这个选择是通过异步同时执行所有的”条件任务“PK出来的,就相当于共有3位运动员跑1000米,首先冲过终点的人,拥有”执行后续任务“的权利,并执行。当确认了首先冲过终点的人后,其它的人就不用跑了,被"抛弃"了,这些被”抛弃“的人,也没有权利完成其”执行后续任务“。中“抛弃”和“后续执行”策略。1、A和B条件任务均执行,但B任务提前完成,此时A任务未完成部分"抛弃"1、A和B条件任务均执行,但A任务提前完成,此时B任务未完成部分"抛弃"1、A和B条件任务均执行,但A任务提前完成,此时B任务未完成部分"抛弃"
2024-12-26 08:49:46
854
原创 Rust: offset祼指针操作
其实,你可以通过offset函数源码,可以了解更清楚,在offset内部,会再以bytes的倍数进行check_add。offset是偏移元素个数,不是字节数!
2024-12-24 08:54:02
568
原创 Rust : 生成日历管理markdown文件的小工具
可以输入任意时间段,运行后就可以生成以上的markdown文件。拟生成以下markdown管理小工具,这也是我日常工作日程表。
2024-12-02 16:40:24
1076
转载 Rust: 实现 async/await的详细代码【来源脚本之家】
实际上,Rust 选择将 executor 的实现交给第三方,自己只保留相关的交互接口(我在隔壁C++看了看,似乎也是一样的做法,并没有一个官方的 executor 实现,我唯一所知的在语言层面提供支持的只有Golang 的 goroutine)。值得注意的是,在第一种情况下,所有的 Future 都 poll 了一遍,FuturesUnordered 会调用一次 wake,告诉 executor FuturesUnordered 已经运行了一个轮回,wake 具体的实现则取决于 executor。
2024-09-18 13:27:25
759
原创 Rust : 从事量化的生态现状与前景
尽管做适不适合的评价,有点不太靠谱的。就象“黑神话:悟空”,你在设计之前,不同的技术选型,也一定是结合自身的特点和工具、平台自身的优劣来得出来的,可能有一些无奈,可能也有一些经验。回到最初的问题上:在策略开发上,是否适合,这个取决个人的水平,出活快就适合,出活快就算了;即使是一件确定的事呢,也会有不同的答案,因此不同的人,自然有不同的看法。角色和场景不同:有人做策略开发,有人做策略部署,有人做全栈,有人做风控或绩效评估等;语言精通水平不同:有人出神入化,有人只懂皮毛,出活有快有慢,自然会得出不同的结论。
2024-09-06 16:36:07
2220
原创 Rust :也谈Json与转换
serde_json常见方法是from_str()、from_value(),from_bytes()、from_reader()。Json类型是一种重要“可读”的数据类型,用到的地方很多,Rust在Json上各种处理还是很人性化,使用起来也很方便。不管是创建类似python dict类型,还是从字符类型来生成,都是很方便的。也就是说,可以从字符串,从文件,从字节都可以转换至特定或不特定的对象。2、分有类型与Struct的转化和无类型(Value)两种。1、Json如何创建?
2024-09-03 17:48:13
877
原创 Rust: Web框架Axum和Rest Client协同测试
在vscode中下载Rest Client插件后,通过创建以.http 或 .rest为结尾的文件,进行http请求测试。具体Rest Client功能很强大,这里只介绍,与Axum配合测试的方案。Axum作为Rust当红Web框架,值得了解一下。下面实例包括几个典型的常场场景。涉及到简单路由和提取器等,包括主要类型的文件形态的处理。二、Rest Client工具协同测试。
2024-08-29 17:55:53
987
原创 Rust : 数据分析利器polars用法
需要说明的是,在Rust中,不少的功能都需要对应features引入设置,这些需要特别注意,否则编译通不过。Polars虽牛刀小试,就显博大精深,在数据分析上,未来有重要一席。部分函数功能还没有完成,用todo标示,请大家注意。以下polars的版本是0.41.3。下面主要列举一些常见用法。
2024-08-16 13:24:42
1634
6
转载 聚宽揭秘:为什么量化研究员喜欢在Kubernetes上使用Fluid简化数据管理 ?
我们以 Kubernetes 为底座,同时使用了阿里云 NAS,OSS,SLS,GPU 共享调度,HPA,Prometheus,Airflow, Prometheus 等云和云原生技术,得益于其计算成本和易于规模扩展的优势,以及容器化在高效部署和敏捷迭代方面的长处,囊括了越来越多的计算场景,例如海量金融历史数据驱动的因子计算、量化模型训练、投研策略回测等。通过应用预热和按照业务规律进行扩缩容操作,Fluid 帮助客户在高峰时快速扩展计算资源,同时通过维护自我管理的数据缓存,实现数据缓存吞吐的动态弹性控制。
2024-07-23 10:03:59
448
原创 Rust: 关于Pin以及move前后分析
(2)自引用结构move后,可以看见:尽管对象的struct内存地址发生变化后,但对象中的content的地址也发生了新的变化,但对象中的自引用对应指针并没有变化(还是指向move前的对象的content地址),并没指向新对象content所对应的内存地址。不知大家注意到没有,上面的代码,SelfRef对象被安排了2次move,但是经过2次move的对象,其自引用指针的内存还是指次第1次move前的对象的地址位置。UnPin是trait。需要说明的是,如果对象是unpin的,再如何Pin也是pin不住的。
2024-07-08 18:33:35
966
原创 Rust: 高性能序列化库Fury PK bincode
对于二进制库来讲,据Fury官网的介绍,Fury性能要远远好于protobuf,且不象protobuf还需要定义IDL(即写.proto文件),非常轻便,随取随用。3、从序列化的内容对比来看,对应的u8字列向量,Fury的长度为114;1、对于Fury库而言,大家可以比较一下,不同结构序列化和反序列化的性能。在序列化库中,传统的有Json,XML,性能好的有thrift,protobuf等。不管是序列化和反序列化。目前Rust Fury库,还是初期,还是建议在github官网中,下载到本地。
2024-07-05 17:07:36
1175
原创 Rust: polars行遍历,从dataframe到struct及Bar设计比较
由于polars底层的arrow是列存储模式,行操作效率低下,官方也不推荐以行方式进行数据操作。场景:polars读取相应的关于历史股价的csv文件,其中有基本的行情信息,那么,如何对读取到的文件进行快速的行遍历?pandas提供了iterrows()、itertuples()、apply等行遍历的方式,还是比较方便的。polars对features的设置要求高,有些用到的特性需要准确打开,否则代码编译会通不过。此外,dataframe转bars的效率并不高,期待找到更高效的方式替代。
2024-07-02 11:20:33
1646
原创 Rust: duckdb和polars读csv文件比较
结论:从上面的样本来看,分别用duckdb和polars来读csv两个不同大小的文件,polars有较明显的优势。
2024-06-26 15:55:16
1533
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅