提取码:45on
- 入坑rust 1.1 rust发展历程 2006年,Mozilla 员工 “Graydon Hoare” 开发了Rust。 2015年5月15日,Rust编程语言核心团队正式宣布发布Rust 1.0版本,之后连续4年,在Stack Overflow开发者「最受喜爱编程语言」评选中获得第一名。 2019年7月4日,社交网络巨头Facebook联合其他100个行业巨头,对外宣布准备建设Libra(天秤座)项目。该项目的技术特点是:构建于区块链技术之上,并且基于Rust实现。 2019年7月18日,微软安全响应中心(MSRC)发文宣称:我们需要更安全的系统编程语言。 在suricata5.0上,rust已经成为一个必选组件,被用来编写应用层解析代码。 需要基于suricata开发项目的我,不得不入坑rust了。
1.2 rust安装 rustup 是rust官方的版本管理工具。应当作为安装 Rust 的首选。 在linux/mac下,运行一条命令就行了:
1 但是由于众所周知的防火墙问题,我们需要配置一下中科大的源。
- Rust初印象 rust对标c/c++,是一个编译型系统级编程语言(可以用来编写操作系统的那种)。 Rust借用了C和C++的语法,它不允许空指针和悬挂指针,二者是C和C++中系统崩溃、内存泄露和不安全代码的根源。 Rust做到了内存安全而无需.NET和Java编程语言中实现自动垃圾收集器的开销,这是通过所有权/借用机制、生命周期、以及类型系统来达到的。 Rust 使用实现(implementation)、特征(trait)和结构化类型(structured type)而不是类(class)。这点,与基于继承的OO语言 C++, Java 有相当大的差异。 第一印象:
fn main() { println!("Hello, world!"); } 1 2 3 复杂一点的猜猜看游戏
use std::io; use std::cmp::Ordering; use rand::Rng;
fn main() { println!("Guess the number!");
let secret_number = rand::thread_rng().gen_range(1, 101);
loop {
println!("Please input your guess.");
let mut guess = String::new();
io::stdin().read_line(&mut guess)
.expect("Failed to read line");
let guess: u32 = match guess.trim().parse() {
Ok(num) => num,
Err(_) => continue,
};
println!("You guessed: {}", guess);
match guess.cmp(&secret_number) {
Ordering::Less => println!("Too small!"),
Ordering::Greater => println!("Too big!"),
Ordering::Equal => {
println!("You win!");
break;
}
}
}
}
对于熟悉c/c++的我,读起来还是挺通顺的。
- rust语言基础 3.1 变量和可变性 变量默认是不可改变的(immutable),当变量不可变时,一旦值被绑定一个名称上,你就不能改变这个值。
fn main() { let x = 5; println!("The value of x is: {}", x); x = 6; println!("The value of x is: {}", x); } 比如这样是不对的,rust编译就会出错。
我们可以在变量名之前加 mut 来使其可变。
fn main() { let mut x = 5; println!("The value of x is: {}", x); x = 6; println!("The value of x is: {}", x); }
变量还有一个“隐藏“的玩法,这样我们就可以像python那样,”改变“一个变量的类型了。(注意不是真正改变了变量类型,而是隐藏了之前的变量)
let spaces = " "; let spaces = spaces.len();