最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 一个番茄钟入门 Rust|牛气冲天新年征文

    正文概述 掘金(大宁的洛竹)   2021-02-13   760

    前言

    最近关注洛竹的朋友,都知道我成为了 Deno Contributor。不过说来惭愧,我的 pr 和代码逻辑毫无关系。我本来只是为了调研 Deno 的 Github Action 应用情况,在写 叮,一份 Deno GitHub Action 源码解析请查收 一文的过程中,意外发现了 Deno CI 的谬误和不合理之处。在征询了迷渡大佬的意见后,提交了自己的 pr。 为了能够参与 Deno 的核心开发,经过几天的思想斗争,决定学习 Rust。

    如果你问我为什么 Node 都没有精通,就开启了 Deno、Go、Rust 的学习之旅,那我还真的没办法正面回答你,尤其我还是个前端。我能告诉你的是如果不是先前入门了 Deno 和 Go,设计我们团队 CLI tpc 和 tuya-panel-demo 的管理时就拿不出一个好的方案。

    另外作为一个计算机专业学生,谁还没学过 C/C++、Java、操作系统、数据结构、计算机原理呢?虽说学的不咋地,也忘得差不多了,但是对于自学任何一门编程语言都是够用的。在小帅的建议下,这些基础理论我也会捡起来温习。牛年也希望大家以开放的心态看待程序员职业生涯,不要被人为制造出来的焦虑所困扰。

    Deno 与 Rust

    Deno 早期是 Golang + TypeScript 的,后来因为 Golang 和 V8 的 GC 问题,Ryan 下了大工夫把 golang 统统换成没有 GC 的 Rust了。知乎看到的一个回答觉得很有道理:

    1. Go 自己有 GC,V8 自己也有 GC,双 GC 和复杂的运行时会造成多少性能损失。
    2. Rust 具有高性能、内存安全等特性,非常适合写这种对性能要求高的程序。

    其实 Go 也是很优秀的编译语言,由于是初学,我能理解的就是 Go 不符合 Ryan 设计 Deno 的需求。

    安装 Rust

    和其他不太一样的是,Rust 官方提供了 rustup 命令行工具来下载、安装、管理不同的 Rust 发行版本以及其附带的工具链。

    安装 rustup:

    curl https://sh.rustup.rs -sSf | sh
    

    输出:

    $ curl https://sh.rustup.rs -sSf | sh
    info: downloading installer
    
    Welcome to Rust!
    
    This will download and install the official compiler for the Rust
    programming language, and its package manager, Cargo.
    
    Rustup metadata and toolchains will be installed into the Rustup
    home directory, located at:
    
      /Users/luozhu/.rustup
    
    This can be modified with the RUSTUP_HOME environment variable.
    
    The Cargo home directory located at:
    
      /Users/luozhu/.cargo
    
    This can be modified with the CARGO_HOME environment variable.
    
    The cargo, rustc, rustup and other commands will be added to
    Cargo's bin directory, located at:
    
      /Users/luozhu/.cargo/bin
    
    This path will then be added to your PATH environment variable by
    modifying the profile files located at:
    
      /Users/luozhu/.profile
      /Users/luozhu/.zshenv
    
    You can uninstall at any time with rustup self uninstall and
    these changes will be reverted.
    
    Current installation options:
    
    
       default host triple: x86_64-apple-darwin
         default toolchain: stable (default)
                   profile: default
      modify PATH variable: yes
    
    1) Proceed with installation (default)
    2) Customize installation
    3) Cancel installation
    >1
    

    以上信息可以总结为:

    1. Rustup 家目录:~/.rustup,可以用 RUSTUP_HOME 环境变量修改
    2. Cargo 家目录:~/.cargo,可以用 CARGO_HOME 环境变量修改
    3. cargo、rustc、rustup 和其他命令都安装在 ~/.cargo/bin
    4. PATH 环境变量是放在 ~/.zshenv 中的(这个方式第一次见)

    这里让我们选择安装方式,由于是入门,我们直接选择默认安装,输入如下:

    info: profile set to 'default'
    info: default host triple is x86_64-apple-darwin
    info: syncing channel updates for 'stable-x86_64-apple-darwin'
    info: latest update on 2021-02-11, rust version 1.50.0 (cb75ad5db 2021-02-10)
    info: downloading component 'cargo'
      4.3 MiB /   4.3 MiB (100 %)   3.1 MiB/s in  1s ETA:  0s
    info: downloading component 'clippy'
    info: downloading component 'rust-docs'
     14.7 MiB /  14.7 MiB (100 %)   2.2 MiB/s in  6s ETA:  0s
    info: downloading component 'rust-std'
     23.3 MiB /  23.3 MiB (100 %)   2.2 MiB/s in 11s ETA:  0s
    info: downloading component 'rustc'
     61.0 MiB /  61.0 MiB (100 %)   2.3 MiB/s in 26s ETA:  0s
    info: downloading component 'rustfmt'
    info: installing component 'cargo'
    info: using up to 500.0 MiB of RAM to unpack components
    info: installing component 'clippy'
    info: installing component 'rust-docs'
     14.7 MiB /  14.7 MiB (100 %)   5.8 MiB/s in  1s ETA:  0s
    info: installing component 'rust-std'
     23.3 MiB /  23.3 MiB (100 %)  13.0 MiB/s in  3s ETA:  0s
    info: installing component 'rustc'
     61.0 MiB /  61.0 MiB (100 %)  13.3 MiB/s in  4s ETA:  0s
    info: installing component 'rustfmt'
    info: default toolchain set to 'stable-x86_64-apple-darwin'
    
      stable-x86_64-apple-darwin installed - rustc 1.50.0 (cb75ad5db 2021-02-10)
    
    
    Rust is installed now. Great!
    
    To get started you need Cargo's bin directory ($HOME/.cargo/bin) in your PATH
    environment variable. Next time you log in this will be done
    automatically.
    
    To configure your current shell, run:
    source $HOME/.cargo/env
    

    以上这个过程是安装 rust 及其工具链并自动设置环境的过程,你可以根据提示输入 source $HOME/.cargo/env 让配置立即生效,也可以重新打开一个命令行让配置生效。

    验证是否安装成功:

    rustc --version
    

    顺利的话,你会看到 rustc x.y.z (版本的哈希码 yyyy-mm-dd) 格式的输出。

    更新:

    rustup update
    

    卸载:

    rustup self uninstall
    

    本地文档

    安装工具在执行的过程中会在本地生成一份离线文档,你可以通过命令 rustup doc 在浏览器中打开它。但是我觉得一般用不到,我们在 vscode 中安装 Rust 插件有文档提示的功能。

    Hello,World!

    vscode

    安装 Rust 插件:

    一个番茄钟入门 Rust|牛气冲天新年征文

    安装成功后将 "rust-client.rustupPath": "$HOME/.cargo/bin/rustup" 添加到 setting.json 来修复 couldn't start client Rust Language Server

    第一行代码

    新建一个 main.rs 并写入以下代码:

    fn main() {
      println!("Hello,World!");
    }
    
    • 使用关键字 fn 定义了一个函数。(Go(func)、JS(function)、数学(f)),看起来 Rust 很省布料。
    • main 函数比较特殊:当你运行一个可执行 Rust 程序的时候,所有的代码都会从这个入口函数开始运行(Go 也是一样)
    • 按照惯例,Rust 推荐把左花括号与函数声明置于同一行并以空格分隔。
    • 我们调用了一个被叫作 println! 的宏:假如我们调用的是一个普通函数,那么这里会以去掉 ! 符号的 println 来进行标记。
    • 大部分 Rust 代码都会以分号来结尾。

    然后在命令行输入 rustc main.ts 编译代码,编译成功后会生成可执行文件 main:

    .
    ├── main
    └── main.rs
    

    执行 ./main 便会输出 Hello,World!

    Hello,Cargo!

    和 Go 一样(go build),使用系统的编译工具(rustc)编译简单的程序足够了,但是它们无法满足规模大、协同开发人员多的项目。Go 有 gox、goxc、xgo,Rust 有 Cargo 来帮助我们管理简化项目依赖、代码构建这样的事情。

    Cargo 是 Rust 工具链中内置的构建系统及包管理器。由于它可以处理众多诸如构建代码、下载编译依赖库等琐碎但重要的任务,绝大多数 Rust 用会选择它来管理自己的 Rust 项目(比如 Deno)。

    前面我们的 hellowordl 示例在 vscode 中,Rust 插件会报以下错误,可见 Cargo 是 Rust 的标配:

    一个番茄钟入门 Rust|牛气冲天新年征文

    使用 Cargo 创建项目

    使用 cargo new hello_cargo 新建项目:

    一个番茄钟入门 Rust|牛气冲天新年征文

    Cargo 为我们生成了两个文件与一个目录:一个名为 Cargo.toml 的文件,以及一个名为 main.rs 的源代码文件 ,该源代码被放置在 src 目录下。于此同时,Cargo 还会初始化一个新的 Git 仓库并升成默认的 .gitignore 文件。

    Cargo.toml

    [package]
    name = "hello_cargo"
    version = "0.1.0"
    authors = ["youngjuning <youngjuning@163.com>"]
    edition = "2018"
    
    # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
    
    [dependencies]
    
    • [package]:是一个区域标签,它表明接下来的语句会被用于配置当前的程序包。author 这里的邮箱和名字是从 ~/.gitconfig 中读取的
    • [dependencies]:同样是一个区域标签,它表明随后的区域会被用来声明项目的依赖。

    按照惯例,Cargo 会默认把所有的源代码文件保存到 src 目录下,而项目根目录只被用来存放诸如 README 文档、许可声明、配置文件等与源代码无关的文件。使用 Cargo 可以帮助你合理并一致地组织自己的项目文件,从而使一切井井有条。

    使用 Cargo 构建和运行项目

    cargo build
    

    一个番茄钟入门 Rust|牛气冲天新年征文

    与之前不同,这个命令会将可执行程序生成在路径 target/debug/hello_cargo 下:

    一个番茄钟入门 Rust|牛气冲天新年征文

    首次使用命令 cargo build 构建的时候,会生成 Cargo.lock(类似于 yarn.lock),不要手动修改该文件,默认 .gitignore 中只忽略了 target 目录,我们从 https://github.com/github/gitignore/blob/master/Rust.gitignore 中复制最佳实践过来。

    使用 cargo run 命令可以简单地以此完成编译和运行工作:

    一个番茄钟入门 Rust|牛气冲天新年征文

    以 Release 模式构建

    cargo build --release
    

    生成的可执行文件会被放置在 target/release 目录下,而不是之前的 target/debug 目录下。

    假如你想要对代码的运行效率进行基准测试,请通过 cargo run --release 命令进行构建,并使用 target/release 目录下的可执行程序完成基准测试。

    一个番茄钟入门 Rust|牛气冲天新年征文


    起源地下载网 » 一个番茄钟入门 Rust|牛气冲天新年征文

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元