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或者将其添加到环境变量

1
2
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

cargo镜像

Rust官方提供了cargo包管理工具,管理仓库为:https://crates.io。当我们在编译需要依赖crates.io的项目时,可能会由于网络问题导致依赖库下载失败。可以在$HOME/.cargo/下建立一个config文件,加入如下配置:

1
2
3
4
5
[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替换成:

1
registry = "https://mirrors.ustc.edu.cn/crates.io-index"

Hello World

编程第一课必须是hello world程序,创建hello_world.rs写入以下代码:

1
2
3
4
fn main() {  
    let s = "hello world";
    println!("{}", s); 
}

然后编译运行:

1
2
3
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 开头自动插入一句话:

1
use std::prelude::\*

Format格式说明

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
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标准库内查看。

设计标准输出宏的原因:

  • 更好地错误检查,编译期内即可发现错误;
  • 函数只能在运行时发现字符串格式化错误;