
Rust
文章平均质量分 85
一对一答疑的编程作家朱文伟
这个作者很懒,什么都没留下…
展开
-
Rust如何引入源码作为依赖
这个动态库可能依赖于其它动态库(比如,Linux 下用 C 语言写的 PostgreSQL 的 libpq.so,或者另一个编译成 "dylib" 的 Rust 动态库)。编译器会把所有实现的 Rust 库代码以及依赖的库代码全部编译到一个静态库文件中,也就是对外界不产生任何依赖了。当我们引用三方包的源码后,编译时Cargo也会根据三方包的Cargo配置编译这些三方包的源码,然后把编译的结果输出到本项目的target/[debug/release]/deps目录下,这样本项目就可以使用这些三方包了。原创 2025-03-31 08:21:25 · 1064 阅读 · 0 评论 -
Rust 有问有答之 use 关键字
主函数 main.rs 想要调用 print_function,需要对 mod 标识访问级别,使用关键字 pub。use 是 Rust 编程语言的关键字。using 是 编程语言 C# 的关键字。为方法 other_funtion 创建别名 ab_funtion。为命名空间创建别名,或导入在其他命名空间中定义的类型。关键字是预定义的保留标识符,对编译器有特殊意义。定义一个范围,在此范围的末尾将释放对象。使用关键字 use 为作用域创建别名。外部模块 a.rs,代码内容如下。手动加上作用域的方式声明。原创 2025-03-31 07:48:17 · 546 阅读 · 0 评论 -
Rust到底值不值得学--Rust对比、特色和理念
其实我一直弄不明白一点,那就是计算机技术的发展,是让这个世界变得简单了,还是变得更复杂了。当然这只是一个玩笑,可别把这个问题当真。然而对于IT从业者来说,这可不是一个玩笑。几乎每一次的技术发展,都让这个生态变得更为复杂。“英年早秃”已经成为一种很普遍的现象。Rust是近两年呼声比较高的一种新型开发语言。市场占有量并不大,但增长速度极为迅猛。有人统计过,在计算机行业,平均每33.5天就有一种所谓的新型开发语言面世,这还不包括很多企业内部、项目内部的内置简易流程工具。原创 2024-12-09 08:17:31 · 1019 阅读 · 0 评论 -
tonic-Rust grpc初体验
gRPC 是开发中常用的开源高性能远程过程调用(RPC)框架,tonic 是基于 HTTP/2 的 gRPC 实现,专注于高性能、互操作性和灵活性。该库的创建是为了对 async/await 提供一流的支持,并充当用 Rust 编写的生产系统的核心构建块。今天我们聊聊通过使用tonic 调用grpc的的具体过程。原创 2024-06-15 08:02:21 · 993 阅读 · 0 评论 -
Rust子命令提示,提高用户体验
在MyHelper 结构体中,需要我们自己来实现completer的逻辑。CommandCompleter 的实现部分比较多,大致包括两个部分,前一部分包括:获取某一级别下所有可能的子命令、获取某级别下某字符串开头的子命令、获取某级别下某个命令的所有子命令,等基本功能。SubCmd 结构体包含:命令级别,命令名称,以及该命令包含的子命令信息,以便在实现实现 autocomplete 时定位命令和子命令的范围。函数complete_cmd用来计算行中的位置以及在该位置的替换内容。原创 2024-05-30 13:32:43 · 395 阅读 · 0 评论 -
Rust中的CLI程序
技术的学习从不会到会的过程是最有意思的,也是体会最多的。一旦熟练了,知识变成了常识,可能就失去了记录学习过程的最佳时机。在我看来学习一门计算机语言和学习人类语言有很多共通之处。我们学习人类语言是从单个的词开始,然后是简单句子,通过不断的与他人交互练习掌握语法和语言习惯。当熟练到一定程度就可以表达思想。计算的语言也差不多,熟悉关键词,基本逻辑,标准库,写应用。只是沟通的对象是机器而已。既然是学就不能在开始搞的太难。学习本来就是个艰苦的差事。上来就干特别复杂的事情往往会坚持不下去。原创 2024-05-27 08:06:52 · 893 阅读 · 0 评论 -
文盘Rust -- 生命周期问题引发的 static hashmap 锁
在这里我觉得所谓桩有两层含义,一个是木人桩,就是练习的工具,一个是”站桩“,传统武术训练基本功的方法。后面如果在Rust的开发过程中有其他问题,我本人会把问题结合实际也写到这个系列里,也希望社区里对Rust感兴趣的小伙伴一起来”盘Rust“。问题找到了就可以着手解决办法了,既然是与rust的生命周期有关,那是不是可以把读和写分别放在两个不同的生命周期里呢,于是对代码进行改写。2021年上半年,撸了个rust cli开发的框架,基本上把交互模式,子命令提示这些cli该有的常用功能做进去了。原创 2024-05-27 07:19:02 · 956 阅读 · 0 评论 -
RUST 和 GO 如何管理它们的内存
因此,在 Rust 版本的 Read States 服务中,当用户的 Read State 从 LRU(最近最少使用)缓存中删除时,它会立即从内存中释放。换句话说,内存会一直挂起,直到垃圾收集器可以评估它是否真正不再使用,而不是在不再需要时立即释放。由于没有运行时或垃圾收集器,Rust 的速度快得惊人,而且内存效率高。运行时内存问题实际上很难出现,因为它在构建时强制执行内存限制。相反,垃圾收集器会经常运行以发现任何没有引用的内存并释放它。它可以感知应用程序何时使用内存,并在不再需要时立即释放内存。原创 2024-05-26 08:31:12 · 536 阅读 · 0 评论 -
文盘Rust -- Mutex解决并发写文件乱序问题
在实际开发过程中,我们可能会遇到并发写文件的场景,如果处理不当很可能出现文件内容乱序问题。下面我们通过一个示例程序描述这一过程并给出解决该问题的方法。这次我们用到了tokio::sync::Mutex,write_line_mutex函数在每次执行写任务以前先获取文件互斥锁。代码不复杂,tokio 实现一个并发runtime,写文件函数是直接写时间戳,为了方便展示乱序所以写入两次换行。很明显,写入并未达到预期,间隔并不平均,函数内部的执行步骤是乱序的。写入的格式正确,保证每次函数写函数完整执行。原创 2024-05-19 14:34:35 · 335 阅读 · 0 评论 -
用 Rust 生成 Ant-Design Table Columns
Table Columns的类型使用&format!main.rs然后我们在main.rs中分别调用上面这两个方法即可write!write!对于columns和types分别生成两个文件,columns.ts和types.ts。原创 2024-05-19 14:22:46 · 925 阅读 · 0 评论 -
Linux/Ubuntu下使用VS Code配置C/C++项目环境调用OpenCV
OpenCV是大型的Third party 计算机视觉库,在开发中会经常用到,本篇记录一下 在Ubuntu系统上安装和配置OpenCV,并使用C/C++调用OpenCV。前面进行cmake时,已经生成了opencv4.pc配置文件,该文件的安装路径为:/usr/local/lib/pkgconfig/opencv4.pc。我们需要将OpenCV的libs的安装目录添加到动态库加载配置文件中,这样在编译时,才能找到OpenCV的各种库文件,下面创建opencv4.conf。原创 2024-05-12 11:30:52 · 4421 阅读 · 0 评论 -
Rust 使用egui创建一个简单的下载器demo
这个demo的效果就是通过主窗口的按钮, 呼出子窗口的输入框, 点击下载按钮后就可以下载文件, 因为只是demo, 下载功能不详细, 只是用reqwest请求下载了而已.// 获取文件夹路径选择器的路径, 因为不打算太精细, 就直接生成了当前时间戳的文件名, 连文件后缀都不给.// 这里是创建了一个面板, 并且面板里有一个下载的按钮, 当点击按钮后, 会展示一个子窗口。// 在这里开始执行下载文件的逻辑, 因为所有权问题, 因此我直接clone了这个结构。// 写入文件, 下载文件逻辑完成。原创 2024-05-09 07:39:35 · 1034 阅读 · 1 评论 -
Rust 自动化测试、迭代器与闭包、智能指针、无畏并发
它是的缩写,利用两个参数构造一个新的列表.最后一项值包含了Nil值,标识结束Nil,fn main(){Cons可能会无限嵌套下去,为了保证 rust 编译时计算需要的大小,只能通过Box来帮助 rust 计算出List需要的大小。Deref。原创 2024-05-09 07:07:09 · 1017 阅读 · 0 评论 -
Rust的FFI 浅尝
rust FFI 是rust与其他语言互调的桥梁,通过FFI rust 可以有效继承 C 语言的历史资产。本期通过几个例子来聊聊rust与C 语言交互的具体步骤。原创 2024-05-05 15:25:04 · 1092 阅读 · 0 评论 -
Rust 集合、错误处理、泛型、Trait、生命周期、包
什么是 trait,在之前的描述已多次出现。它定义了某个特定类型拥有可能与其他类型相同的功能。可以通过trait以一种抽象的方式定义共享的行为。可以使用指定泛型是任何拥有特定行为的类型。类比接口行为。抽象定义属性、方法,然后其他的实例创建实现接口中的方法。通过trait定义一个抽象方法。声明一个Logtait,包含了一个方法 log。它用来记录实例创建产生行为后日志记录。每个声明的集合数据都必须实现这个方法。原创 2024-05-05 15:17:04 · 364 阅读 · 0 评论 -
Rust中的函数指针
通过函数指针允许我们使用函数作为另一个函数的参数。函数的类型是 fn (使用小写的 ”f” )以免与 Fn 闭包 trait 相混淆。fn 被称为 函数指针(function pointer)。指定参数为函数指针的语法类似于闭包。函数指针类型(使用关键字fn写出)指向那些在编译时不必知道函数标识符的函数。它们也可以由函数项类型或非捕获(non-capturing)闭包经过一次自动强转(coercion)来创建x + 1println!复制代码这会打印出 The answer is: 12。原创 2024-04-26 16:22:01 · 763 阅读 · 0 评论 -
基于Rust的多线程 Web 服务器
最终版 main.rs 文件。hello.html 文件。最终版 lib.rs 文件。404.html 文件。main.rs 文件。lib.rs 修改一。lib.rs 修改二。原创 2024-04-26 15:24:13 · 321 阅读 · 0 评论 -
Rust 使用结构体组织相关联的数据
和元组一样,结构体的每一部分可以是不同类型。但不同于元组,结构体需要命名各部分数据以便能清楚的表明其值的意义。由于有了这些名字,结构体比元组更灵活:不需要依赖顺序来指定或访问实例中的值。定义结构体的语法如下。注意:在大括号中定义的名字和类型称为字段(field)。结构体实例的创建和可变赋值如下://创建一个结构体的实例//如果结构体的实例是可变的可以使用点号并为对应的字段赋值注意:整个实例必须是可变的,Rust 并不允许只将某个字段标记为可变。同其他任何表达式一样,原创 2024-04-22 17:19:08 · 893 阅读 · 1 评论 -
Rust 认识所有权
常见的编程语言管理其运行时使用计算机内存的方式一般是垃圾回收机制、程序员亲自分配和释放内存。Rust 则选择了第三种方式:通过所有权系统管理内存,编译器在编译时会根据一系列的规则进行检查。如果违反了任何这些规则,程序都不能编译。原创 2024-04-22 17:12:48 · 1234 阅读 · 0 评论 -
rust中的超时处理
测试中发现用rtu的方式下,如果slave没有发回数据,程序将陷入无限等待中。也没找到如何设置这个超时。自从 tokio 1.0发布以来,rust的异步开发总算大势已定。尽管没达到标准库的速度,依然挡不住大家的热情。背景:之前用go开发一个边缘网关的小东东,业余时间做了一大半。后来学了rust,打算练手,用rust重新写。在tokio-modbus的github上,找到有人提到这个问题。自己动手, 用golang和tokio中都有的 select 很好的解决问题。既生瑜何生亮,感觉go就是小号的rust。原创 2023-12-26 07:26:58 · 1547 阅读 · 0 评论 -
文盘Rust -- 本地库引发的依赖冲突
仔细看了一下两个库的源码,引用 clickhouse-rs-cityhash-sys 库的方式是不一样的。翻翻 clickhouse-rs/clickhouse-rs-cityhash-sys/Cargo.toml,里面的一个配置很可疑。links 指定了本地包被链接的名字,在这里引起了冲突,改掉本地包中的名字自然解决了冲突,在依赖图中保证唯一性很重要。clickhouse-rs-cityhash-sys 的源码直接放在 clickhouse-rs 工程目录下面。本文涉及代码github。原创 2023-12-21 08:04:08 · 1303 阅读 · 0 评论 -
rsut基础:模块的使用一、mod 关键字、mod.rs 文件的含义等
我们都知道通过 cargo 创建出的工程中就是程序的入口,但是还有更多的使用方式。rustc 命令 : rust编译器,就算没有cargo也可以生成程序,但是比较麻烦,这些都让cargo来处理就好cargo 命令 : 项目管理工具下面就是一些问题了什么是 create?rustc 的编译入口文件,这个文件就被当做 crate 文件。crate 类型: 有多种,最常见的是bin和lib,其他类型参见rust参考手册-链接cargo 怎么定义工程项目中哪些是需要编译的 crate 的?原创 2023-12-20 11:16:13 · 1356 阅读 · 0 评论 -
内存安全探秘:变量的所有权、引用与借用
Rust 语言由 Mozilla 开发,最早发布于 2014 年 9 月,是一种高效、可靠的通用高级语言。其高效不仅限于开发效率,它的执行效率也是令人称赞的,是一种少有的兼顾开发效率和执行效率的语言。Rust语言具备如下特性:•高性能 - Rust 速度惊人且内存利用率极高。由于没有运行时和垃圾回收,它能够胜任对性能要求特别高的服务,可以在嵌入式设备上运行,还能轻松和其他语言集成。•可靠性 - Rust 丰富的类型系统和所有权模型保证了内存安全和线程安全,让您在编译期就能够消除各种各样的错误。原创 2023-12-20 11:03:16 · 1259 阅读 · 0 评论