Using Rust 1.88.0 Toolset
Installing and using Rust 1.88.0 Toolset
Abstract
Providing feedback on Red Hat documentation Copy linkLink copied to clipboard!
We appreciate your feedback on our documentation. Let us know how we can improve it.
Submitting feedback through Jira (account required)
- Log in to the Jira website.
- Click Create in the top navigation bar.
- Enter a descriptive title in the Summary field.
- Enter your suggestion for improvement in the Description field. Include links to the relevant parts of the documentation.
- Click Create at the bottom of the dialogue.
Chapter 1. Rust Toolset Copy linkLink copied to clipboard!
Rust Toolset is a Red Hat offering for developers on Red Hat Enterprise Linux (RHEL). It provides the rustc compiler for the Rust programming language, the Rust package manager Cargo, the rustfmt formatting tool, and required libraries.
Rust Toolset is available as a module for RHEL 8 and as packages for RHEL 9 and 10.
1.1. Rust Toolset components Copy linkLink copied to clipboard!
The following table lists the main Rust Toolset packages, their versions, and a short description of each.
| Name | Version | Description |
|---|---|---|
|
| 1.88.0 | The Rust compiler front-end for LLVM. |
|
| 1.88.0 | A build system and dependency manager for Rust. |
|
| 1.88.0 | A tool for automatic formatting of Rust code. |
1.2. Rust Toolset compatibility Copy linkLink copied to clipboard!
Rust Toolset is available for Red Hat Enterprise Linux on AMD and Intel 64-bit (x86_64), 64-bit ARM (aarch64), IBM Power Systems, Little Endian (ppc64le), and 64-bit IBM Z (s390x) architectures.
1.3. Installing Rust Toolset Copy linkLink copied to clipboard!
On Red Hat Enterprise Linux 8, enable the rust-toolset module to install Rust Toolset with its development and debugging tools and dependent packages. On Red Hat Enterprise Linux 9 and 10, install the rust-toolset package instead. Rust Toolset depends on LLVM Toolset.
Prerequisites
- All available Red Hat Enterprise Linux updates are installed.
Procedure
Install Rust Toolset:
On RHEL 8, enter:
# yum module install rust-toolsetOn RHEL 9 and 10, enter:
# dnf install rust-toolset
1.4. Installing Rust documentation Copy linkLink copied to clipboard!
Install the rust-doc package to have The Rust Programming Language book available locally on your system. The package provides the official Rust language documentation for offline use.
Procedure
Install the
rust-docpackage:On RHEL 8, enter:
# yum install rust-docOn RHEL 9 and 10, enter:
# dnf install rust-doc
Verification
Use a browser that is installed on the same host to display the documentation:
-
The Rust Programming Language book:
/usr/share/doc/rust/html/index.html -
The API documentation for all Rust code packages:
/usr/share/doc/rust/html/std/index.html
-
The Rust Programming Language book:
1.5. Installing Cargo documentation Copy linkLink copied to clipboard!
The Cargo, Rust’s Package Manager book is available as installable documentation for Cargo. Install the cargo-doc package to add this documentation to your system.
Procedure
Install the
cargo-docpackage:On RHEL 8, enter:
# yum install cargo-docOn RHEL 9 and 10, enter:
# dnf install cargo-doc
Verification
-
Open
/usr/share/doc/cargo/html/index.htmlin a browser that is installed on the same host.
Chapter 2. The Cargo build tool Copy linkLink copied to clipboard!
Cargo is Rust’s build tool, package manager, and front end for the rustc compiler. After you declare dependency versions in your manifest, you can use Cargo to fetch crates, build the project, and run tests.
2.1. The Cargo directory structure and file placements Copy linkLink copied to clipboard!
The Cargo build tool uses set conventions for defining the directory structure and file placement within a Cargo package. Running the cargo new command generates the package directory structure and templates for both a manifest and a project file. By default, it also initializes a new Git repository in the package root directory.
For a binary program, Cargo creates a directory <project_name> containing a text file named Cargo.toml and a subdirectory src containing a text file named main.rs.
2.2. Creating a Rust project Copy linkLink copied to clipboard!
Create a new Rust project that is set up according to the Cargo conventions. The cargo new command generates the package directory structure, a manifest file, and initial source files.
Procedure
Create a Rust project:
$ cargo new --bin <project_name>Replace
<project_name>with your project name.-
To edit the project code, edit the main executable file
main.rsand add new source files to thesrcsubdirectory.
2.3. Creating a Rust library project Copy linkLink copied to clipboard!
Create a Rust library project by using the Cargo build tool with the cargo new --lib command. The result is a package layout suitable for a library rather than a binary.
Procedure
Create a Rust library project:
$ cargo new --lib <project_name>Replace
<project_name>with the name of your Rust project.-
To edit the project code, edit the
src/lib.rssource file.
2.4. Building a Rust project Copy linkLink copied to clipboard!
Build your Rust project by using the Cargo build tool. Cargo resolves all dependencies of your project, downloads missing dependencies, and compiles it by using the rustc compiler.
By default, projects are built and compiled in debug mode. For information on compiling your project in release mode, see Building a Rust project in release mode.
Prerequisites
Procedure
In the Rust project directory, build the project:
$ cargo buildTo verify that your Rust program can be built when you do not need to build an executable file, enter:
$ cargo check
2.5. Building a Rust project in release mode Copy linkLink copied to clipboard!
Build your Rust project in release mode by using the Cargo build tool. Release mode is optimizing your source code and can therefore increase compilation time while ensuring that the compiled binary will run faster. Use this mode to produce optimized artifacts suitable for release and production.
Cargo resolves all dependencies of your project, downloads missing dependencies, and compiles it by using the rustc compiler.
For information on compiling your project in debug mode, see Building a Rust project.
Prerequisites
Procedure
In the Rust project directory, build the project in release mode:
$ cargo build --releaseTo verify that your Rust program can be built when you do not need to build an executable file, enter:
$ cargo check
2.6. Running a Rust program Copy linkLink copied to clipboard!
In a Cargo project directory, run cargo run command to compile when needed and start your binary. The executable you launch matches your active debug or release profile.
Prerequisites
Procedure
To run a Rust program managed as a project by Cargo, enter in the project directory:
$ cargo runIf your program has not been built yet, Cargo builds your program before running it.
2.7. Testing a Rust project Copy linkLink copied to clipboard!
Test your Rust program by using the Cargo build tool. Cargo first rebuilds your project and then runs the tests found in the project. Test functions must be free, monomorphic, and take no arguments. The function return type must be either () or Result<(), E> where E: Error.
By default, Rust projects are tested in debug mode. For information on testing your project in release mode, see Testing a Rust project in release mode.
Prerequisites
Procedure
-
Add the
#[test]attribute in front of your function. Enter in the project directory:
$ cargo test
2.8. Testing a Rust project in release mode Copy linkLink copied to clipboard!
Test your Rust program in release mode by using the Cargo build tool. Release mode is optimizing your source code and can therefore increase compilation time while ensuring that the compiled binary will run faster. Use this mode to produce optimized artifacts suitable for release and production.
Cargo first rebuilds your project and then runs the tests found in the project. Test functions must be free, monomorphic, and take no arguments. The function return type must be either () or Result<(), E> where E: Error.
For information on testing your project in debug mode, see Testing a Rust project.
Prerequisites
Procedure
-
Add the
#[test]attribute in front of your function. Enter in the project directory:
$ cargo test --release
2.9. Configuring Rust project dependencies Copy linkLink copied to clipboard!
Configure the dependencies of your Rust project by using the Cargo build tool. To specify dependencies for a project managed by Cargo, edit the Cargo.toml file in the project directory and rebuild your project. Cargo downloads the Rust code packages and their dependencies and stores them locally. Use cargo build or cargo run commands to compile your code with those packages and produce a runnable executable.
Prerequisites
Procedure
In your project directory, edit the
Cargo.tomlfile, and list each dependency in the following format in the[dependencies]section:<crate_name> = <version>Rust code packages are called crates.
Rebuild your project:
$ cargo buildRun your project:
$ cargo run
2.10. Building documentation for a Rust project Copy linkLink copied to clipboard!
Use the Cargo tool to generate documentation from comments in your source code that are marked for extraction. Note that documentation comments are extracted only for public functions, variables, and members.
Prerequisites
Procedure
-
In your code, use three slashes
///at the beginning of a line to mark the line for extracting the comment for documentation. Build the documentation:
$ cargo doc --no-depsThe command stores the generated documentation in the
target/doc/directory.
2.11. Compiling code into a WebAssembly binary with Rust Copy linkLink copied to clipboard!
Install the WebAssembly standard library to compile Rust code into WebAssembly binaries. You can then build and run Rust projects that target the WebAssembly platform.
Prerequisites
Procedure
Install the WebAssembly standard library:
On RHEL 8, enter:
# yum install rust-std-static-wasm32-unknown-unknownOn RHEL 9 and 10, enter:
# dnf install rust-std-static-wasm32-unknown-unknown
Use WebAssembly with Cargo:
$ cargo <command> --target wasm32-unknown-unknownReplace
<command>with the Cargo command you want to run.
2.12. Vendoring Rust project dependencies Copy linkLink copied to clipboard!
Create a local copy of the dependencies of your Rust project for offline redistribution by using the Cargo build tool (vendoring). Vendored sources live in the vendor directory, including any Windows-target crates you captured. Point Cargo at that tree to build offline without network access.
Prerequisites
Procedure
To vendor your Rust project with dependencies by using Cargo, enter in the project directory:
$ cargo vendor
Chapter 3. The rustfmt formatting tool Copy linkLink copied to clipboard!
With the rustfmt formatting tool, you can automatically format the source code of your Rust programs. You can use rustfmt either as a standalone tool or with Cargo.
For further details, see the rustfmt help pages displayed by the rustfmt --help command.
3.1. Installing rustfmt Copy linkLink copied to clipboard!
Install the rustfmt formatting tool by installing the rustfmt package. On RHEL 8 enable the rust-toolset module; on RHEL 9 and 10 install the rust-toolset package.
Prerequisites
Procedure
Install the
rustfmtpackage:On RHEL 8, enter:
# yum install rustfmtOn RHEL 9 and 10, enter:
# dnf install rustfmt
3.2. Using rustfmt as a standalone tool Copy linkLink copied to clipboard!
Use rustfmt as a standalone tool to format a Rust source file and all its dependencies. As an alternative, use rustfmt with the Cargo build tool. For more information, see Using rustfmt with the Cargo build tool.
Prerequisites
Procedure
Format the Rust source code:
$ rustfmt <source_file>Replace
<source_file>with the name of your source file. If you use standard input instead, formatted output is printed to standard output.ImportantBy default,
rustfmtmodifies the affected files without displaying details or creating backups. To display details and create backups, runrustfmtwith the--write-modeoption.
3.3. Using rustfmt with the Cargo build tool Copy linkLink copied to clipboard!
Use the rustfmt tool with Cargo to format a Rust source file and all its dependencies. As an alternative, use rustfmt as a standalone tool. For more information, see Using rustfmt as a standalone tool.
Prerequisites
Procedure
-
Optional: To change the
rustfmtformatting options, createrustfmt.tomlconfiguration file in the project directory and add your configurations to the file. Format the Rust source code:
$ cargo fmt
Chapter 4. Container images with Rust Toolset Copy linkLink copied to clipboard!
You can build your own Rust Toolset containers from Red Hat Universal Base Images. Use these images as a base and add Rust Toolset packages to create custom development or build environments.
4.1. Creating a custom UBI-based container with Rust Toolset Copy linkLink copied to clipboard!
Rust Toolset packages are part of the Red Hat Universal Base Images (UBIs) repositories. To keep the container size small, install only individual packages instead of the entire Rust Toolset.
Prerequisites
- An existing container file. For information on creating Containerfiles, see the Dockerfile reference page.
Procedure
To create a container image containing Rust Toolset, add the following to your container file:
For an image based on RHEL 8, enter:
FROM registry.access.redhat.com/ubi8/ubi:latest RUN yum module install -y rust-toolsetFor an image based on RHEL 9, enter:
FROM registry.access.redhat.com/ubi9/ubi:latest RUN yum install -y rust-toolsetFor an image based on RHEL 10, enter:
FROM registry.access.redhat.com/ubi10/ubi:latest RUN yum install -y rust-toolset
Chapter 5. Changes in Rust 1.88.0 Toolset Copy linkLink copied to clipboard!
Red Hat Enterprise Linux provides Rust Toolset at version 1.88.0. The previous version was 1.84.1. Notable enhancements include the Rust 2024 Edition, async closures, let chains, naked functions, high-performance computing, trait upcasting, and standard library improvements.
-
Rust 2024 Edition: The Rust 2024 Edition is now stable. It introduces changes such as refined capture rules for
impl Trait, and saferexternblocks which now require theunsafekeyword. -
Async Closures: The
asyncclosures are now stable. -
Let Chains: In
ifandwhileconditions, you can use&&to chain multipleletstatements, which shortens complex conditional logic. Let chains are available only in the Rust 2024 Edition. -
Naked Functions: Developers can now define "naked functions" using the
#[unsafe(naked)]attribute. These functions do not have a compiler-generated prologue or epilogue, providing full control over the assembly code. -
High-performance computing: When you enable target features, you can call multiple
std::archintrinsics directly in safe Rust, which gives you direct access to specific CPU features. - Trait Upcasting: It is now possible to upcast trait objects to their supertraits, improving flexibility when working with trait objects.
Standard Library Improvements:
- Anonymous Pipes: Access to anonymous pipes is now available in the standard library.
Mutable Multiple Element Indexing: `HashMap`s and slices now support safely retrieving mutable references to multiple elements simultaneously.
- Compatibility notes
-
The
#[bench]attribute has been fully de-stabilized and its usage will result in a hard error. -
The
wasm_c_abifuture compatibility warning is now a hard error. -
The
missing_abilint is now warn-by-default. You must explicitly specify the ABI inexternblocks.
Rust Toolset is a rolling Application Stream, and Red Hat only supports the latest version. For more information, see the Red Hat Enterprise Linux Application Streams Life Cycle document.