Rust
文章平均质量分 51
songroom
这个作者很懒,什么都没留下…
展开
-
dbpystream:证券股票数据服务API开源
基于上面的痛点 ,dbpystream的目的是根据自身的业务需要,把企业内部的数据进行服务化,让企业内的员工能方便得到数据服务,而不再让数据服务只是一小部分人的特权,让数据可以在更广泛的层面得到充分的利用,并发挥数据驱动业务的价值。dbpystream只做整合部分,不能替代供应商API,是对供应商API服务包装,为了让服务更好的落地,而供应商API做的是一套完整的生产和质量管理流程。供应商的API的服务质量是dbpystream的天花板,没有优秀的供应商服务(源头),就不可能有好的内部服务。原创 2024-03-01 18:05:26 · 387 阅读 · 0 评论 -
Python:关于数据服务中的Web API的设计
需要说明的是,这里讨论的是web api前后端,当然还有其它方案,thrift,grpc等。在web api的基础上,可以提供封装sdk库,供前端函数式调用服务或纯手动写restful api 的方式,自己封装调用函数服务。可以考虑在前端提供不同的选择,比如,是python sdk模式(提供安装包),还是纯restful模式(手写post,get等),以及不同的语言选择,来指定特定后端的序列化和压缩库的选择,便于前端有更好的适用性和体验。不仅需要考虑性能,选择读写高效的库,而且还要考虑跨语言的问题。原创 2024-02-29 08:49:10 · 628 阅读 · 0 评论 -
Rust: reqwest库示例
主要看tokio和reqwest设置就可以了。其它是个人其它的库,没有删除。也可以处理中文字符的问题。cargo.toml文件,同上。二、异步处理多个任务。原创 2024-02-22 17:15:15 · 672 阅读 · 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 · 2091 阅读 · 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 · 2309 阅读 · 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 · 1153 阅读 · 0 评论 -
Rust std::mem::transmute实例讲解
要转换容器内容的内部类型,您必须确保不违反任何容器的不变量。其他容器可能依赖于类型的大小、对齐方式,甚至是 TypeId ,在这种情况下,如果不违反容器不变量,就根本不可能进行转换。),调用者必须确保正确对齐指向的值。本文章向大家介绍Rust std::mem::transmute实例讲解,主要分析其语法、参数、返回值和注意事项,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。以下是transmute 的常见应用,可以用更安全的构造替换。将一种类型的值的位重新解释为另一种类型。转载 2023-03-10 14:29:36 · 1352 阅读 · 1 评论 -
关于Rust中的自引用:差之毫厘?!
【代码】关于Rust中的自引用以及指针变化。原创 2023-02-28 15:20:49 · 1196 阅读 · 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 · 931 阅读 · 0 评论 -
有意思的网站:https://godbolt.org/
https://godbolt.org/原创 2022-02-08 10:22:07 · 1818 阅读 · 1 评论 -
RUST: Blocking waiting for file lock on package cache
原创 2022-02-06 10:21:16 · 488 阅读 · 0 评论 -
rust :字节跳动镜像设置
[source.crates-io]registry = “https://rsproxy.cn”具体在.cargo下config文件中:原创 2022-02-04 20:57:37 · 1289 阅读 · 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 · 1708 阅读 · 0 评论 -
RUST: 学习宝典Rust Language Cheat Sheet->https://cheats.rs/
https://cheats.rs/原创 2022-01-01 11:36:33 · 534 阅读 · 0 评论 -
rust: linker-link-exe-not-found
https://stackoverflow.com/questions/55603111/unable-to-compile-rust-hello-world-on-windows-linker-link-exe-not-found/55603112#55603112原创 2021-12-18 11:28:24 · 343 阅读 · 0 评论 -
python : pandas库的后继者polars库
polars库是python的又一dataframe库,显然,在pandas库的光芒下,要上位是不容易的,必须有过硬的功夫。一、用法基本一致从介绍上看,两者有孪生相,用法和接口基本无二。至少大部分非常非常相似。估计很多只需要在import 这行改一行,估计就能用上了。安装:pip install polars 也可以通过镜像,这样快一些。二、速度polars优势明显import time import polars as plimport pandas as pdfile = r"C:原创 2021-12-14 19:35:27 · 4940 阅读 · 2 评论 -
Rust 中 Trait 的使用及实现分析
Rust 中 Trait 的使用及实现分析尘香 蚂蚁智能监控 今天使用方式 基本用法 静态派发 动态派发 impl trait 高阶用法 关联类型 Derive常见问题 向上转型(upcast) 向下转型(downcast) Object safety总结参考在 Rust 设计目标中,零成本抽象是非常重要的一条,它让 Rust 具备高级语言表达能力的转载 2021-05-07 13:18:07 · 2910 阅读 · 3 评论 -
PyO3: python调用rust代码尝试
PyO3功能很强大,是python和rust之间交互桥梁。今天主要试验一下python端调用rust端编译的代码库。说明:本文环境中在windos平台下。linux平台或其它平台请参看github上pyo3的说明。一、rust 端在rust端创建pyrust库文件:cargo new pyrust --lib同时在lib.rs文件中,写入以下代码:其中,#[pyfunction]是指写入rust方法,pyo3自动会转成python能调用的函数;#[pymodule]是指把这些函数放在一个mo原创 2021-04-25 11:41:24 · 4202 阅读 · 0 评论 -
Rust 碎碎念:【译】Arc 在 Rust 中是如何工作的
【译】Arc 在 Rust 中是如何工作的Praying公众号: Rust碎碎念原文标题:How Arc works in Rust原文链接:https://medium.com/@DylanKerler1/how-arc-works-in-rust-b06192acd0a6公众号: Rust 碎碎念翻译 by: Praying原子引用计数(Arc)类型是一种智能指针,它能够让你以线程安全的方式在线程间共享不可变数据。我还没有发现能够很好地解释它的工作原理的文章,所以我决定尝试来写一篇。(转载 2021-04-20 09:32:32 · 590 阅读 · 1 评论 -
透过 Rust 探索系统的本原:并发原语
https://zhuanlan.zhihu.com/p/365905573转载 2021-04-19 21:48:15 · 128 阅读 · 0 评论 -
透过 Rust 探索系统的本原:网络篇
https://zhuanlan.zhihu.com/p/365905512转载 2021-04-19 21:34:40 · 172 阅读 · 0 评论 -
Rust : wasm尝试 与wasmtime库
尝试了一下wasmtime库,顺便了解一下编译wasm文件的过程。说明一下,我在wsl平台上进行的以下尝试。此前出现过一些问题,主要是文件读写的权限,后面把权限打开了,按照wasmtime库的说明,基本上就顺利了。具体的参考资料可以参阅:https://github.com/bytecodealliance/wasmtime几个步骤:以hello.rs文件为例$ rustup target add wasm32-wasi$ rustc hello.rs --target wasm32-wasi原创 2021-04-11 23:22:46 · 1116 阅读 · 0 评论 -
Rust : 简单模拟交易所与参与机构
toml文件[package]name = "test_rpc"version = "0.1.0"authors = ["songroom"]edition = "2018"# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html[dependencies]tonic = "0.3"prost = "0.6"tokio = { version = "原创 2021-04-03 22:49:39 · 688 阅读 · 0 评论 -
Rust: 镜像设置要注意影响效果
[source.crates-io]registry = "https://github.com/rust-lang/crates.io-index"# 指定镜像replace-with = 'tuna'# 清华大学[source.tuna]registry = "https://mirrors.tuna.tsinghua.edu.cn/git/crates.io-index.git"# 中国科学技术大学[source.ustc]registry = "git://mirrors.u.原创 2021-03-23 20:15:20 · 279 阅读 · 0 评论 -
Nugine: Rust 性能调优
Rust 性能调优Nuginehttps://zhuanlan.zhihu.com/p/191655266?utm_source=wechat_session最近我遇到一个性能下降问题,在动用各种工具折腾到接近放弃之时,又想出一个点子,获得了最高九倍的性能提升。为此专门写一篇文章,复盘一下性能调优的历程。问题背景在 ICPC 比赛中,选手阅读题目,编写程序,提交到在线评测系统(OJ)。OJ 会编译运行选手提交的程序,选手从标准输入读取题目数据,向标准输出写入答案。在选手程序运行完毕后,OJ 会比转载 2021-03-22 20:32:12 · 783 阅读 · 0 评论 -
Rust : Tonic 基于Rust的gRPC实现
【每周一库】-Tonic 基于Rust的gRPC实现Rust语言学习交流8月前TonicgRPC的rust实现,高性能,开源,为移动设备与HTTP/2准备的通用RPC框架tonic是基于HTTP/2的gRPC实现,专注于高性能,互通性和灵活性。创建该库的目的是为了对async/await具有一流的支持,并充当用Rust编写的生产系统的核心构建块。特性双向流传输高性能异步io互通性通过rustls进行TLS加密支持负载均衡自定义元数据身份认证健康检查入门本教程作为Tonic的入转载 2021-03-20 23:26:11 · 2616 阅读 · 0 评论 -
Rust : VSCode中调试,Windows与WSL
调试对任何程序都非常重要。一般地,不同的操作系统有所不同。因为我大部分用VSCODE在WINDOWS中或WSL中比较多,下面以上面两者为例。一、Windows环境1、vscode中安装插件C/C++,如下图所示:2、新创建一个说明示例并补充相应的简单工程代码。并双击箭头处。3、创建launch.json文件可以在文件中增加:“program”: “${workspaceRoot}/target/debug/debug_rust.exe”, // 指向要调试的代码文件如果此前launch.j原创 2021-03-07 20:23:29 · 1353 阅读 · 0 评论 -
Rust : CTP中交互中字符串及处理
从C端读到的假设是[c_char,16]类似结构,可以如下处理: let s_16 = String::from("abc").to_char_16() ;//假设从C端读到[i8;16] let s_16 :Vec<u8> = s_16.iter().map(|&x|x as u8).collect(); let string_utf8_lossy = String::from_utf8_lossy(&s_16); println!("strin原创 2021-03-02 20:15:15 · 361 阅读 · 0 评论 -
CTP: 为什么报网络原因发送失败,但连接却成功?
碰到一个很妖的问题,最后请教一位高手把问题定位到:md is logining!ptr :0x7f0318027d80init ->init <-get api version :"v6.5.1_20200908 10:25:08"get trade day :"20210222"get_login_field -> login => req_user_login return => n :-1行情登陆失败! => 网络原因发送失败subsrib原创 2021-02-20 11:11:54 · 656 阅读 · 0 评论 -
mut a:&T 和a:&mut T的区别
mut a:&T 和a:&mut T的区别Praying公众号: Rust碎碎念17 人赞同了该文章概述话说 StackOverflow 上有个哥们问了一个问题,正如标题所述,它问的是下面这段代码里:fn modify_foo(mut foo: Box<i32>) { *foo += 1; *foo }fn modify_foo(foo: &mut i32) { *foo += 1; *foo }代码里的mut放在 mut foo: Box和foo: &转载 2021-01-24 15:38:02 · 337 阅读 · 0 评论 -
袁承兴:【译】Async/Await(一)——多任务
【译】Async/Await(一)——多任务袁承兴原文标题:Async/Await原文链接:https://os.phil-opp.com/async-await/#multitasking在本文中我们将讨论协作式多任务(cooperative multitasking)和 Rust 中的 async/await 特性。我们会详细了解 async/await 在 Rust 中是如何工作的,包括Future trait 的设计,状态机的转换和pinning。 然后,我们通过创建一个异步键盘任务和一个基转载 2021-01-17 14:03:36 · 185 阅读 · 0 评论 -
袁承兴:Rust异步编程 Pinning
【译文】Rust异步编程: Pinning袁承兴原文:选自《Rust异步编程》第4章 Pinning译者注:如果你一时半会没啃动Pinning,也别心急,试试阅读这篇《Rust的Pin与Unpin - Folyd》,理解起来会容易不少。Pinning详解让我们尝试使用一个比较简单的示例来了解pinning。前面我们遇到的问题,最终可以归结为如何在Rust中处理自引用类型的引用的问题。现在,我们的示例如下所示:use std::pin::Pin;#[derive(Debug)]struc转载 2021-01-17 14:00:22 · 274 阅读 · 0 评论 -
Rust: tokio,异步代码与运行速度初探
toml:[dependencies]tokio = { version = "1", features = ["full"] }futures = "0.3.4"代码:use std::time::{Duration, Instant};use std::thread;use tokio::time;async fn hello_world() { println!("hello world!");}// 同步sleepasync fn sync_time_01() {原创 2021-01-03 11:47:09 · 1007 阅读 · 0 评论 -
Rust : ptr::eq
Examplesuse std::ptr;let five = 5;let other_five = 5;let five_ref = &five;let same_five_ref = &five;let other_five_ref = &other_five;assert!(five_ref == same_five_ref);assert!(ptr::eq(five_ref, same_five_ref));assert!(five_ref == o转载 2020-11-17 15:55:26 · 195 阅读 · 0 评论 -
Rust : utf8与unicode码
一、理论说明UTF-8UTF-8 是一个非常惊艳的编码方式,漂亮的实现了对 ASCII 码的向后兼容,以保证 Unicode 可以被大众接受。UTF-8 是目前互联网上使用最广泛的一种 Unicode 编码方式,它的最大特点就是可变长。它可以使用 1 - 4 个字节表示一个字符,根据字符的不同变换长度。编码规则如下:对于单个字节的字符,第一位设为 0,后面的 7 位对应这个字符的 Unicode 码点。因此,对于英文中的 0 - 127 号字符,与 ASCII 码完全相同。这意味着 ASCII 码那原创 2020-11-10 14:31:19 · 2126 阅读 · 0 评论 -
Rust:命令行参数与环境变量操作
Rust中,经常碰到命令行参数和环境变量操作。下面主要来了解一下。一、命令行参数从上面可以看到,std::env实现了从cargo run 命令行中提取命令行参数 a b c进入程序。二、环境变量std::env::var函数,实现了操作系统中环境变量的功能。...原创 2020-11-07 11:20:51 · 8038 阅读 · 0 评论 -
Rust : 性能测试criterion库
在量化领域,对性能要求比较高,特别是高频交易,那是纳秒必争。在RUST中,测试一个函数,或一个操作耗时即性能分析,应是如何做呢?一、计时器是否可以用std::time::systime 来计算花时情况?我们来试一试:use std::time::SystemTime;pub struct Stock{ pub price:f64, pub volume:i32, pub code:String, pub amount:f64,}impl Stock{ f原创 2020-11-07 10:12:50 · 3217 阅读 · 2 评论 -
Rust : 如何将C字符串转换为Rust字符串并通过FFI返回?
如何将C字符串转换为Rust字符串并通过FFI返回?我正在尝试获取C库返回的C字符串,并通过FFI将其转换为Rust字符串。mylib.cconst char* hello(){return “Hello World!”;}main.rs#![feature(link_args)]extern crate libc;use libc::c_char;#[link_args = “-L . -I . -lmylib”]extern {fn hello() -> *c_char;转载 2020-10-28 15:48:54 · 2271 阅读 · 0 评论 -
segment fault 至core dump的原因
最近,写rust ffi 代码,出现segment fault 至core dump。看了一篇文章,值得留意。造成segmentation fault的可能原因分析一 造成segment fault,产生core dump的可能原因1.内存访问越界a) 由于使用错误的下标,导致数组访问越界b) 搜索字符串时,依靠字符串结束符来判断字符串是否结束,但是字符串没有正常的使用结束符c) 使用strcpy, strcat, sprintf, strcmp, strcasecmp等字符串操作函数,将目标字转载 2020-10-27 08:52:09 · 792 阅读 · 0 评论 -
CTP:rust封装找不到thostmduserapi_se、thosttraderapi_se问题
当你使用CC、rust_bindgen之后,你的封装的依赖库仍然用不起来,或找不到相应的.so文件,你需要注意一下1、build.rs注意“=“后面不能出现空格!use std::env;use std::path::PathBuf;fn main() { cc::Build::new() .file("../ctp_bind/src/bridge/bridge.cpp") .cpp(true) .warnings(false)原创 2020-10-24 12:25:04 · 1936 阅读 · 0 评论