Hello World in Rust

Here's "Hello World" in Rust:

fn main() {
    println!("Hello, World!");
}

You can actually run that from the Playground. To run it locally, you actually need a full Rust project. The easy way to make this project is to open a terminal and type:

cargo new hello_world

By default, this even auto-generates the body of the "hello, world" program!

Cargo is Rust's swiss-army knife tool. It's a build system, a dependency manager, wraps a linter, can run unit tests and benchmarks --- it's also extendable. In this case, we're asking Cargo to make us a new project named hello_world.

Cargo creates the following structure:

hello_world/
hello_world/src/
hello_world/src/main.rs
hello_world/Cargo.toml
hello_world/.git
hello_world/.gitignore

If you don't want to create a Git project, add the flags --vcs none. If you are already inside a git project, it won't try and nest another one inside.

The Cargo.toml file represents the project manifest---outlining project metadata. It looks like this:

[package]
name = "hello_world"
version = "0.1.0"
edition = "2021"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
  • The package section represents meta-data about the "crate" itself (Rust packages things into crates, which are handled by Cargo).
    • name specifies the output name, and also the name by which the project is referenced if other projects link to it.
    • version is a semantic (major.minor.patch) version number.
    • edition specifies which editition of the Rust language the project uses. Every 3-4 years, a new edition is released. Previous editions continue to compile, and edition versions are the opportunity for the Rust Core teams to make changes to the base language. Things can/will be deprecated (and eventually removed), added, and syntax may change.
  • dependencies can be ignored for now. If you depend on other packages, they are listed here. We'll talk about that later.

So how do we compile our program?

cd hello_world
cargo build

The executable is now in hello_world/target/debug/hello_world (with a .exe on the end if you are in Windows).

Takeaways

  • You didn't include anything! Well you did, but by default parts of the Rust standard library are automatically included in the current scope.
  • Your binary was statically linked. The entire Rust standard library is in there! (That's why it's 4.3 Mb in a debug build on Linux, as opposed to 17k for C++ and C. It's quite large - 2-3 Mb - if you statically link the C or C++, too).
  • You didn't need any tools outside of the Rust ecosystem. Cargo took care of it all, and installing with rustup gave you the entire package.
  • Compilation was decently fast---you'd hope so for Hello World.

Let's talk a bit about syntax.