Rust个人学习之hello world

rust 作为新晋热门语言,作为软件研发工作者不得不开启新一轮的学习与思考,今天就考虑拿一本书作为入门,快速进入rust的世界。

既然是接触的一门新的编程语言,自然绕不过向这个美好的世界打声招呼,今天这篇记录目标就是能够使用rust打声招呼。

我选择的开发环境是fedora 37(首次尝试termux),首先通过命令查看环境是否有rust

[root@localhost ~]# rustc --version
rustc 1.64.0 (Fedora 1.64.0-1.fc37)
[root@localhost ~]#

如果命令回显中包含了上述内容,就表示已经成功安装rust环境,如果提示找不到rustc,则需要进行一下安装,fedora上可以直接使用dnf进行安装

[root@localhost ~]# dnf install rust
Last metadata expiration check: 12:42:13 ago on Sat Dec 31 00:59:02 2022.
Package rust-1.64.0-1.fc37.aarch64 is already installed.
Dependencies resolved.
Nothing to do.

由于我本地已完成了安装,所以显示是上述内容。如果已经完成了rust编译环境的安装,我们就可以开始向世界打招呼了。在rust的世界中,需要后缀为rs的文件作为承载,我们可以在名为hello_world 目录中建立一个main.rs文件,内容如下:

[root@localhost code]# tree
.
└── hello_world
    └── main.rs

1 directory, 1 file
[root@localhost code]# cat hello_world/main.rs
fn main() {
    println!("Hello World");
}

这样我们就为我们自己的rust世界写好了一个打招呼的内容,因为rust为预编译语言,所以需要一个类似C语言中的gcc的工具,在rust中有一个叫做rustc的工具完美的继承了gcc的使用特点,在Linux下通过rustc就可以生成一个二进制可执行文件

[root@localhost hello_world]# ls
main.rs
[root@localhost hello_world]# rustc main.rs
[root@localhost hello_world]# ls
main  main.rs
[root@localhost hello_world]#

执行生成的二进制文件main,就能看到我们的“hello world”了。

当然这是一个伟大的进步,说明我们进入到了rust世界,在rust世界中还有个很好用的工具叫做cargo,作为初学者(当然是有其他语言基础的),这个工具初步感受还是很好用的,特别是针对较为复杂的项目来说。

首先我们来说一下cargo工具的安装,可以在环境中执行如下命令确认是否已经安装了cargo环境

[root@localhost code]# cargo --version
cargo 1.64.0

与rust类似,因为我本地已经安装了cargo,所以会有版本内容的提示,当提示找不到命令时可以通过dnf命令(fedora环境中)进行安装,方法参照rust安装,不再赘述。这个工具哪里好呢?具体讲几个命令吧。

创建项目工程,比如我们上面通过rustc进行编译的hello_world项目,是通过命令行手动创建了一个“hello_world”的目录,然后再在目录下手动创建一个入口函数文件main.rs,当我们有了cargo,可以直接通过cargo new projectname 进行创建,比如我们创建一个hello_cargo项目

[root@localhost code]# cargo new  hello_cargo
     Created binary (application) `hello_cargo` package
[root@localhost code]# tree
.
├── hello_cargo
│   ├── Cargo.toml
│   └── src
│       └── main.rs

通过这一个命令就自动给我们创建了一个名为hello_cargo的项目目录,在目录中自动创建了一个toml配置文件和一个带有入口函数文件的src目录,当然这些动作我们可以不用cargo工具手动创建也能达到同样的效果,但是……它麻烦呀,另外cargo还有几个很方便实用的功能。

编译能力: cargo build

[root@localhost code]# cd hello_cargo/
[root@localhost hello_cargo]# tree
.
├── Cargo.toml
└── src
    └── main.rs

1 directory, 2 files
[root@localhost hello_cargo]# cargo build
   Compiling hello_cargo v0.1.0 (/root/code/hello_cargo)
    Finished dev [unoptimized + debuginfo] target(s) in 0.91s
[root@localhost hello_cargo]# tree
.
├── Cargo.lock
├── Cargo.toml
├── src
│   └── main.rs
└── target
    ├── CACHEDIR.TAG
    └── debug
        ├── build
        ├── deps
        │   ├── hello_cargo-b1a1a9be7abc87a6
        │   └── hello_cargo-b1a1a9be7abc87a6.d
        ├── examples
        ├── hello_cargo
        ├── hello_cargo.d
        └── incremental
            └── hello_cargo-1rx4z42s1cnlo
                ├── s-ggulv90t9p-1ae9bu8-37h33e08admk5
                │   ├── 21ceo5hijncl7ici.o
                │   ├── 4a9no1imhf16qcuh.o
                │   ├── 4fdimw0i850r0ya.o
                │   ├── 5733aszpvhlqrpmw.o
                │   ├── 598lt5j8okchcuhd.o
                │   ├── 7fgygjsv6lmmyu6.o
                │   ├── dep-graph.bin
                │   ├── query-cache.bin
                │   ├── t9g9jafa1mh161j.o
                │   ├── work-products.bin
                │   └── wr0ux65dplvcg96.o
                └── s-ggulv90t9p-1ae9bu8.lock

9 directories, 20 files

可以看到,通过cargo build命令工具会帮助我们自动在debug目录生成一个hello_cargo的二进制文件,可以更方便开发人员进行debug,而当我们需要发布的时候我们在build后加上 --release就可以生成发布的版本了,具体差异可以自行实验一下,通过--release生成的二进制文件是在release目录下的。

检查能力:cargo check

从字面意思理解,这个命令意味着检查能力,主要是快速检查语法错误,在hello world这种简单的源码中可能作用不大,但是在大型的项目中协助开发人员检查是否存在语法错误,可以节省大量的编译时间

[root@localhost hello_cargo]# cargo check
    Checking hello_cargo v0.1.0 (/root/code/hello_cargo)
error: expected expression, found `;`
 --> src/main.rs:2:31
  |
2 |     println!("Hello, world!")>;
  |                               ^ expected expression

error: could not compile `hello_cargo` due to previous error
[root@localhost hello_cargo]#

运行能力: cargo run

这个命令就类似于npm run,直接运行的能力(不用先编译,然后再手动执行了)

[root@localhost hello_cargo]# cargo run
   Compiling hello_cargo v0.1.0 (/root/code/hello_cargo)
    Finished dev [unoptimized + debuginfo] target(s) in 0.67s
     Running `target/debug/hello_cargo`
Hello, world!

以上就可以在一个环境中把rust环境跑起来了,这篇内容的目标也就达到了。

你可能感兴趣的:(rust学习,rust)