学Rust, 进华为! 了解Rust 语言的println!的几种用法

学Rust, 进华为! 了解Rust 语言的println!的几种用法

首页角色扮演代号LN更新时间:2024-06-27

学Rust, 进华为!

最近Rust 的发展十分迅速。2021 年2月9日MozillaAmazon华为、谷歌、微软作为创始白金成员共同成立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