Back to Blog Posts

Rust Basics 🦀

February 14, 2023

Motivation

Discord's blog on their reasons for switching from Go to Rust piqued my interest. Although Rust has a reputation for being challenging to learn, this only fuels my desire to master it. Moreover, Rust's compatibility with JavaScript through WebAssembly makes it an invaluable tool for offloading resource-intensive operations

Let's Install Rust!

rustup is the installer for Rust. This can be paralleled to nvm in the node world as it controls the installation of Rust on your machine.

$ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | 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/kc/.rustup

This can be modified with the RUSTUP_HOME environment variable.

The Cargo home directory is located at:

  /Users/kc/.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/kc/.cargo/bin

This path will then be added to your PATH environment variable by
modifying the profile files located at:

  /Users/kc/.profile
  /Users/kc/.zshenv

You can uninstall at any time with rustup self uninstall and
these changes will be reverted.

Current installation options:


   default host triple: aarch64-apple-darwin
     default toolchain: stable (default)
               profile: default
  modify PATH variable: yes

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

info: profile set to 'default'
info: default host triple is aarch64-apple-darwin
warning: Updating existing toolchain, profile choice will be ignored
info: syncing channel updates for 'stable-aarch64-apple-darwin'
info: latest update on 2023-02-09, rust version 1.67.1 (d5a82bbd2 2023-02-07)
info: downloading component 'cargo'
info: downloading component 'clippy'
info: downloading component 'rust-docs'
info: downloading component 'rust-std'
info: downloading component 'rustc'
 55.1 MiB /  55.1 MiB (100 %)  47.7 MiB/s in  1s ETA:  0s
info: downloading component 'rustfmt'
info: removing previous version of component 'cargo'
info: removing previous version of component 'clippy'
info: removing previous version of component 'rust-docs'
info: removing previous version of component 'rust-std'
info: removing previous version of component 'rustc'
info: removing previous version of component 'rustfmt'
info: installing component 'cargo'
info: installing component 'clippy'
info: installing component 'rust-docs'
 19.4 MiB /  19.4 MiB (100 %)   7.7 MiB/s in  2s ETA:  0s
info: installing component 'rust-std'
 27.6 MiB /  27.6 MiB (100 %)  18.6 MiB/s in  1s ETA:  0s
info: installing component 'rustc'
 55.1 MiB /  55.1 MiB (100 %)  20.4 MiB/s in  2s ETA:  0s
info: installing component 'rustfmt'
info: default toolchain set to 'stable-aarch64-apple-darwin'

  stable-aarch64-apple-darwin updated - rustc 1.67.1 (d5a82bbd2 2023-02-07) (from rustc 1.65.0 (897e37553 2022-11-02))


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"

Rust is now installed! Woo!

rustup

Now let's see what rustup has.

$ rustup

SUBCOMMANDS:
    show           Show the active and installed toolchains or profiles
    update         Update Rust toolchains and rustup
    check          Check for updates to Rust toolchains and rustup
    default        Set the default toolchain
    toolchain      Modify or query the installed toolchains
    target         Modify a toolchain's supported targets
    component      Modify a toolchain's installed components
    override       Modify directory toolchain overrides
    run            Run a command with an environment configured for a given toolchain
    which          Display which binary will be run for a given command
    doc            Open the documentation for the current toolchain
    man            View the man page for a given command
    self           Modify the rustup installation
    set            Alter rustup settings
    completions    Generate tab-completion scripts for your shell
    help           Prints this message or the help of the given subcommand(s)

cargo

When you install Rust, cargo gets installed as well. Think of this as the Rust version of npm. You can check your version of cargo using.

$ cargo --version

Go ahead and make an account on https://crates.io/! This is the equivalent to https://www.npmjs.com/.

If you're familiar with node.js projects, you likely understand the funtionality behind a package.json file. In Rust, we use a Cargo.toml. This file tells Cargo which dependencies to download and information on how to build the project. Plus all these other things.

npm init

Typically to get started with a new project in node.js, you'd run npm init. In rust it is very similar, cargo init.

npm install

Similarly to npm's npm install x command to install dependencies. In Rust this is cargo add x.

And instead of npm's npm install --global to install utilities globally. In Rust it is cargo install.

Setting Up VSCode

If using Visual Studio Code, I highly recommend rust-analyzer as it provides

  • code completion with imports insertion
  • go to definition, implementation, type definition
  • find all references, workspace symbol search, symbol renaming
  • types and documentation on hover
  • inlay hints for types and parameter names
  • semantic syntax highlighting
  • a lot of assists (code actions)
  • apply suggestions from errors

... and many more, check out the manual to see them all

Conclusion

And thats it for the setup! We now have Rust installed, an understanding of cargo, and VSCode ready to write some Rust! Next time we will start by writing a Hello World program and touch on some more in-depth concepts for Rust.