rust 继承、封装、多态
封装(encapsulation)rust 的封装是基于结构体,而不是对象,结构体就是 rust 的对象,这个和go一样。默认情况下,结构体只有字段。注意,结构体自身被标记为 pub,这样其他代码就可以使用这个结构体,但是在结构体内部的字段仍然是私有的!!!!可以通过实现结构体,来为结构体添加方法,也是和go一样的特性!!
123456789101112131415161718192021222324252627282930313233343536373839404142pub struct AveragedCollection { list: Vec<i32>, average: f64,}impl AveragedCollection { // 这个 self 是不是有熟悉的感觉,python 中大量使用 self pub fn add(&mut self, value: i32) { self.list.push(value); self.update_average( ...
使用IDEA开发rust提示file is not included in module tree
问题用了很长一段时间nvim写rust,还没有用IDEA这样的IDE来写rust。就准备用一下,一用发现,还不太会在IDEA上用rust。碰到的第一个问题就是 IDEA 提示:
file is not included in module tree, analysis is not available
fn main 也没有可以运行的按钮,但是命令行使用 cargo run 正常。这个说明应该是IDEA的配置的问题。
解决IDEA 用 rust 我也不熟,猜测应该是跟项目构建有关,就类似IDEA 使用 maven 的构建,也需要对应的设置一样。
右键一下 Cargo.toml看一下,还真有一个Attach Cargo Project这一项,然后只要把项目添加到 IDEA 中就可以:
右键--> Cargo.toml-->Attach Cargo Project
之后运行就正常了,记录一下,虽然是个小问题,但是可能也会帮助到同样出现这个问题的小伙伴。
rust-生命周期
前言先说大白话,rust 的生命周期标注,是为了明确多个变量的生命周期是否一致,仅此而已,因为如果rust不知道多个变量的生命周期是否一致,它无法确的知道这个变量是否已经被释放。这个下面再细说,先说有什么用。
rust当中,的两个重要概念:借用和生命周期分别代是在:
栈变量,需要关注【所有权】
引用(指针),需要关注【生命周期】
Rust 的每个引用都有自己的生命周期,生命周期指的是引用保持有效的作用域。大多数情况下,引用是隐式的、可以被推断出来的,但当引用可能以不同的方式互相关联时,则需要手动标注生命周期。这里重点就是以不同的方式互相关联时。
大多数情况下,rust 可以自己推断出引用的生拿周期,也就是只有在一些rust无法自行推断的情况下,才需要手动标注生命周期。
生命周期Rust 中的每一个引用都有其生命周期(lifetime),也就是引用保持有效的作用域。大部分时候生命周期是隐含并可以推断的,正如大部分时候类型也是可以推断的一样。类似于当因为有多种可能类型的时候必须注明类型,也会出现引用的生命周期以一些不同方式相关联的情况,所以 Rust 需要我们使用泛型生命周期参数来注明 ...
rust-vim 整合基于vimspector的debug调试环境
前言前面配置好rust开发环境后,还需要一个调试功能就能用了。不清楚的可以回看我的rust-vim安装记录调试器,找了几款,最后还是觉得还是使用vimspector这个用的习惯,捣鼓两个整合了一下基于vimspector的调试环境,快捷键不用重新再配置。
效果图:
这几天换了mac M2,把功能都迁移过来,完可用,这图就是M2上载图的。另外补全相关的配置,需要coc的一些额外配置。vim CocConfig参数设置说明
流程
安装vimspector插件: puremourning/vimspector
添加配置文件:
lldb-vscode.json
.vimspector.json
安装vimspector插件添加插件,然后执行PlugInstall,路径:
~/.config/nvim/init.vim
--enable-rust 表示要启用的语言支持,可以从官网查看支持的语言。
1Plug 'puremourning/vimspector', {'do': './install_gadget.py --en ...
rust-泛型generics
泛型(generics)rust 也有泛型,这种最早出现1970年代的Ada语言中,后来被许多基于对象和面向对象的语言所采用,包括BETA、 C++、java。rust 也借鉴了这一特性。这种特性让程序有更好的通用性。
1.简单示例-结构体泛型给结构体 Point 定义一个泛型 T
123456789struct Point<T> { x: T, y: T,}fn main() { let integer = Point { x: 5, y: 10 }; let float = Point { x: 1.0, y: 4.0 };}
不同类型泛型
12345678910struct Point<T, U> { x: T, y: U,}fn main() { let both_integer = Point { x: 5, y: 10 }; let both_float = Point & ...
rust-所有权
所有权所有权(系统)是 Rust 最为与众不同的特性。它让 Rust 无需垃圾回收(garbage collector)即可保障内存安全。所有权以及相关功能:借用(borrowing)、slice 以及 Rust 如何在内存中布局数据。
所有程序都必须管理其运行时使用计算机内存的方式。一些语言中具有垃圾回收机制,如: java、python;在另一些语言中,程序员必须亲自分配和释放内存,如:C/C++;
Rust 则选择了第三种方式:通过所有权系统管理内存,编译器在编译时会根据一系列的规则进行检查。
内存与分配Rust 的所有权围绕着内存分配进行,Rust 对内存管理通过其所有权展开。
栈它是一种 后进先出 的机制,类似我们日常的落盘子,只能一个一个向上方,然后从最上面拿一个盘子。一个变量要放到栈上,那么它的大小在编译时就要明确。i32 类型的变量,它就占用 4 个字节。Rust 中可以放到栈上的数据类型,他们的大小都是固定的。如果是字符串,在运行时才会赋值的变量,在编译期的时候大小是未知或不确定的。所以字符串类型存储在堆上。
堆用于编译时大小未知或不确定的,只有运行时才能确定的数据。 ...
rust-vim整合基于rust-analyzer
前言在vim上配置并使用rust的vim开发环境,我个人比较习惯coc.vim这个平台的一系列插件,所以整个就接着在coc.vim上构建rust-vim,谁叫这东西确实牛逼。依赖插件:
coc.vim
coc-rls
coc-rust-analyzer
rust官方有提供一个vim的插件,但是功能比较简单,本节要说插件,并不是官方提供的vim插件,而是比官方提供插件功能还要强一些。而coc-rust-analyzer这个插件的是基于rust-analyzer这个插件,coc.vim将期进行vim化,记其可以工作在vim下,这个和vim-go插件的做法是一样的。
安装 coc-rls需要提前安装好rustup,这个工具其实在装rust的时候就已经安装好了。
12345# 安装依赖组件rustup component add rls rust-analysis rust-src# 安装 coc-rls:CocInstall coc-rls
安装coc-rust-analyzer1:CocInstall coc-rust-analyzer
初次打开,会有这样的提示,安装一下:
配 ...
rust-rustup介绍
rustup 工具链管理这个可能很少人在意,一般只有在安装rust的时候通过脚本安装了rustup,但是后面很少会用到。这几天在折腾rust-vim的时候,发现还是会用到,记录一下。这个工具不止是安装、御载,还是一个工具链管理工具。
有几个作用:
安装rust
卸载rust
升级rust
安装工具链,就是rust相关的工具链
官方说明
Rust 由工具 rustup 安装和管理。Rust 有着以 6 星期为周期的 快速版本迭代机制,支持 大量平台,因而不同时期存在大量不同的 Rust 构建版本。 rustup 用于管理不同平台下的 Rust 构建版本并使其互相兼容, 支持安装由 Beta 和 Nightly 频道发布的版本,并支持其他用于交叉编译的编译版本。如果您曾经安装过 rustup,可以执行 rustup update 来升级 Rust。
安装rust1curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
选1默认安装
再按照提示执行一下:
1source $HOME/.cargo ...