Rust学习笔记——1.Hello World

Rust 语言特点

底层开发语言,直接对接硬件和内存,适合嵌入式开发,可以用Rust写操作系统或微控制器应用程序。

安装(我用的Ubuntu 20.04)

官网给的安装命令:

curl --proto '=https' --tlsv1.2 https://sh.rustup.rs -sSf | sh

尴尬的是我没有curl……所以先装curl

sudo apt  install curl

过程中问我要怎么装,我回答说“随便”

Current installation options:


   default host triple: x86_64-unknown-linux-gnu
     default toolchain: stable (default)
               profile: default
  modify PATH variable: yes

1) Proceed with installation (default)
2) Customize installation
3) Cancel installation
>1

它回答说“装好了哈!但你用的话得重新开个命令行工具,因为配了Path还没生效。”

info: default toolchain set to 'stable-x86_64-unknown-linux-gnu'

  stable-x86_64-unknown-linux-gnu installed - rustc 1.58.1 (db9d1b20b 2022-01-20)


Rust is installed now. Great!

To get started you may need to restart your current shell.
This would reload your PATH environment variable to include
Cargo's bin directory ($HOME/.cargo/bin).

To configure your current shell, run:
source $HOME/.cargo/env

我重开命令行,输入:

rustc --version

 它输出:

rustc 1.58.1 (db9d1b20b 2022-01-20)

Hello World

fn main() {
    println!("Hello, world!");
}

从这个Hello world程序看出:

主函数main、函数体的大括号、参数的小括号、字符串双引号、行尾的分号都和C语言一样。

不一样的是:函数用fn修饰

文档说:

1. 缩进是4个空格,不是tab

2.println!表示println是宏而不是函数

3."Hello, world!"是字符串参数

4.大部分代码行尾都有分号

第2点对我来说是新知识,高亮~

编译

rustc main.rs

生成可执行文件main

执行

./main

输出了 Hello, world!

改改函数:

我去掉println后面的叹号之后:

错误提示还挺贴心……改点代码,把println变成函数:

fn println() {
    println!("Hello, world!");
}

fn main() {
    println();
}

自己定义了函数println,因为没猜到参数怎么传,决定之后再研究,函数调用也和C语言一样。结果输出了 Hello, world!

OK~

Cargo

Cargo是Rust自带的包管理工具,管理项目,库依赖啥的。

创建项目

cargo new guessing_game

guessing_game就是项目名,进入guessing_game文件夹,默认创建的文件如下:

.
├── Cargo.toml
└── src
    └── main.rs

1 directory, 2 files

main.rs是自动生成的代码,就是之前写的helloworld……

Cargo.toml是配置文件

[package]
name = "guessing_game"
version = "0.1.0"
edition = "2021"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]

package下面的是项目信息,dependencies下面是项目依赖,目前新建的项目还没有依赖,之后在说。

还自动生成了git文件,如果已经有git repository了,还可以用cargo new --vcs=git,哇~

 编译执行

cargo run
   Compiling guessing_game v0.1.0 (/home/jiamei/4T/projects/Rust/guessing_game)
    Finished dev [unoptimized + debuginfo] target(s) in 0.46s
     Running `target/debug/guessing_game`
Hello, world!
.
├── Cargo.lock
├── Cargo.toml
├── src
│   └── main.rs
└── target
    ├── CACHEDIR.TAG
    └── debug
        ├── build
        ├── deps
        │   ├── guessing_game-944b310f5f7472e0
        │   └── guessing_game-944b310f5f7472e0.d
        ├── examples
        ├── guessing_game
        ├── guessing_game.d
        └── incremental
            └── guessing_game-36jahz6htmtsm
                ├── s-g6b3vhf6cz-13stgm4-1bdvcgqozlnpl
                │   ├── 2moq4rj82sej68rg.o
                │   ├── 2t6sg9brgzot2swx.o
                │   ├── 32x58so01r5343ud.o
                │   ├── 3vj86a5a2ocm2mdc.o
                │   ├── 4fyffxe5se1ji5e9.o
                │   ├── 4t10gauqjj0yp3d7.o
                │   ├── 55mzwfea6ybfc8it.o
                │   ├── dep-graph.bin
                │   ├── ore9o7c67cfrjku.o
                │   ├── query-cache.bin
                │   └── work-products.bin
                └── s-g6b3vhf6cz-13stgm4.lock

9 directories, 20 files

 生成了这么多文件!!

  cargo build 是编译,还可以加release参数

cargo build --release
.
├── Cargo.lock
├── Cargo.toml
├── src
│   └── main.rs
└── target
    ├── CACHEDIR.TAG
    ├── debug
    │   ├── build
    │   ├── deps
    │   │   ├── guessing_game-944b310f5f7472e0
    │   │   └── guessing_game-944b310f5f7472e0.d
    │   ├── examples
    │   ├── guessing_game
    │   ├── guessing_game.d
    │   └── incremental
    │       └── guessing_game-36jahz6htmtsm
    │           ├── s-g6b3vhf6cz-13stgm4-1bdvcgqozlnpl
    │           │   ├── 2moq4rj82sej68rg.o
    │           │   ├── 2t6sg9brgzot2swx.o
    │           │   ├── 32x58so01r5343ud.o
    │           │   ├── 3vj86a5a2ocm2mdc.o
    │           │   ├── 4fyffxe5se1ji5e9.o
    │           │   ├── 4t10gauqjj0yp3d7.o
    │           │   ├── 55mzwfea6ybfc8it.o
    │           │   ├── dep-graph.bin
    │           │   ├── ore9o7c67cfrjku.o
    │           │   ├── query-cache.bin
    │           │   └── work-products.bin
    │           └── s-g6b3vhf6cz-13stgm4.lock
    └── release
        ├── build
        ├── deps
        │   ├── guessing_game-d800b172399c4e5a
        │   └── guessing_game-d800b172399c4e5a.d
        ├── examples
        ├── guessing_game
        ├── guessing_game.d
        └── incremental

14 directories, 24 files

 更多的文件……工程根目录的Cargo.lock是跟踪版本用的。还有cargo check的指令,是检查项目编译错误的。

签名之后再研究。


版权声明:本文为Jamie1221原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。