• rust编程语言(chapter 1)


    目录

    1. rust安装

    2. Hello Rust

    3. Cargo包管理器

    3.1 cargo简介

    3.2 cargo创建项目

    3.3 构建和运行项目

    3.4 debug和release版本构建


    1. rust安装

    rust提供了一个命令行的工具rustup,可以用来管理和安装rust的版本以及相关的工具集。

    那么首先,来下载和安装rustup这个工具(linux为例):

    1. # curl --proto '=https' --tlsv1.2 https://sh.rustup.rs -sSf > rustup.sh
    2. # sh rustup.sh

    默认安装了最新版本的rust的语言包和编译器,需要注意的是,rust没有单独的链接器(linker),需要单独安装第三方的linker。在linux环境下,通常使用GCCClang就可以了。链接器将多个目标文件,链接成为一个目标文件(可执行文件或库)。 例如:ubuntu,执行apt-get install build-essential即可。

    • rust检查

    # rustc --version rustc 1.65.0 (897e37553 2022-11-02)

    版本号格式:x.y.z(major.minor.patch),主版本号.次版本号.patch版本号(commit号)。

    • rust更新:

    # rustup update
    • rust卸载:

    # rustup self uninstall

    2. Hello Rust

    安装完成rust,手动来写第一个hello world的rust程序。

    • 创建工程目录

    1. // 创建工程目录
    2. # mkdir hello
    3. # cd hello/
    4. # touch main.rs
    5. # vim main.rs
    1. // main.rs
    2. fn main()
    3. {
    4. println!("hello rust!");
    5. }

    fn main() {}定义了一个rust函数,这里的main函数是特殊的函数,是rust可执行程序的执行点。该函数无参数且无返回值。与C语言一致,()小括号中是函数参数,{}内是函数体。

    rust官方提供了一个格式化源代码的工具rustfmt,如下:

    1. # rustfmt main.rs
    2. # cat main.rs
    3. fn main() {
    4. println!("hello rust!");
    5. }
    1. // 编译+运行
    2. # rustc main.rs
    3. # ls main main.rs
    4. # ./main hello rust!

    rust使用4个空格进行缩进,而非Tab。

    println!实际是一个rust宏,包含!号的一般都是rust提供的宏函数,普通函数的调用,不包含!号。

    rust源代码以分号;结束一行表达式(expression)的定义,与C语言一致。

    3. Cargo包管理器

    单个rust源代码文件的编译比较简单,用rustc足够了。但是项目比较大时,应该使用cargo项目(包)管理器来管理rust的源代码文件,以及做代码的共享。

    3.1 cargo简介

    cargo是rust项目的构建系统和包管理器。可以使用该工具管理rust工程的多个任务,例如:编译代码、下载依赖库、构建库等。

    随着工程项目的复杂度提升,会添加一系列的rust库依赖,使用cargo十分方便地管理依赖包(下载和版本)。因此,专集的后续章节都使用cargo来构建项目。

    安装rustc编译器的同时,就会按照cargo,如下:

    3.2 cargo创建项目

    1. # cargo new hello_cargo
    2. Created binary (application) `hello_cargo` package
    3. # cd hello_cargo/
    4. # ls -sl
    5. total 8
    6. 4 -rw-r--r-- 1 root root 180 1113 17:07 Cargo.toml
    7. 4 drwxr-xr-x 2 root root 4096 1113 17:07 src
    8. # ls src
    9. main.rs
    1. # cat Cargo.toml
    2. [package]
    3. name = "hello_cargo"
    4. version = "0.1.0"
    5. edition = "2021"
    6. # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
    7. [dependencies]

    cargo的package section指定了当前工程构建的包信息,dependencies section指定了当前工程依赖的第三方包信息。

    在rust中,代码(依赖)包被称作crates。当前工程中,不依赖其他包,因此为空。

    cargo假设rust的源代码位于src目录中,最顶层目录中只存放README,license文件,配置文件等代码无关的文件。

    3.3 构建和运行项目

    1. # cargo build
    2. Compiling hello_cargo v0.1.0 (/root/rust/hello_cargo)
    3. Finished dev [unoptimized + debuginfo] target(s) in 0.31s
    4. # cargo run
    5. Finished dev [unoptimized + debuginfo] target(s) in 0.00s
    6. Running `target/debug/hello_cargo`
    7. Hello, world!

    cargo check子命令快速检查源代码语法是否正确,而不必编译。

    3.4 debug和release版本构建

    直接使用cargo build构建的是debug版本,可以使用cargo build --release来生成release版本的构建。release版本是经过编译器优化的,运行更快。

    总结:cargo管理的各个项目(包)之间的版本依赖关系,通常在新的项目目录可以直接执行cargo build来构建工程项目。

    关于作者:

    犇叔,浙江大学计算机科学与技术专业,研究生毕业,而立有余。先后在华为、阿里巴巴和字节跳动,从事技术研发工作,资深研发专家。主要研究领域包括虚拟化、分布式技术和存储系统(包括CPU与计算、GPU异构计算、分布式块存储、分布式数据库等领域)、高性能RDMA网络协议和数据中心应用、Linux内核等方向。

    专业方向爱好:数学、科学技术应用

    关注犇叔,期望为您带来更多科研领域的知识和产业应用。

    内容坚持原创,坚持干货有料。坚持长期创作,关注犇叔不迷路

  • 相关阅读:
    微服务实战之领域事件
    【C++】string常用函数总结及其模拟实现
    MySQL进阶_查询优化和索引优化
    情感分析:使用循环神经网络
    SUSE linux的快照和恢复
    python写一个文本处理器
    2020年你可能遇到的高频面试题,Java中高级面试题(含答案)!
    c++ 新特性 std::bind 简单实验
    docker占用磁盘空间大小排查
    JAVA工具类匹配重复或者连续的字符和符号
  • 原文地址:https://blog.csdn.net/landy_john/article/details/127837320