- 博客(218)
- 资源 (30)
- 问答 (1)
- 收藏
- 关注
原创 一款rust语言AI神器cursor在ubuntu环境下的安装启动教程
虽然cursor目前只支持英文但是它强大的代码联想能力以及问答能力,可以高效的提高编码效率。如下步骤所有的前提是你的ubuntu上面已经安装了rust以及其必须的extensions。
2024-09-11 11:35:41 782
原创 记录一次rust浮点数计算没有java速度快的例子
不同的电脑执行如下代码可能会有不同的结果。但是我在同一台机器上的结果,java会比rust快5倍。java代码的运行结果。
2024-09-11 10:46:39 494
原创 linux中使用rust语言在不同进程之间通信
第二种:使用shm,通过同一个key创建同一个共享映射内存空间。第一种:使用mmap映射相同文件。
2024-09-08 15:56:38 356
原创 rust内存分配,内存回收,内存泄露
从上面代码的执行,可以看出。栈空间的申请,是在对应函数执行的时候就会申请了。但是内存的回收确是在执行函数对应的线程销毁的时候。我们继续修改上面的代码:只修改两个函数。
2024-06-17 15:09:19 413
原创 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 609
原创 macOS下所有必须插件都已正常安装但还是无法运行rust程序
删除 ~/.vscode/extensions/vadimcn.vscode-lldb-1.10.0/lldb/bin/debugserver 文件。macOS 下vs code 已安装 ra 和 codelldb 的情况下 无法命中断点。
2023-12-15 18:56:58 144
原创 crate mio中waker的一个使用细节,仅记录当下结论。以便稍后继续研究。
其实整套代码的运行与mio的其他网络库是一样的。只是使用细节的地方做一些记录,否则程序不会按照自己的意愿正常执行。先看代码,然后再来讲。这里说重点:wake对象调用wake函数所在的线程,不可以在第一时间直接结束自己,否则唤醒的事件不会通知到,poll阻塞的线程。上面的结论,可以在代码注释中标有5555555的这一行注释,加以测试。
2023-12-12 06:47:13 124
原创 Rust Send与Sync。网上有很多理论方面的文章,现在从实践出发,来学习一下这两个trait。
简单讲一下,看不懂的网上其他文章都有的,有更详细的,easy的很。我只说通俗易懂的。
2023-12-02 11:08:19 455
原创 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 202
原创 linux 性能优化
被压测服务器需要保持100W长连接,客户和服务器端是通过socket通讯的,每个连接需要建立一个socket,程序需要保持100W长连接就需要单个程序能打开100W个文件句柄。
2023-10-11 07:43:33 193
原创 rust cfg的使用
当然了还要有综合用法。println!("abc");这个呃呃呃时候不但要设置Cargo.toml中的features还要设置编译前的环境变量。否则指定函数将无法被找到。
2023-10-10 10:11:17 479
原创 rust 字符串字面量 - 字符串前缀
如果字符串中同样包含#,那么可以增加限定开始结束字符串的#数量即可。只要开始和结束的#比字符串内的#多,即可。如下两种是同一个意思,只是说加了r的字符串属于《原始字符串》里边可以包含一些特殊的字符。增加了《原始字符串》标识符的字符串内部的转义全部都会被取消。如果字符串内包含双引号,rust增加了r#的方式。字节字符串 - ASCII字节字面值。#来限定字符串的开始和结束。
2023-09-17 07:18:56 370
原创 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 533
原创 rust交叉编译 在mac下编译linux和windows
到目标机器执行的时候,出现问题。可以尝试更换传输方式。打比方之前使用的ftp,现在你可以先压缩文件然后再尝试传输文件。linux通常就是musl和gnu。我用的测试系统是ubuntu,所以是gnu。如果已经安装这里会显示(installed)。如下配置添加到Cargo.toml。
2023-08-26 10:05:48 858
原创 rust reborrow - 重借用
第一:对于不可变借用&T,它的传递属于Copy语意。对于可变借用&mut T它的传递属于Move语意或reborrow。第二:可变引用在同一个时刻只能拥有一个,但是有一个重借用(reborrow)的方式,可以让借用重新获得可变引用。下面为reborrow的三种方式。
2023-07-27 10:06:57 842
原创 Rust pin unpin理解 为什么说没有pin的数据移动是不安全的深入理解
看了网上一片文章,有了一些理解。想要理解pin与unpin主要要理解数据再移动的时候的不安全。就知道了pin的重要性。
2023-06-08 07:28:31 237
原创 rust 中 std::thread::panicking() 的用法
主要用于实现了Drop类型的实现函数中。主要的目的是在当前线程由于panic以后,可以继续执行一些其他弥补的指令。看过上面的代码和输出以后,现在得出结论。通过一个例子来做一个测试。
2023-04-10 05:35:46 110
原创 Rust 多线程交互 自实现线程池,几种实现方式可行性对比,性能对比以及底层实现原理分析 CPU密集型
再加上刚才的测试数据不难分析出,当执行线程数量等于当前CPU数量的时候消耗较小这个时候Condvar的交互方式比mpsc的交互方式多出来的就是syscall的系统调用开销,毕竟用户态和内核态的交互消耗很大,这个地球人都知道。第三:由于执行线程个数的增加,执行的线程数量逐渐会比当前系统CPU数量多,增加了CPU彼此之间的上下文切换的消耗,线程比当前系统的CPU核心数月多上下文切换的耗时越大。我们还需要在整个线程池的的执行过程中,注入一个测试对象当线程池执行完所有需要的任务的时候,需要一个打印性能测试的结果。
2023-03-02 10:55:52 628
原创 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 449
原创 rust过程宏 proc-macro-workshop解题-2-debug
接下来我们来实现第大关卡debug过程宏的实现。这里主要考的也是派生宏的实现。我们这里不像第一个关卡了,我把每一个关卡实现的代码都粘贴出来,到最后就是完整的代码。
2023-02-16 10:34:18 371
原创 rust过程宏 proc-macro-workshop解题-1.1-builder 派生宏 自动生成结构体验证方法
本题目不是proc-macro-workshop提供的builder/9道题中的其中任何一道题。本题是我在网上搜索派生宏的时候,无意中查询到的,没有看到派生宏代码,就粘贴下来当作是一道题,自己实现了。这道题实际上就是为了一个struct结构体成员变量格式自动生成一个校验函数。通过惰性属性,分别为每一个成员变量生成对应不同的校验过程罢了。
2023-02-14 14:31:20 153
原创 rust过程宏 proc-macro-workshop解题-1-builder
我就直接粘贴我的答案了。答案都是联通的,可以跑通builder 1-9关的测试用例。builder这个目录的所有test主要测试的是派生宏的编写能力。
2023-02-14 11:54:49 113
原创 rust过程宏 proc-macro-workshop解题-0-介绍
proc-macro-workshop是一个学习rust过程宏非常好的工程。里边包含五大类题目。并且每种题目都有实际价值,可以应用在企业级项目中。我们在这里先介绍一下这个项目如何运行如何测试,如何验证过程宏的正确性以及如何调试。本文只围绕以下几个话题:第一:工程结构?第二:如何运行测试?第三:如何调试自己开发的过程宏?首先到网站下载这个工程。这里面的目录bitfield,builder,debug,seq,sorted。就是这个工程的五个题目了。
2023-02-13 07:40:56 462
原创 rust模式匹配的深度玩法
如果我现在想要直接拿到o这个变量内部深层次的Ses::man这个枚举类型中Man这个结构体的name成员变量的话。因为枚举的可能性比较多,需要多次匹配才可以拿到,当对象必须是人类,而且必须为男人的时候。第二:起始这里的模式匹配结构的写法与Object这个对象创建的时候的书写结构是一样的,少一层都不行。大家可以对比一下上面我们初始化这个结构体的时候的写法。打比方我有一个组合层次比较深的结构体,我想要拿到最底层的结构体成员变量的数据。这里不讲match,if let,while let,或者元组的匹配。
2023-02-12 07:53:10 120
原创 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 408
原创 第一个rust程序,命令方-cargo-vscode
使用 cargo new 创建项目使用 cargo build 构建项目使用 cargo run 一步构建并运行项目使用 cargo check 在不生成二进制文件的情况下检查项目是否可编译使用 cargo build --release 构建项目发行版本使用 cargo run --release 运行发行版本,可测试发布版本的运行时间。
2023-02-01 10:16:32 375
原创 rust环境 在线安装-离线安装
执行如下命令会有命令行提示符让你选择,这个时候直接回车即可。安装完成以后需要让你在~/.cargo目录执行source命令,让rust环境生效。或者在任意目录执行如下命令。
2023-02-01 10:11:10 1669
原创 JDK21协程-虚线程 openjdk源码解读 底层从Java代码到C/C++代码初次深度解读 虚线程调优
自从2022-12-08开始,下一个LTS版本JDK21已经进入了开发阶段。小编在此进行了一次主线版本的协程的初体验。说是协程,其实在JVM内部是以**虚线程**的概念存在的。小编这次从java代码到C/C++代码初次深度解读一下**虚线程**,毕竟JDK21已经进入了开发阶段,等到JDK21LTS版本发布的时候,变动应该不会很大,到时候我会再出一片文章来深度解读一下**虚线程**。
2023-01-11 11:29:48 2677
原创 Linux系统x86-64架构下,从零实现一个系统调用。Ubuntu22.04LTS
这里要注意,这里既然是系统调用,会涉及到内核太和用户太的切换,并且用户空间和内核空间的切换。传入的数据类型为用户空间的数据类型,所以要加上__user。首先要会编译linux内核的源码,这块在我的另外一片文章里面。
2022-12-19 17:16:34 585
webBTraceUtil_for_JDK1.8
2019-05-04
webBTraceUtil_for_JDK11
2019-05-04
html入门手册(必备)
2008-10-23
linux平台,调用函数pthread_attr_getstack,报错。
2022-11-05
linux 系统内无法捕获SIGSEGV信号
2022-10-30
c线程的guard问题
2022-10-22
c++ pthread_attr_setstacksize函数问题
2022-09-14
c++ 强转问题,不报错,也不继续执行
2022-09-09
C++ return (void*)(this+1)到底什么意思?
2022-09-01
Android5.0 编译出错,哪位大神帮帮我
2015-01-30
TA创建的收藏夹 TA关注的收藏夹
TA关注的人