Rust
文章平均质量分 56
rustroom
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
跟着agent: 学习XTP及Rust封装
说明: 以下是在 opencode 、k3和deepseek v4 pro交互后的产物。全程AI。谨供参考。假设你住在一个小区,想每天喝到新鲜牛奶。小区里有两家配送公司用的是同一套运营体系:下面以鲜奶公司为例,把整个 XTP 体系讲清楚。你想订牛奶,首先要打通鲜奶公司的客服热线。你告诉客服你的客户编号(client_id = 1。1~99 是普通用户,100~255 是公司内部预留号)、存放订单记录的文件夹(save_file_path),以及你希望客服跟你唠多细(log_level = Debug 表示原创 2026-07-26 20:15:11 · 221 阅读 · 0 评论 -
Kimi K3:Rust封装XTP接口详细教程实践
Rust封装XTP C++接口教程摘要 本文详细讲解如何用Rust封装中泰证券XTP的C++交易接口,提供从原理到实践的完整指南。主要内容包括: 核心挑战:解决C++虚函数调用、回调接口实现、内存布局匹配等关键难题,而非简单extern "C"调用 技术方案:采用libloading动态加载DLL+手工重建vtable的方案,避免bindgen对C++支持不足的问题 实现步骤: 分析XTP API结构(TraderApi/QuoteApi及其SPI回调) 处理ABI兼容性问题(调用约定、vtable布局)原创 2026-07-19 18:34:29 · 482 阅读 · 0 评论 -
opencode: 用rust写本地自定义mcp
本文介绍了一个使用Rust实现的MCP(Model Context Protocol)示例服务器。通过toml文件配置项目依赖,包括rmcp库、serde、tokio等。main.rs中实现了五个实用工具功能:天气查询(模拟数据)、四则运算计算器、时间日期获取、UUID生成和文本统计。每个工具都有详细的参数定义和功能描述,使用Rust的宏特性自动生成JSON Schema和处理协议消息。服务器通过标准输入输出与MCP客户端通信,展示了如何在Rust中构建一个轻量级MCP服务。原创 2026-06-24 10:09:31 · 119 阅读 · 0 评论 -
Rust: 量化策略回测与简易线程池构建(MPMC)
在上文中介绍了自定义MPSC+Arc+Mutex线程池框架方案。下面来介绍一下MPMC的线程池方案。提供的MPMC框架,具体相关文章可以详细阅读。和上文中相比,本文中的MPMC方案技术相对难度较大,要点较多。原创 2025-11-21 15:19:37 · 589 阅读 · 0 评论 -
Rust: 量化策略回测与Rayon线程池
本文介绍了使用Rust的Rayon库实现量化策略并发回测的方法。通过ThreadPoolBuilder创建3个线程的线程池,利用par_bridge()实现策略的并行执行。文中展示了三种量化策略(趋势跟踪、布林带和高频交易)的实现,每个策略耗时1秒。测试结果显示8个策略在3个线程上分配执行,总耗时约3秒,与预期性能相符。相比自定义线程池方案,Rayon提供了更简洁的并发编程接口,同时保持了相似的执行效率。原创 2025-11-21 08:56:14 · 380 阅读 · 0 评论 -
Rust :量化策略回测与tokio异步实践
本文探讨了在Rust中使用Tokio框架实现量化策略异步回测的方案。虽然Tokio更适合IO密集型场景,但通过将策略封装为Pin<Box<dyn Future>>类型,可以在CPU密集型任务中简化多线程管理。文中展示了使用3个Tokio工作线程并行执行8个策略(每个耗时1秒)的示例,总耗时约3秒,与线程池方案性能相当。这种方案通过#[tokio::main]属性配置线程数,实现了策略的异步抽象化,为量化框架开发提供了一种简化方案。原创 2025-11-19 15:55:26 · 433 阅读 · 0 评论 -
Rust: 量化策略回测与简易线程池构建、子线程执行观测
本文探讨了使用Rust构建简易线程池回测框架的方法,重点介绍了两种消息传递机制:MPSC+Arc+Mutex和MPMC方案。作者展示了一个基于MPSC+Arc+Mutex的线程池实现,包含任务分发、反馈收集和线程管理功能。该框架通过Message枚举类型处理任务、反馈和关闭指令,Worker结构体管理线程执行,ThreadPool负责整体调度。代码示例演示了如何创建线程池、执行任务和实现优雅关闭,为量化策略回测提供了基础的多线程技术支持。原创 2025-11-11 14:04:24 · 662 阅读 · 0 评论 -
Rust : 量化策略回测与多线程技术原型
本文探讨了在Rust中实现多策略并行回测的技术方案。通过枚举类型统一封装不同策略的输入参数(Parameter)和输出结果(OutPut),将策略函数抽象为统一的FnOnce()->OutPut闭包格式,并使用Box<dyn FnOnce>进行动态分发。采用标准库thread模块实现1:1的线程策略映射,使3个策略的并行执行时间从单线程的3秒缩短到1秒左右。文章详细介绍了参数封装、输出定义、函数抽象和多线程实现的关键技术点,并通过完整代码示例验证了方案的可行性。该方案可根据实际需求进一步优原创 2025-11-11 09:21:45 · 520 阅读 · 0 评论 -
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 · 476 阅读 · 0 评论 -
Rust : 关于解引用“*”
本文主要探讨Rust中解引用操作符(*)的使用场景和注意事项。通过多个代码示例展示了:1) 基本解引用和重新借用的模式匹配;2) 自定义智能指针MyBox与Deref特性的实现;3) 解引用导致所有权转移的情况;4) 可变引用的解引用赋值;5) match语句中与ref、_等模式搭配使用时的所有权处理。特别指出Box和自定义MyBox在解引用行为上的差异,以及match模式中ref和_等特殊符号避免所有权转移的作用。原创 2025-09-15 15:45:09 · 454 阅读 · 0 评论 -
Rust : 关于Deref
本文介绍了Rust中Deref Trait的核心概念和用法。Deref Trait通过隐式自动解引用来简化代码操作,其核心逻辑是将*T转换为*(T.deref())。文章详细解析了常见的取引用和解引用操作,包括&*T、&**T等组合操作的含义,并重点说明了点操作符.背后隐含的多步自动解引用过程。此外,还介绍了通过Deref实现的类型转换&T到&U的机制,以及这种转换在函数参数传递中的应用场景。理解Deref Trait的自动解引用特性对掌握Rust所有权系统至关重要。原创 2025-09-12 16:50:54 · 471 阅读 · 0 评论 -
【转】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 · 366 阅读 · 0 评论 -
【转】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 · 352 阅读 · 0 评论 -
Rust:AI编程、过程宏与源码
宏是rust的灵魂小料和魔法。从println!("hello world!")那刻开始,rust世界无宏不成席,无宏不欢。和显性的声明宏不同,隐藏在代码深处的过程宏,静悄悄。尽管它的出现并不是用来装B的,但如果你喜欢装,过程宏一定不可以不玩。你可以不用,但你不能不懂。对rust人来讲,不理解宏,定会少了一份亲切和挚爱。如果从定义逐步展开,过程宏的线索就会慢慢就浮出水面。原创 2025-07-22 14:54:06 · 576 阅读 · 0 评论 -
转Rust 实战丨精品选读
【转】Rust 实战系列丨精品选读原创 2025-06-27 09:39:14 · 290 阅读 · 0 评论 -
Rust: CString、&CStr和String、&str
各种String各有各用途,本文希望有助于加深认识。原创 2025-05-28 17:03:12 · 734 阅读 · 0 评论 -
【转】Rust 多维数组 ndarray
具体点击此文转载 2025-05-23 15:35:36 · 179 阅读 · 0 评论 -
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 · 782 阅读 · 0 评论 -
Rust : 生成日历管理markdown文件的小工具
可以输入任意时间段,运行后就可以生成以上的markdown文件。拟生成以下markdown管理小工具,这也是我日常工作日程表。原创 2024-12-02 16:40:24 · 1186 阅读 · 0 评论 -
Rust: 实现 async/await的详细代码【来源脚本之家】
实际上,Rust 选择将 executor 的实现交给第三方,自己只保留相关的交互接口(我在隔壁C++看了看,似乎也是一样的做法,并没有一个官方的 executor 实现,我唯一所知的在语言层面提供支持的只有Golang 的 goroutine)。值得注意的是,在第一种情况下,所有的 Future 都 poll 了一遍,FuturesUnordered 会调用一次 wake,告诉 executor FuturesUnordered 已经运行了一个轮回,wake 具体的实现则取决于 executor。转载 2024-09-18 13:27:25 · 840 阅读 · 0 评论 -
Rust : 从事量化的生态现状与前景
尽管做适不适合的评价,有点不太靠谱的。就象“黑神话:悟空”,你在设计之前,不同的技术选型,也一定是结合自身的特点和工具、平台自身的优劣来得出来的,可能有一些无奈,可能也有一些经验。回到最初的问题上:在策略开发上,是否适合,这个取决个人的水平,出活快就适合,出活快就算了;即使是一件确定的事呢,也会有不同的答案,因此不同的人,自然有不同的看法。角色和场景不同:有人做策略开发,有人做策略部署,有人做全栈,有人做风控或绩效评估等;语言精通水平不同:有人出神入化,有人只懂皮毛,出活有快有慢,自然会得出不同的结论。原创 2024-09-06 16:36:07 · 2393 阅读 · 0 评论 -
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 · 1055 阅读 · 0 评论 -
Rust : 数据分析利器polars用法
需要说明的是,在Rust中,不少的功能都需要对应features引入设置,这些需要特别注意,否则编译通不过。Polars虽牛刀小试,就显博大精深,在数据分析上,未来有重要一席。部分函数功能还没有完成,用todo标示,请大家注意。以下polars的版本是0.41.3。下面主要列举一些常见用法。原创 2024-08-16 13:24:42 · 1862 阅读 · 5 评论 -
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 · 1280 阅读 · 0 评论 -
Rust : windows下protobuf和压缩传输方案
proto文件中主要模拟了一个dbpystream中一个get_price函数的输入和输出的格式,输入HistoryBarRequest ,输出HistoryBarResponse。HistoryBarResponse中,有代码名称,日期,开盘价,最高价等。上面polars,chrono,prost-types,prost-build,prost是关键库,其它暂时可以不看。可见,在src/目录下,创建了一个pb文件夹,存放未来生成的dbdata.proto文件。四、原始数据、main.rs。原创 2024-06-08 16:30:03 · 1702 阅读 · 1 评论 -
Rust : 声明宏在不同K线bar类型中的应用
Rust的宏功能博大精深。在K线bar中,往往有很多不同分时k线图,比如1,2,3,5,。60,120,250,300…我们先考虑,impl_single_bar接受单一的类型参数,比如Bar1,Bar3,Bar5,…如果不用宏,那么手写会比较麻烦。下面就试用一下宏来实现不同类型的bar.这里就需要用到rust宏的重复的写法。这里不特别展开,相关的资料很多。为了简单起见,我们把不同分时的Bar抽象成下面的结构。这样的确方便了一些,但是因为参数是一个个输入,需要。每一个类型,写一行函数,还是不太方便。原创 2024-05-04 14:08:15 · 971 阅读 · 0 评论 -
Rust : condvar中一对一和多对一模式初探
但其它典型的场景可能还有多对一,不断发送通知给一个接收者。假定一个员工收到一个任务,就是模拟是一个时间片,到时了,就会触发通知发出(notify_one)。要注意notify_one()到wait()这个过程,需要特别小心,否则可能会想象中不一样。condvar是不经常碰到的,但其实在tokio之类库中,还是非常核心的作用。通过Mutex中包裹一个Hashmap结构,来对多个通知的状态进行管理。想进一步体会condvar的使用,还是从场景出发。一、一个通知发送者,一个接收者。二、多个通知者,一个接收者。原创 2024-04-19 13:28:31 · 796 阅读 · 0 评论 -
dbpystream:证券股票数据服务API开源
基于上面的痛点 ,dbpystream的目的是根据自身的业务需要,把企业内部的数据进行服务化,让企业内的员工能方便得到数据服务,而不再让数据服务只是一小部分人的特权,让数据可以在更广泛的层面得到充分的利用,并发挥数据驱动业务的价值。dbpystream只做整合部分,不能替代供应商API,是对供应商API服务包装,为了让服务更好的落地,而供应商API做的是一套完整的生产和质量管理流程。供应商的API的服务质量是dbpystream的天花板,没有优秀的供应商服务(源头),就不可能有好的内部服务。原创 2024-03-01 18:05:26 · 876 阅读 · 0 评论 -
Python:关于数据服务中的Web API的设计
需要说明的是,这里讨论的是web api前后端,当然还有其它方案,thrift,grpc等。在web api的基础上,可以提供封装sdk库,供前端函数式调用服务或纯手动写restful api 的方式,自己封装调用函数服务。可以考虑在前端提供不同的选择,比如,是python sdk模式(提供安装包),还是纯restful模式(手写post,get等),以及不同的语言选择,来指定特定后端的序列化和压缩库的选择,便于前端有更好的适用性和体验。不仅需要考虑性能,选择读写高效的库,而且还要考虑跨语言的问题。原创 2024-02-29 08:49:10 · 1055 阅读 · 0 评论 -
Rust: reqwest库示例
主要看tokio和reqwest设置就可以了。其它是个人其它的库,没有删除。也可以处理中文字符的问题。cargo.toml文件,同上。二、异步处理多个任务。原创 2024-02-22 17:15:15 · 1446 阅读 · 0 评论 -
CTP:关于cc和bindgen库及rust工程组织
在这个目录下,建一个build.rs,用bindgen库生成cpp.h的头文件相应的rust绑定文件,生成的文件放在ctp-api目录下。这里去除了test,这里这样设置就可以了 .layout_tests(false),否则文件太长了,6-7万行。由ctp-sdk下的build.rs生成(在ctp-sdk下运行cargo build --release).。主要的目的是基于bindgen库生成与cpp的.h文件相对应一个binding.rs文件,后面供策略使用。主要是对ctp进行相关的组织。原创 2023-09-29 22:38:24 · 2708 阅读 · 1 评论 -
Rust : 与C交互动态库和静态库的尝试
c_part下放了ctools.c文件,里面有一些库函数,需要让rust调用。当然,ctools.c也可以放在其它地方,只需要后面的地址一致即可以。需要注意的是,file中ctool.c文件地址一定要准确,否则会有如下报错信息(但没有明示说路径不对,找不到文件之类)。如果rust要调用自建的C库中的函数,情况会较上面复杂一些。今天介绍通过cc库,通过build生成脚本的方式,实现rust调用c端库函数。rust调用C端的库函数,有很多方法,场景也有所不同。三、rust调用C封装好的静态库或动态库。原创 2023-09-16 11:59:33 · 5991 阅读 · 0 评论 -
Rust: 聊聊 *const ()和fn(*const ())
在Bytes库在github源码(https://docs.rs/bytes/1.1.0/src/bytes/bytes.rs.html#94-100)有关Bytes的定义中,进而,查看https://doc.rust-lang.org/src/core/sync/atomic.rs.html#175,可以了解AtomicPtr的定义,另外,*const ()也自然,也可以联想到,它可能是表示指向一个固定的函数的raw pointer.其中的data字段中有(),一般地,()表示一个空元组。原创 2023-08-16 10:01:43 · 1776 阅读 · 0 评论 -
Rust std::mem::transmute实例讲解
要转换容器内容的内部类型,您必须确保不违反任何容器的不变量。其他容器可能依赖于类型的大小、对齐方式,甚至是 TypeId ,在这种情况下,如果不违反容器不变量,就根本不可能进行转换。),调用者必须确保正确对齐指向的值。本文章向大家介绍Rust std::mem::transmute实例讲解,主要分析其语法、参数、返回值和注意事项,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。以下是transmute 的常见应用,可以用更安全的构造替换。将一种类型的值的位重新解释为另一种类型。转载 2023-03-10 14:29:36 · 2150 阅读 · 1 评论 -
关于Rust中的自引用:差之毫厘?!
【代码】关于Rust中的自引用以及指针变化。原创 2023-02-28 15:20:49 · 1487 阅读 · 1 评论 -
rust: clickhouse异步库
在github上有,一个异步连接clickhouse的库,值得一看。具体用法:extern crate tokio;use std::{env, error::Error};use clickhouse_rs::{row, types::Block, Pool};use futures_util::StreamExt;async fn execute(database_url: String) -> Result<(), Box<dyn Error>> {原创 2022-02-25 17:45:14 · 1265 阅读 · 0 评论 -
有意思的网站:https://godbolt.org/
https://godbolt.org/原创 2022-02-08 10:22:07 · 2493 阅读 · 1 评论 -
RUST: Blocking waiting for file lock on package cache
原创 2022-02-06 10:21:16 · 659 阅读 · 0 评论 -
rust :字节跳动镜像设置
[source.crates-io]registry = “https://rsproxy.cn”具体在.cargo下config文件中:原创 2022-02-04 20:57:37 · 1775 阅读 · 0 评论 -
rust: error: linking with `cc` failed: exit code: 1
linux:cargo rustc -- -C link-arg=-nostartfileswindows:cargo rustc -- -C link-arg=-nostartfiles转载 2022-02-04 17:25:58 · 2207 阅读 · 0 评论
分享