vscode开发rust初体验
背景
Rust 是 Mozilla 基金会的一个雄心勃勃的项目,号称是 C 语言和 C++ 的继任者。一直以来,C/C++ 中的一些基本问题都没能得到解决,比如分段错误、手动内存管理、内存泄漏风险和不可预测的编译器行为。Rust 的诞生就是为了解决这些问题,并提高安全性和性能。
Rust 支持主要的编程范式:面向对象编程、并发编程、函数式编程和过程编程。它提供了足够的内存管理能力,同时又足够安全,让它成为操作系统和关键应用程序的开发工具。它的主要缺点是硬件厂商对它支持不够,厂商更喜欢使用 C/C++。
rust下的hello world.
命令行初体验
安装
由于visual studio build tools太大了,需要3G+的空间。于是这里选择了msys2编译工具链。
安装msys2
在 https://www.msys2.org/ 下载 msys2-x86_64-20210419。
一路next进行安装。
更新基础软件包
pacman -Syu
更新其它软件包
pacman -Su
安装gcc工具链
pacman -S msys/gcc
需要320MB.
安装git
pacman -S git
安装vs c++环境(跳过)
https://visualstudio.microsoft.com/zh-hans/visual-cpp-build-tools/
下载运行 vs_buildtools__833716753.1620231056
判断安装成功
**********************************************************************
** Visual Studio 2019 Developer Command Prompt v16.9.4
** Copyright (c) 2021 Microsoft Corporation
**********************************************************************
C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools>
下载RUSTUP-INIT.EXE
运行 rustup-init
,
选择yes
,
选择 2
,改为
x86_64-pc-windows-gnu
再选择 1) Proceed with installation (default)
,
判断安装成功
λ rustc -V
rustc 1.52.0 (88f19c6da 2021-05-03)
λ cargo -V
cargo 1.52.0 (69767412a 2021-04-21)
其中rustc是rust编译器,cargo是rust的构建系统和包管理器。
编写hello world
新建helloworld.rs
内容如下:
fn main() {
println!("Hello, world!");
}
编译
λ rustc.exe helloworld.rs
λ ls
helloworld.exe* helloworld.rs
λ .\helloworld.exe
Hello, world!
使用cargo编译
新建文件 Cargo.toml
,内容如下:
[package]
name="helloworld"
version="1.0.0"
新建文件 src\main.rs
,这个文件为cargo寻找的入口文件,内容如下:
fn main() {
println!("Hello, world!");
}
打包
cargo build
运行
.\target\debug\helloworld.exe
Hello, world!
配置cargo源地址
创建文件:~/.cargo/config
,内容如下:
[source.crates-io]
registry = "https://github.com/rust-lang/crates.io-index"
replace-with = 'ustc'
[source.ustc]
registry = "git://mirrors.ustc.edu.cn/crates.io-index"
# 如果所处的环境中不允许使用 git 协议,可以把上面的地址改为
# registry = "https://mirrors.ustc.edu.cn/crates.io-index"
如果遇到提示Blocking waiting for file lock on package cache
,则删除文件
~/.cargo/.package-cache
VSCODE初体验
安装插件
Rustrust-lang.rust预览版
运行
目前只找到比较原始的方法,即新建一个终端,然后运行cargo build
。
httpget示例
代码 `src/main.rs',内容如下:
extern crate reqwest;
use std::collections::HashMap;
fn main() {
println!("Hello, world!");
run();
}
fn run() -> Result<(), Box<dyn std::error::Error>> {
let resp =
reqwest::blocking::get("https://httpbin.org/ip")?.json::<HashMap<String, String>>()?;
println!("{:#?}", resp);
Ok(())
}
Cargo.toml如下:
[package]
name="helloworld"
version="1.0.0"
[dependencies]
reqwest = { version = "0.10", features = ["blocking", "json"] }
tokio = { version = "0.2", features = ["full"] }
结果
λ target\debug\helloworld.exe
Hello, world!
{
"origin": "111.202.xx.xx",
}