Rust is a systems programming language that runs blazingly fast, prevents segfaults, and guarantees thread safety.
Rust是一门系统级编程语言,具有三个特点:
- 运行快
- 防止段错误
- 保证线程安全
C和C++是业界最流行的系统编程语言,Rust的定位与之类似,但是增加了安全性。
版本和发布策略
语义化版本号
Rust编译器的版本号采用了“语义化版本号”规划。版本格式为:主版本号.次版本号.修订号。
- 主版本号:当你做了不兼容的API修改
- 次版本号:当你做了向下兼容的功能性新增
- 修订号:当你做了向下兼容的问题修正
Rust一般以6个星期更新一个正式版本的速度进行迭代。
多渠道发布:
- nightly版本:每天自动创建的版本,新功能最多,问题也多,供用户试用;
- beta版本:每隔一段时间将nightly版本验证过的功能开放给用户,类似“预发布”版本;
- stable版本:正式版本,每隔6个星期发布一次,最稳定、最可靠,保证向前兼容;
rustup镜像
把一下代码复制到.bashrc
或者类似文件(.zshrc
等)然后执行source .bashrc
或者将其添加到环境变量
export RUSTUP\_DIST\_SERVER=https://mirrors.sjtug.sjtu.edu.cn/rust-static
export RUSTUP\_UPDATE\_ROOT=https://mirrors.sjtug.sjtu.edu.cn/rust-static/rustup
- 可选的其他地址:
- 上海交大:https://mirrors.sjtug.sjtu.edu.cn/#/
- 中科大:http://mirrors.ustc.edu.cn/help/rust-static.html
- rust.cc:https://rustforce.net/article?id=429df22d-a186-438a-8d83-6ab0b44beeb4
cargo镜像
Rust官方提供了cargo
包管理工具,管理仓库为:https://crates.io。当我们在编译需要依赖crates.io
的项目时,可能会由于网络问题导致依赖库下载失败。可以在$HOME/.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
替换成:
registry = "https://mirrors.ustc.edu.cn/crates.io-index"
Hello World
编程第一课必须是hello world
程序,创建hello_world.rs
写入以下代码:
fn main() {
let s = "hello world";
println!("{}", s);
}
然后编译运行:
rustc hello_world.rs
./hello_world
//输出:hello world
嗯,第一个Rust程序已经成功运行了。
简单分析下:
- Rust源代码文件使用
.rs
结尾; - 注释才用
//或者/* */
风格,当然也可以使用特有的文档注释///
,后面会说; - 函数开头必须使用
fn
关键字; -
main
函数为程序运行入口点; - 局部变量声明使用
let
关键字开头; - 语句以分号
;
结尾; -
println!
是一个宏,特征就是后面带一个!
感叹号;
Prelude
- Rust代码从逻辑上是分crate和mod管理的,crate管理项目,可以生成lib或可执行文件,在crate内部使用mod管理;
- Rust有一个极简标准库,叫作 std,除了极少数嵌入式系统无法使用标准库,绝大部分情况下,都需要使用标准库里的东西;
- 默认情况下,用户不需要导入标准库,编译器会自动引入,系统会在每个 crate 开头自动插入一句话:
use std::prelude::\*
Format格式说明
fn main() {
println!("{}", 1); //默认打印用法
println!("{:o}", 9); //八进制
println!("{:x}", 255); //十六进制,小写
println!("{:X}", 255); //十六进制,大写
println!("{:p}", &0); //指针println!("{:b}", 15); //二进制
println!("{:e}", 10000f32); //科学计数,小写
println!("{:E}", 10000f32); //科学计数,大写
println!("{:?}", "test"); //打印debug
println!("{:#?}", ("test1", "test2")); //带换行符和缩进的debug打印
println!("{a}, {b}, {b}", a="aa", b="bb"); //命名参数 }
除了println!
宏,Rust还提供了其他一些宏,比如format!, write!, writeln!
等,可以在std::fmt
标准库内查看。
设计标准输出宏的原因:
- 更好地错误检查,编译期内即可发现错误;
- 函数只能在运行时发现字符串格式化错误;