Rust笔记(一)
开端
Windows上的Rust有两个版本MSVC和GNU,这里涉及到Microsoft C++ Build Tools(对应于MSVC版本,官方推荐)安装c++环境,或者MSYS2(对应于GNU版本)安装c++环境。
其它安装的细节,以及在其它系统上的安装方式,请仔细阅读以上参考文档。
可以使用命令rustup doc
查看文档。
在neovim里配置Rust开发环境
- 安装
rust-analyzer
,这是Rust的LSP,需要对"neovim/nvim-lspconfig"进行配置。 - 安装"saecki/crates.nvim"插件,这个插件用来提供依赖信息的增强支持。
以上两者的配置如下plugins\lsp.lua所示:
1 | return { |
- 配置Rust调试,参考nvim-dap
具体配置如plugin\dap-rust.lua所示,需要修改codelldb.exe的路径:
1 | return { |
调试小技巧技巧
这些快捷键与我的配置有关。
- 不熟悉快捷键时可以pin一个快捷键截图。
- 善用
<C+方向键
调整窗口大小。 <leader>dK
可以查看光标位置的变量值。<leader>dr
可以打开REPL,能够输入表达式并查看结果。
Cargo
- cargo项目的主目录结构是有要求的
Cargo.toml
、src/
在项目顶层。- 源代码全都在
src/
目录下。 - 使用
cargo new <name>
命令创建新项目时,Cargo会自动创建Cargo.toml
和src/main.rs
文件。 - 也可以使用
cargo init <name>
命令在当前目录初始化Cargo项目。
cargo build
命令会编译当前目录下的Cargo项目。- 编译结果会放在
target/debug/
目录下。 - 同时会生成
cargo.lock
文件,记录依赖的版本信息。 - 如果需要编译成发布版本,编译器会对代码进行优化,编译时间更长,但执行更快,可以使用
cargo build --release
,结果会放在target/release/
目录下。j
- 编译结果会放在
cargo run
命令会编译并运行当前目录下的Cargo项目。- 但是如果项目没有修改,Cargo会跳过编译步骤,直接运行上次编译的结果。
cargo check
可以检查代码是否有错误,但不会生成可执行文件。- 它比
cargo build
快很多,这对于快速检查代码很有用,尤其是在开发过程中。
- 它比
[dependencies]
,rand = "0.9.1"
与rand = "^0.9.1"
等价。^
表示兼容版本,允许使用0.9.x
版本。~
表示兼容次版本,兼容范围可能与^
一致或小一点。=
表示精确版本,必须使用0.9.1
。
cargo update
命令会更新依赖到最新的兼容版本。- 它会修改
Cargo.lock
文件,但不会修改Cargo.toml
文件。
- 它会修改
发展
数据
变量与常量
变量分成可变变量和不可变变量,都需要使用let
声明。
- 可变变量需要额外加上
mut
。
常量使用const
声明,必须指定类型。
不可变变量与常量的区别
- 不可变变量可以在运行时计算值,常量必须在编译时确定。
- 不可变变量的特性:遮蔽,重新声明以覆盖。
1 | let x = 5; // 不可变变量 |
- 常量的特性:全作用域可见:
- 常量不管在何处声明都会作用域整个作用域,因为编译器会将常量名替换成值。
- 同一个作用域内不能有同名的常量,原因如上,会冲突。
- 内层作用域可以遮蔽外层作用域的常量,因为编译器会先在当前作用域匹配,找不到才会去外层作用域找。
1
2
3
4
5
6
7
8
9
10
11const VALUE: u32 = 100_000;
fn main() {
println!("The value is: {}", VALUE);
const VALUE: u32 = 200_000;
{
const VALUE: u32 = 300_000;
println!("The value is: {}", VALUE);
}
println!("The value is: {}", VALUE);
}
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Zone of Lix!
评论