rust
文章平均质量分 54
一个java转rust工程师的学习历程。此专栏为长期专栏,永远不会停止更新。
优惠券已抵扣
余额抵扣
还需支付
¥15.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
乌拉乌拉liang
让简单的事情变的容易,让困难的事情变的可行!
展开
-
rust内存分配,内存回收,内存泄露
从上面代码的执行,可以看出。栈空间的申请,是在对应函数执行的时候就会申请了。但是内存的回收确是在执行函数对应的线程销毁的时候。我们继续修改上面的代码:只修改两个函数。原创 2024-06-17 15:09:19 · 306 阅读 · 0 评论 -
rust原生语言对比 <在rust内> 执行javascirpt与lua解释型语言的性能
对于javascript我使用的是js-sandbox库。我测试当前js-sandbox的release版本是0.1.6不知道为什么无法在mac下正常运行,只能以path的方式指向js-sandbox的源码了。大家可以看到,实际上mac平台的cpu性能比ubuntu的还要好。但是js的v8引擎还不如rlua的解释器。在linux平台上的对比分别是2700倍和70倍的执行效率。在mac平台上的对比分别是4000倍和130倍的执行效率。对于lua我使用的是rlua库,版本号为0.19.8。原创 2024-02-04 08:03:52 · 583 阅读 · 0 评论 -
rust中执行lua代码
【代码】rust中执行lua代码。原创 2024-02-02 07:31:24 · 99 阅读 · 0 评论 -
macOS下所有必须插件都已正常安装但还是无法运行rust程序
删除 ~/.vscode/extensions/vadimcn.vscode-lldb-1.10.0/lldb/bin/debugserver 文件。macOS 下vs code 已安装 ra 和 codelldb 的情况下 无法命中断点。原创 2023-12-15 18:56:58 · 100 阅读 · 0 评论 -
crate mio中waker的一个使用细节,仅记录当下结论。以便稍后继续研究。
其实整套代码的运行与mio的其他网络库是一样的。只是使用细节的地方做一些记录,否则程序不会按照自己的意愿正常执行。先看代码,然后再来讲。这里说重点:wake对象调用wake函数所在的线程,不可以在第一时间直接结束自己,否则唤醒的事件不会通知到,poll阻塞的线程。上面的结论,可以在代码注释中标有5555555的这一行注释,加以测试。原创 2023-12-12 06:47:13 · 91 阅读 · 0 评论 -
Rust Send与Sync。网上有很多理论方面的文章,现在从实践出发,来学习一下这两个trait。
简单讲一下,看不懂的网上其他文章都有的,有更详细的,easy的很。我只说通俗易懂的。原创 2023-12-02 11:08:19 · 401 阅读 · 0 评论 -
extra arguments to `rustc` can only be passed to one target。使用cargo expand命令的时候出现问题。两种解决方案。
但是大家在平时正常开发的是否,大部分情况下src目录下是需要包含lib.rs文件的。第一在toml文件中指定一个新的main.rs文件的位值以及编译后可执行文件的名字。这里的xxxx就是你指定的新的可执行文件的名字。最后直接运行cargo expand就可以打印展开的宏了。使用cargo expand命令的前提条件,第一就是需要在nightly下。至此,其实我们的第二种解决方案,也是应了刚才的错误提示了,我们指定了bin。大家注意我的目录结构中是包含src目录的,这个问题我一会再说。原创 2023-10-31 11:46:06 · 169 阅读 · 0 评论 -
linux 性能优化
被压测服务器需要保持100W长连接,客户和服务器端是通过socket通讯的,每个连接需要建立一个socket,程序需要保持100W长连接就需要单个程序能打开100W个文件句柄。原创 2023-10-11 07:43:33 · 159 阅读 · 0 评论 -
rust cfg的使用
当然了还要有综合用法。println!("abc");这个呃呃呃时候不但要设置Cargo.toml中的features还要设置编译前的环境变量。否则指定函数将无法被找到。原创 2023-10-10 10:11:17 · 442 阅读 · 0 评论 -
rust 字符串字面量 - 字符串前缀
如果字符串中同样包含#,那么可以增加限定开始结束字符串的#数量即可。只要开始和结束的#比字符串内的#多,即可。如下两种是同一个意思,只是说加了r的字符串属于《原始字符串》里边可以包含一些特殊的字符。增加了《原始字符串》标识符的字符串内部的转义全部都会被取消。如果字符串内包含双引号,rust增加了r#的方式。字节字符串 - ASCII字节字面值。#来限定字符串的开始和结束。原创 2023-09-17 07:18:56 · 327 阅读 · 0 评论 -
unknown feature `proc_macro_span_shrink`//could not compile xxx lib问题解决,此解决方案不管是在哪一个系统都可以解决此问题。
问题解决:直接打开cargo.lock,找到package的name等于这个上边错误描述中could not compile xxx lib这个错误描述中的xxx。问题分析:由于项目是一个很久才没有编译国的项目,之前编译是成功的,但是这次却失败了。这个文件描述的是上一次成功编译的环境状态,依赖,版本。它包含了上次成功编译的信息。一个在本地很久没有编译过的项目,或者说从网上下载下来了一个开源的项目,只要开始编译就会报unknown feture的错误,或者could not compile xxx lib。原创 2023-09-14 06:46:21 · 470 阅读 · 0 评论 -
rust中使用sqlite 之 rusqlite使用
【代码】rust中使用sqlite 之 rusqlite使用。原创 2023-09-01 06:20:02 · 1262 阅读 · 0 评论 -
rust交叉编译 在mac下编译linux和windows
到目标机器执行的时候,出现问题。可以尝试更换传输方式。打比方之前使用的ftp,现在你可以先压缩文件然后再尝试传输文件。linux通常就是musl和gnu。我用的测试系统是ubuntu,所以是gnu。如果已经安装这里会显示(installed)。如下配置添加到Cargo.toml。原创 2023-08-26 10:05:48 · 717 阅读 · 0 评论 -
P2P 网络,PING程序。
没有废话,直接上版本号和代码,以及讲解。原创 2023-08-11 07:14:40 · 1416 阅读 · 0 评论 -
rust reborrow - 重借用
第一:对于不可变借用&T,它的传递属于Copy语意。对于可变借用&mut T它的传递属于Move语意或reborrow。第二:可变引用在同一个时刻只能拥有一个,但是有一个重借用(reborrow)的方式,可以让借用重新获得可变引用。下面为reborrow的三种方式。原创 2023-07-27 10:06:57 · 798 阅读 · 0 评论 -
Rust pin unpin理解 为什么说没有pin的数据移动是不安全的深入理解
看了网上一片文章,有了一些理解。想要理解pin与unpin主要要理解数据再移动的时候的不安全。就知道了pin的重要性。原创 2023-06-08 07:28:31 · 177 阅读 · 0 评论 -
自我实现一个简单的LinkedList
记录一个自我实现的简单的LinkedList,双向链表。原创 2023-04-23 09:09:27 · 82 阅读 · 1 评论 -
rust 中 std::thread::panicking() 的用法
主要用于实现了Drop类型的实现函数中。主要的目的是在当前线程由于panic以后,可以继续执行一些其他弥补的指令。看过上面的代码和输出以后,现在得出结论。通过一个例子来做一个测试。原创 2023-04-10 05:35:46 · 87 阅读 · 0 评论 -
Rust 多线程交互 自实现线程池,几种实现方式可行性对比,性能对比以及底层实现原理分析 CPU密集型
再加上刚才的测试数据不难分析出,当执行线程数量等于当前CPU数量的时候消耗较小这个时候Condvar的交互方式比mpsc的交互方式多出来的就是syscall的系统调用开销,毕竟用户态和内核态的交互消耗很大,这个地球人都知道。第三:由于执行线程个数的增加,执行的线程数量逐渐会比当前系统CPU数量多,增加了CPU彼此之间的上下文切换的消耗,线程比当前系统的CPU核心数月多上下文切换的耗时越大。我们还需要在整个线程池的的执行过程中,注入一个测试对象当线程池执行完所有需要的任务的时候,需要一个打印性能测试的结果。原创 2023-03-02 10:55:52 · 595 阅读 · 0 评论 -
Rust 智能指针 Box,Rc,Cell,Rc-Weak,RefCell,OnceCell,LazyCell,Arc,Arc-Weak,Mutex,RwLock
最简单的智能指针,rust的大部分标准库struct或标量类型是优先采用stack分配内存的。在大部分语言中,stack大小是在编译期确定的,二heap大小是在运行期确定的。rust中可以使用Box把任意类型放到heap中存储。这种情况下会报编译错误。它让你增加mut去声明变量a。但是可以通过RefCell改变这种情况。原创 2023-02-24 06:48:45 · 361 阅读 · 0 评论 -
rust过程宏 proc-macro-workshop解题-4-sorted
这一大关卡介绍的是属性式过程宏。原创 2023-02-18 17:54:16 · 808 阅读 · 0 评论 -
rust过程宏 proc-macro-workshop解题-3-seq
seq这个大题类目处理的是函数式的过程宏。原创 2023-02-18 08:29:30 · 396 阅读 · 0 评论 -
rust过程宏 proc-macro-workshop解题-2-debug
接下来我们来实现第大关卡debug过程宏的实现。这里主要考的也是派生宏的实现。我们这里不像第一个关卡了,我把每一个关卡实现的代码都粘贴出来,到最后就是完整的代码。原创 2023-02-16 10:34:18 · 343 阅读 · 0 评论 -
rust过程宏 proc-macro-workshop解题-1.1-builder 派生宏 自动生成结构体验证方法
本题目不是proc-macro-workshop提供的builder/9道题中的其中任何一道题。本题是我在网上搜索派生宏的时候,无意中查询到的,没有看到派生宏代码,就粘贴下来当作是一道题,自己实现了。这道题实际上就是为了一个struct结构体成员变量格式自动生成一个校验函数。通过惰性属性,分别为每一个成员变量生成对应不同的校验过程罢了。原创 2023-02-14 14:31:20 · 128 阅读 · 0 评论 -
rust过程宏 proc-macro-workshop解题-1-builder
我就直接粘贴我的答案了。答案都是联通的,可以跑通builder 1-9关的测试用例。builder这个目录的所有test主要测试的是派生宏的编写能力。原创 2023-02-14 11:54:49 · 93 阅读 · 0 评论 -
rust过程宏 proc-macro-workshop解题-0-介绍
proc-macro-workshop是一个学习rust过程宏非常好的工程。里边包含五大类题目。并且每种题目都有实际价值,可以应用在企业级项目中。我们在这里先介绍一下这个项目如何运行如何测试,如何验证过程宏的正确性以及如何调试。本文只围绕以下几个话题:第一:工程结构?第二:如何运行测试?第三:如何调试自己开发的过程宏?首先到网站下载这个工程。这里面的目录bitfield,builder,debug,seq,sorted。就是这个工程的五个题目了。原创 2023-02-13 07:40:56 · 421 阅读 · 0 评论 -
rust模式匹配的深度玩法
如果我现在想要直接拿到o这个变量内部深层次的Ses::man这个枚举类型中Man这个结构体的name成员变量的话。因为枚举的可能性比较多,需要多次匹配才可以拿到,当对象必须是人类,而且必须为男人的时候。第二:起始这里的模式匹配结构的写法与Object这个对象创建的时候的书写结构是一样的,少一层都不行。大家可以对比一下上面我们初始化这个结构体的时候的写法。打比方我有一个组合层次比较深的结构体,我想要拿到最底层的结构体成员变量的数据。这里不讲match,if let,while let,或者元组的匹配。原创 2023-02-12 07:53:10 · 102 阅读 · 0 评论 -
rust 所有权 ownership 深度解读, & 与 &mut 与 mut = &mut 的区别
在rust中,每一个value都有一个var也就是变量(所有者),这时这个var对于这个value具有所有权。所有权可以:move。所有权可以:borrow。在rust中也类似c中一样,把值分别存储在stack中和heap中。在stack上的变量彼此的赋值属于值传递。当然了并不代表变量对于值不具备所有权。如果变量存储在heap中,普通的赋值语句则属于对于heap中value所有权的move。也就是移动。下面代码回报错。原创 2023-02-01 11:36:24 · 375 阅读 · 0 评论 -
第一个rust程序,命令方-cargo-vscode
使用 cargo new 创建项目使用 cargo build 构建项目使用 cargo run 一步构建并运行项目使用 cargo check 在不生成二进制文件的情况下检查项目是否可编译使用 cargo build --release 构建项目发行版本使用 cargo run --release 运行发行版本,可测试发布版本的运行时间。原创 2023-02-01 10:16:32 · 353 阅读 · 0 评论 -
rust环境 在线安装-离线安装
执行如下命令会有命令行提示符让你选择,这个时候直接回车即可。安装完成以后需要让你在~/.cargo目录执行source命令,让rust环境生效。或者在任意目录执行如下命令。原创 2023-02-01 10:11:10 · 1466 阅读 · 0 评论