学Rust, 进华为!
最近Rust 的发展十分迅速。2021 年2月9日,Mozilla、Amazon、华为、谷歌、微软作为创始白金成员共同成立Rust 基金会,这五家创始公司公开承诺,每年对Rust投资,不会少于 100 万美元,每年的预算不少于 100万美元,两年内每年投入100 万美元,用于开发、维护和推广 Rust 语言项目。
可见, 华为对于Rust 语言的支持,那绝不是像某些公司的研发费用一样随便说说, 这些可都是真金白银的支出!而且还是美元!
可能很多人对 Rust 基金会创始成员中出现华为感到惊讶,因为很多人,并没有太多地了解华为对于Rust 项目的支持, 事实上,华为有很多用 Rust 编写的产品,比如 StratoVirt:
据华为虚拟化高级工程师道一介绍:
StratoVirt是面向云数据中心的企业级虚拟化VMM解决方案。 它提供了支持虚拟机 (VM)、容器和Serverless三种场景的统一架构,在轻量低噪、软硬集成、Rust语言级安全等方面,具备关键技术优势
StratoVirt
StratoVirt 架构图:
有关StratoVirt更加详细的介绍,可以看这个视频:
华为在开发StratoVirt 时, 为什么选择Rust 呢? 据华为高级开发经理徐飞介绍, 华为分析QEMU 项目的bug 列表中分析得出, 一半以上的严重问题都是由于C 语言的内存问题导致的, 因此, 他们选择了专注于内存安全的Rust 语言。
而StratoVirt 也不负众望,在Rust 语言的助力下, 做到了强安全性和隔离性, 而这个特性,对于统一支撑虚拟机、容器和Servless三种场景的企业级虚拟平台而言,这无疑是最为看重的特性!
StratoVirt 项目的Git地址: https://gitee.com/openeuler/stratovirt
在华为内部,也有大量项目使用Rust 进行开发, 华为更是选定了Rust 作为华为可信计算的编程语言!
所以说, 如果想进入华为公司工作, 那么, 熟练掌握Rust 语言,无疑会增加自己的竞争力!
来看一则华为的招聘信息:
看看下面的华为的招聘,指名招聘Rust 工程师,要求为3年编程经验, Rust语言的要求为最少一年:
学Rust语言, 进华为工作!
今天来介绍Rust 语言中的数据输出宏println!, 值得注意的是, println!并非函数,而是一个宏定义。今天主要来熟悉println!输出时候的各种主要用法。
创建项目首先,创建一个新项目:
cargo new println_intro
随后在在code中打开这个项目:
$ cargo new println_intro
Created binary (application) `println_intro` package
learn_rust % cd println_intro
println_intro % code .
println! 讲解然后,我们在main.rs中输入下面代码:
fn main() {
let x = 1;
println!("x的值是{x}");
}
在第3行, 我们可以看出, 之前的大部分代码,都使用{x}的方式来打印变量的值。
今天,我们来学习一些println!新的方式。
使用{} 来打印变量首先来看代码:
fn main() {
let x = 1;
println!("x的值是{}",x);
}
在这里, 我们使用的大括号“{}”是空的, 在这种情况下, x的内容会被转换成String类型, 并在“{}”中打印。
需要注意的是, 当使用"{}"的方式打印变量时, 逗号“,”后面的变量和“{}”是一一对应的,可以跟多个变量,例如:
fn main() {
let x = 1;
println!("x的值是{},x 1的值是{}",x,x 1);
}
结果:
使用位置参数{0}除了使用空的"{}"外, println!还可以使用位置参数,通过"{0}"中的数字,指明位置参数, 来看代码:
fn main() {
let x = 1;
let y = 2;
let z = 3;
println!("x的值是{2},y的值是{1},z的值是{0}",z,y,x);
}
来查看结果:
使用命名参数来看代码:
//使用命名参数
println!("{a}{b}{c}",
a="我",b="爱",c="Rust语言");
执行结果:
指定显示宽带
可以使用width来指定显示宽度:
println!("打印数字1,注意数字1前面的空格{number:>width$}", number=1, width=6);
查看结果:
这里显示的文本是右对齐, 因为我们在代码中要求":>width$", 而且传入的width的长度是6, 所以在打印出来的结果中,1 前面就有5个空格:
打印的数字前补齐0在一些金融场景中,数字前面如果有空格,就需要用0来补齐,下面我们来看一下Rust中如何补齐:
println!("打印数字1,注意1前面的补齐{number:>0width$}", number=1, width=6);
在代码中, 我们用":>0width$"的方式,指明要补齐6位数字:
动态执行结果:
打印二进制格式最后,来看看使用“:b”打印二进制。
首先来看代码:
println!("只有{} 分之 {:b} 的人知道二进制, 其他的人都不知道。", 1, 2);
下面的结果可能会让很多人惊讶,因为2这个值并没有打印出来:
2在结果中,显示为“10”,假如我们把数字改成8, 则结果显示为“1000”:
因为":b"就是显示变量的二进制结果, 2的二进制表示为“10”,而8的二进制则是“1000”,如果改成10, 则显示结果就是“1010”, 这样大家就明白了吧。
本文介绍了Rust 语言的println!宏的格式化打印的几种情况。作为Rust 学习者和开发者, 了解格式化打印是非常重要的。
同时, 还展示了华为的一则招聘信息, 华为公开招聘Rust 程序员, 如果觉得英语水平过关的话,不妨前去应聘哦!
本文代码已经提交到Github, 地址:https://github.com/hintcnuie/learn_rust
Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved