Hello, World!
Learn how to create a new Rust crate and understand its file structure. You will know how to use cargo run and the println!() macro.
Rust uses a tool called cargo for building, checking, and managing dependencies. This is installed for you when you used rustup to install Rust.
To create a new Rust crate, use cargo new name-of-crate. This creates a new directory called name-of-crate. Be sure to cd into that directory.
cd is short for change directory. We use this to…yup…change the directory from the terminal.
Crate anatomy
Two types of crates: binary, library.
This first workshop we will work only with a binary crate. We will create a library in the second half of the day.
Binary crates are standalone applications like command line tools, or things that run once—simiar to a script that you run with Rscript main.R
Crate anatomy
A new crate looks like this:
intro-to-rust/
├── Cargo.toml # Metadata & dependencies (like DESCRIPTION)
├── Cargo.lock # Dependency versions (like renv.lock)
└── src/
└── main.rs # Entry point — like main.R
main.rs
When you create a new rust binary the file src/main.rs is prepopulated with:
src/main.rs
The main() function defines what is executed when your binary is run.
fn main() {
println!("Hello, world!");
}There are a few things going on in here:
- Functions are declared using the
fnkeyword - The
main()function is the entrypoint of the program (and required) - Blocks of code are delimted using curly braces (like R & C)
- Statements end with
; println!()is a macro (notice the!) which is used to print tostdout
When a program writes to the console it does so through file connections called standard output (stdout) and standard error (stderr).
When we print a message with print() or message() in R, we print to stdout. When we make a warning or error using stop() or warning() in R, that is writing to stderr.
Variables can only be defined inside of the main() function.
println!()
- Macros have a
!, likeprintln!(). - Think of it like
print()in R, but explicit. - It supports format strings:
Using placeholder
let name = "Josiah";
println!("Hello, {}!", name);Direct interpolation
let name = "Josiah";
println!("Hello, {name}!");Exercise
- In your terminal, create a new rust crate called
intro-to-rust - Open the new Rust crate’s folder in Positron
- Run the hello world program using
cargo run - Create a variable called
nameinside of themain()function with your name - Print
Hello, {name}!usingprintln!() - To run it navigate to your terminal and then enter
cargo run.
Solution
View solution
In src/main.rs
fn main() {
let name = "Josiah";
println!("Hello, {name}!");
}