Skip to content
Free public beta until December 4, 2026: every course is open, no card needed. After that, the first chapter of each course stays free and full access is a one-time $39 ($19 for up to 100 founding members chosen for helpful feedback). Your progress is kept. How the beta works

Glossary

Every defined term in this course, A–Z.

Pass an error back to the caller, or keep the value and continue.

The machine-level rules for how functions pass arguments and lay out data.

The number that says where a byte is in memory.

The rule that a value must start at an address divisible by some number.

Asking for a piece of heap memory.

anti-pattern

Read the section →

A common habit that looks reasonable but causes problems later.

A crate with one catch-all error type for applications.

A value you pass to a function when you call it.

A fixed number of values of one type, side by side.

A check that panics if something isn't true.

associated constant

Read the section →

A constant that belongs to a type or trait.

associated function

Read the section →

A function inside impl that isn't called on a value, like String::new.

associated type

Read the section →

A type a trait lets each implementation choose, like Iterator's Item.

async runtime

Read the section →

The library that runs async tasks: it polls futures and wakes them when their I/O is ready.

A future handed to the runtime to run on its own, like a very light thread.

asynchronous programming

Read the section →

Writing code that can wait for many slow things at once without a thread for each.

atomic replace

Read the section →

Writing a new file and then renaming it over the old one, so readers never see a half-written file.

atomic type

Read the section →

A number the hardware can update in one indivisible step, safely from many threads.

A note to the compiler written #[...], such as #[test].

authentication

Read the section →

Checking who someone is.

authorization

Read the section →

Checking what someone is allowed to do.

auto-referencing

Read the section →

At a method call, Rust adds the & or &mut the receiver needs.

The list of function calls that led to a panic.

binary crate

Read the section →

A crate that builds a program you can run; it has a main function.

binary format

Read the section →

A way of storing data as compact bytes instead of readable text.

A collection that always gives you its largest item first.

The link between a name and a value.

One on-off switch, written 0 or 1.

blanket implementation

Read the section →

One impl that covers every type meeting a bound.

Code between { and }, whose last expression is its value.

borrow checker

Read the section →

The part of the compiler that enforces the borrowing rules.

breaking change

Read the section →

A change to a library that can stop code that uses it from compiling or working.

A marker that pauses the program at a line so you can look around.

A map that keeps its keys in sorted order.

A set that keeps its values in sorted order.

buffered I/O

Read the section →

Reading or writing in big chunks through a memory buffer instead of one small system request at a time.

build profile

Read the section →

Debug (fast to build, checked) or release (optimized) settings for a build.

build script

Read the section →

A Rust program Cargo runs before compiling your crate, to generate code or find native libraries.

builder pattern

Read the section →

Building a complicated value step by step with chained method calls, then finishing it.

cancel safety

Read the section →

Whether stopping a future halfway can lose data or leave things half-done.

How much space a String or Vec has reserved, used or not.

capture mode

Read the section →

How a closure holds a variable it uses: by borrowing it, borrowing it mutably, or taking it.

Rust's build tool and package manager.

cargo check

Read the section →

Checks the code for errors without building a program.

Cargo feature

Read the section →

An optional part of a crate that you switch on in Cargo.toml.

The file recording the exact dependency versions a build used.

The file that describes a Cargo project and its dependencies.

Converting a number to another type with as.

One Unicode character, four bytes wide.

char boundary

Read the section →

A byte position where one character ends and the next begins.

child process

Read the section →

A program started by another program, which waits for it or talks to it.

A tool that points out likely mistakes and clumsy code.

An explicit deep copy of a value.

A small unnamed function you can write inline and store in a variable.

A note in the source that the compiler ignores.

One saved snapshot of a repository, with a message.

A program that translates source code into a program the computer can run.

An optional part of a toolchain, like rustfmt or Clippy.

concurrency

Read the section →

Making progress on several jobs over the same period, taking turns if needed.

condition variable

Read the section →

A way for a thread to sleep until another thread says something has changed.

conditional compilation

Read the section →

Choosing which code to compile for each target, with #[cfg], cfg! and cfg_select!.

configuration precedence

Read the section →

The order that decides which setting wins when a file, an environment variable, and a flag disagree.

connection pool

Read the section →

A set of open database connections that requests borrow and give back.

const generics

Read the section →

Generics over a value, like an array's length, instead of a type.

A named value fixed when the program is compiled.

constructor

Read the section →

A function that builds and returns a new value of a type.

A method that runs an iterator to the end (or until it has an answer) and returns a result.

container image

Read the section →

A packaged filesystem with a program and everything it needs, that runs the same anywhere.

continuous integration

Read the section →

Automatically checking every change with builds and tests before it is merged.

Types whose values are copied, not moved, on assignment.

The browser rule that decides which other websites may call your API from their pages.

Small fast memory next to the processor; reading nearby data is much faster than far-away data.

A unit of Rust code the compiler builds at once: a program or a library.

The file the compiler starts from when building a crate: src/main.rs or src/lib.rs.

The public site where Rust libraries are published.

cross-compilation

Read the section →

Building a program on one kind of machine for another kind.

dangling reference

Read the section →

A reference to something that no longer exists.

data parallelism

Read the section →

Doing the same work on many pieces of data at once, on several CPU cores.

Two accesses to the same data at once, at least one writing, with nothing coordinating them.

database migration

Read the section →

A numbered script that changes the database's structure, applied once and in order.

database transaction

Read the section →

A group of changes that either all happen or none do.

Two programs or threads each waiting for the other, forever.

Debug formatting

Read the section →

The programmer-facing way to print a value, with {:?}.

A program that runs yours and can pause it at a line so you can look around.

declarative macro

Read the section →

A macro written as patterns that expand into code.

default method

Read the section →

A trait method with a body that implementors get for free.

Another crate your project uses.

dependency injection

Read the section →

Handing a component the things it depends on, instead of letting it create them itself.

dereference

Read the section →

Following a reference to the value it points to.

Asking the compiler to write standard behavior for a type.

The clean-up code that runs when a value is dropped.

destructuring

Read the section →

Taking a value apart into its pieces with a pattern.

A message from the compiler: an error, warning, note, or help.

The system that turns names like example.com into IP addresses.

doc comment

Read the section →

A /// comment that becomes documentation.

Example code in a doc comment that cargo test runs.

double free

Read the section →

Giving the same memory back twice.

What happens to a value when its owner goes away: it is cleaned up.

dyn compatible

Read the section →

A trait simple enough to be used as a trait object.

dynamic dispatch

Read the section →

Choosing which function to call while the program runs.

dynamically sized type

Read the section →

A type whose size is only known while the program runs, like str or [T].

A set of language rules a project opts into, like 2024.

edition migration

Read the section →

Moving a crate to a newer edition, mostly automatically.

HashMap's way to insert-or-update a key in one lookup.

A type whose value is one of several named variants.

enum representation

Read the section →

How an enum's variant name is recorded in serialized data.

environment variable

Read the section →

A named setting the operating system hands to every program it starts, like PATH.

error chain

Read the section →

The list of errors from what went wrong down to why.

A code like E0382 that names a kind of compile error.

error context

Read the section →

A message added to an error to say what the program was doing.

An enum with one variant per way an operation can fail.

error propagation

Read the section →

Handing an error up to the function that called you.

Error trait

Read the section →

The standard trait that marks a type as an error.

A file your operating system can start as a program.

Covering every possible case.

exit status

Read the section →

The number a program hands back when it ends; 0 means success.

Code that produces a value.

A handler argument that pulls one piece of data out of the request, like the path or the JSON body.

fat pointer

Read the section →

A pointer that carries a second word of information, like a length or a vtable.

One named value inside a struct.

file descriptor

Read the section →

The small number the kernel gives a program for an open file or pipe.

file metadata

Read the section →

Information about a file rather than its contents: size, times, type, permissions.

file permissions

Read the section →

Who may read, write, or run a file, as the operating system records it.

flame graph

Read the section →

A picture of where a program spent its time, with wide bars for costly functions.

floating-point number

Read the section →

A number with a fractional part, stored approximately.

The three traits that say how often a closure can be called and what it may do to its captures.

foreign function interface

Read the section →

The way code in one language calls functions written in another.

format string

Read the section →

The {} pattern that says how println! and format! show values.

fragment specifier

Read the section →

The part of a macro pattern that says what kind of code a variable matches, like expr or ident.

From and Into

Read the section →

Conversions that can never lose information.

A named block of code you can call with arguments.

function pointer

Read the section →

A value that points to a named function, written with the type fn(i32) -> i32.

Future trait

Read the section →

The trait for a value that will be ready later; async functions return one.

Throwing huge numbers of random, broken inputs at code to find crashes.

garbage collector

Read the section →

A runtime system that frees memory nobody uses any more.

generic associated type

Read the section →

An associated type that takes its own type or lifetime parameters.

generic trait

Read the section →

A trait with a type parameter, so a type can implement it several times.

Code written once for many types, with the type left as a parameter.

graceful shutdown

Read the section →

Stopping a server by finishing the requests already in progress instead of cutting them off.

grapheme cluster

Read the section →

What a reader sees as one character, which may be several chars.

hardware abstraction layer

Read the section →

A library that gives the same programming interface to different chips' hardware.

hash function

Read the section →

A recipe that turns a key into a number used to find its slot quickly.

A collection that looks values up by key.

A collection of unique values with fast membership tests.

health check

Read the section →

A small endpoint that tells an orchestrator whether the service is alive and ready.

Memory for data whose size or lifetime isn't fixed in advance.

higher-ranked trait bound

Read the section →

A bound that must hold for every lifetime, written for<'a>.

HTTP status code

Read the section →

The three-digit number in an HTTP response that says how the request went.

Running code only if a value matches one pattern.

The block where a type's methods are defined.

Shorthand for "some type that implements this trait."

The position of an element, counting from 0.

integer type

Read the section →

A type for whole numbers, like i32 or u8.

integration test

Read the section →

A test in the tests/ folder that uses your library the way another crate would.

interior mutability

Read the section →

Changing something through a shared reference, with the safety check done a different way.

IntoIterator

Read the section →

The trait that turns a value into an iterator; for loops call it.

The number that identifies a machine on a network.

A value that hands out items one at a time, like a Vec's elements.

iterator adapter

Read the section →

A method that wraps an iterator to change what it produces, like map or filter.

Iterator trait

Read the section →

The trait with one required method, next, that every iterator implements.

language server

Read the section →

A program an editor runs to understand your code as you type.

lazy initialization

Read the section →

Creating a value the first time it's needed instead of at startup.

lazy iterator

Read the section →

An iterator does no work until something asks it for the next item.

lending iterator

Read the section →

An iterator-like type whose items borrow from the iterator itself, so only one can be held at a time.

Binding a pattern, or leaving the function if it doesn't match.

library crate

Read the section →

A crate meant to be called by other code, with src/lib.rs and no main.

The stretch of the program in which a reference is valid.

lifetime bound

Read the section →

A requirement that a type's references stay valid for at least a given lifetime.

lifetime elision

Read the section →

The rules that let you leave lifetime names out of most signatures.

lifetime parameter

Read the section →

A name like 'a in a signature that links how long references must stay valid.

The system tool that joins compiled machine code into one executable.

A check that warns about suspicious code that still compiles.

How seriously the compiler treats a lint: allow, warn, deny, or forbid.

The code generator rustc uses to produce machine code.

The value lock() returns; the lock stays held for as long as it exists.

lock ordering

Read the section →

Always taking several locks in the same agreed order, so two threads can't each hold what the other needs.

How important a log message is: error, warn, info, debug, or trace.

A name for a loop, so break or continue can pick which loop.

machine code

Read the section →

The numeric instructions a processor actually executes.

Code that writes code; its name ends with !, like println!.

macro hygiene

Read the section →

Variables a macro creates can't clash with variables at the place it's used.

marker type

Read the section →

An empty type used only as a label inside another type, like Km in Distance.

Choosing what to do by comparing a value against patterns.

match guard

Read the section →

An extra if condition on a match arm.

Where a running program keeps its values.

memory leak

Read the section →

Memory that is never given back.

memory ordering

Read the section →

The rule for which other memory changes a thread is guaranteed to see around an atomic operation.

memory-mapped file

Read the section →

A file the operating system shows to a program as if it were memory.

A function attached to a type, called with dot syntax.

Code that runs around every request, like logging or timeouts.

A tool that runs Rust code step by step and reports undefined behavior it finds.

A named section of a crate that groups related code and controls what is visible outside it.

monomorphization

Read the section →

The compiler making a separate copy of generic code for each type it is used with.

Handing a value's ownership to another variable or function.

move closure

Read the section →

A closure marked move, which takes ownership of every variable it uses.

mpsc channel

Read the section →

A queue for sending values from any number of threads to one receiving thread.

A small C standard library that lets Rust build fully static Linux programs.

Allowed to change after it is set.

mutable reference

Read the section →

A reference that lets you change the value it points to.

A lock that lets only one thread at a time use the data inside it.

name mangling

Read the section →

How the compiler renames functions to encode extra information, which C can't read.

The type of code that never finishes, like panic! or an endless loop.

A one-field tuple struct that gives a value its own type.

niche optimization

Read the section →

Using a value a type can never hold to store an enum's tag for free.

Rust code that runs without the operating-system parts of the standard library.

non_exhaustive

Read the section →

An attribute that says more variants or fields may be added later, so adding them isn't a breaking change.

opaque handle

Read the section →

A pointer the other side may pass around but never look inside.

opaque type

Read the section →

A return type the caller knows only by the traits it implements.

OpenTelemetry

Read the section →

A standard for collecting traces, metrics, and logs across services.

operator overloading

Read the section →

Making +, ==, or [] work for your own types.

A value that might be missing: Some(value) or None.

optional dependency

Read the section →

A dependency that is only built when a feature asks for it.

A library that maps database rows to objects and writes the SQL for you.

orphan rule

Read the section →

You may implement a trait for a type only if the trait or the type is yours.

Text as the operating system stores it, which may not be valid UTF-8.

When a calculation's result is too big for its type.

Which variable is responsible for a value and cleaning it up.

A Cargo project: a Cargo.toml plus its source files.

Unused bytes the compiler adds so fields line up.

When a program stops because something went wrong it can't recover from.

parallelism

Read the section →

Doing several things at the very same instant, on different CPU cores.

A value a function receives when it is called.

Turning text into a value such as a number.

partial move

Read the section →

Moving one field out of a value, leaving the rest.

password hashing

Read the section →

Storing a password as a slow, salted fingerprint instead of the password itself.

The address of a file or folder.

path separator

Read the section →

The character between folder names in a path: / on macOS and Linux, \ on Windows.

PATH variable

Read the section →

The list of folders a terminal searches for a command you type.

A shape a value is compared against, like 1..=9 or _.

PhantomData

Read the section →

A zero-size field that tells the compiler a type uses a type parameter it doesn't store.

pinned future

Read the section →

A future that is promised it won't be moved in memory again, so it can safely point into itself.

port number

Read the section →

A number from 0 to 65535 that picks which program on a machine gets a network message.

The names every Rust file can use without importing them.

prepared statement

Read the section →

A query sent with placeholders, with the values sent separately.

primary key

Read the section →

The column that uniquely identifies each row in a table.

priority queue

Read the section →

A queue where the most important item leaves first, not the oldest.

procedural macro

Read the section →

A Rust function that runs at compile time and writes code.

A tool that measures where a running program spends its time or memory.

A set of instructions a computer can carry out.

property-based test

Read the section →

A test that checks a rule holds for hundreds of random inputs instead of a few chosen examples.

query builder

Read the section →

A library that assembles SQL from Rust method calls, with values bound safely.

A span of numbers written a..b or a..=b.

raw pointer

Read the section →

A pointer with no borrow checking: it may be null, dangling, or aliased.

Making an item available from a second, usually shorter, path.

read-write lock

Read the section →

A lock that lets many readers in at once, or one writer alone.

Moving data to a bigger heap block.

The self parameter: how a method gets the value it is called on.

A function calling itself.

A way to use a value without taking ownership of it.

reference counting

Read the section →

Keeping a count of how many owners share a value and freeing it when the count reaches zero.

reference cycle

Read the section →

Values that point to each other with counted references, so none of them is ever freed.

refutable pattern

Read the section →

A pattern that might not match.

release channel

Read the section →

Stable, beta, or nightly: how finished the Rust you install is.

replacement character

Read the section →

The � symbol put in place of bytes that aren't valid UTF-8.

A folder whose history of snapshots Git keeps.

The outcome of something that can fail: Ok(value) or Err(error).

return type

Read the section →

The type of value a function gives back.

ring buffer

Read the section →

A fixed block of memory used in a circle, so the front can move without shifting anything.

Rust Playground

Read the section →

A website that compiles and runs small Rust programs for you.

rust-analyzer

Read the section →

The program that gives editors Rust errors, completion, and navigation.

rust-version

Read the section →

The oldest Rust release a project promises to build with.

The Rust compiler.

Rust's tool that turns doc comments into HTML pages.

The tool that formats Rust code in the standard style.

The installer and version manager for Rust.

safety contract

Read the section →

The conditions a caller must guarantee before calling an unsafe function.

The part of the program where a name can be used.

sealed trait

Read the section →

A public trait that other crates can use but not implement.

semantic versioning

Read the section →

A version numbering scheme where the number says whether an update can break your code.

Send and Sync

Read the section →

The two marker traits that say whether a type may be moved to, or shared with, another thread.

serde attribute

Read the section →

An #[serde(...)] line that changes how a type or field is written and read.

serialization

Read the section →

Turning a value into text or bytes to store or send it, and back again.

Declaring a new variable with the same name as an old one.

A function's name, parameters, and return type.

A view of part of an array, Vec, or String.

smart constructor

Read the section →

A constructor that checks its input and refuses to build an invalid value.

smart pointer

Read the section →

A type that acts like a reference but also owns or manages what it points to.

software supply chain

Read the section →

All the code from other people that ends up in your program through its dependencies.

The guarantee that no safe code can use an API to cause undefined behavior.

source code

Read the section →

The text of a program as a person writes it.

SQL injection

Read the section →

An attack where user input is pasted into a query and changes what the query does.

Combining rows from two tables that match on a column.

stable sort

Read the section →

A sort that keeps equal items in their original order.

Memory for a function's local variables, freed when it returns.

stack frame

Read the section →

One function call's space on the stack.

stack overflow

Read the section →

Using more stack than the program has.

standard error

Read the section →

A program's second output stream, for problems.

standard input

Read the section →

The text typed into a running program.

standard library

Read the section →

The library of basic types and tools every Rust program gets.

A thread that never gets its turn, even though the program as a whole keeps running.

Code that does something but produces no value.

A value stored at one fixed place for the whole run.

static dispatch

Read the section →

Choosing which function to call at compile time.

static lifetime

Read the section →

A reference that is valid for the whole run of the program, like a string literal.

static linking

Read the section →

Putting library code into the program file itself, instead of loading it from the system when the program starts.

Growable text the program owns.

string literal

Read the section →

Text written in quotes in your code.

A named type grouping named fields.

struct update syntax

Read the section →

Building a struct from another with ..other; unlisted fields are moved or copied from it.

structured concurrency

Read the section →

Making sure every task a function starts is finished or cancelled before the function returns.

structured logging

Read the section →

Logging named fields a machine can search, not just sentences.

A trait that must already be implemented before another one can be.

system call

Read the section →

A request a program makes to the operating system, such as "open this file".

tail expression

Read the section →

A block's last expression, with no semicolon, which becomes its value.

target directory

Read the section →

Where Cargo puts everything it builds.

target triple

Read the section →

The name of the machine a build is for, like x86_64-pc-windows-msvc.

A connection that delivers bytes reliably and in order between two programs.

temporary value

Read the section →

A value made in the middle of an expression that is dropped at the end of the statement.

A text window where you type commands and read their output.

A function that checks other code and fails if it's wrong.

test double

Read the section →

A stand-in for a real dependency, used so a test can run without it.

test fixture

Read the section →

The data or setup a test needs before it runs, like a temporary folder with files in it.

A crate that writes the Error and Display boilerplate for your error types.

The encryption layer that keeps a connection private and proves the server is who it claims to be.

One installed version of the Rust tools.

tracing span

Read the section →

A named stretch of work, like one request, that log events are attached to.

A named set of abilities a type can have, like Debug or Clone.

trait bound

Read the section →

A requirement that a type parameter support some trait.

trait object

Read the section →

A value used only through a trait, whatever its real type.

Conversions that report failure instead of losing data.

A real terminal window a person is looking at, rather than a file or another program.

A fixed group of values of possibly different types.

tuple struct

Read the section →

A struct whose fields have positions instead of names.

The ::<Type> that names a type after a name, as in parse::().

The kind of value something is, like i32 or String.

A second, shorter name for an existing type, written with the type keyword.

type annotation

Read the section →

A colon and a type written after a name, like : bool.

type erasure

Read the section →

Hiding a value's real type behind a trait.

type inference

Read the section →

The compiler working out a type you didn't write.

Using types to make illegal state changes fail to compile.

typosquatting

Read the section →

Publishing a harmful package under a name one typo away from a popular one.

Sending single messages that may be lost, duplicated, or arrive out of order, with no connection.

undefined behavior

Read the section →

Code whose result the language doesn't promise.

Unicode scalar value

Read the section →

The number Unicode gives one character.

The empty value (), meaning "nothing to report".

Unix signal

Read the section →

A short message the operating system sends a running program, like "stop" when you press Ctrl-C.

unsafe block

Read the section →

A block of code where you take on proving some memory rules yourself.

What a panic does on the way out, dropping every frame's values.

Take the value out of an Option or Result, panicking if there isn't one.

use after free

Read the section →

Using memory after it has been given back.

use declaration

Read the section →

A line that brings a name into scope so you can write it without its full path.

A text encoding that uses 2 or 4 bytes per character, used by Windows, Java, C#, and JavaScript.

The way Rust stores text: each character takes 1 to 4 bytes.

A name bound to a value.

Whether a longer-lived type can stand in for a shorter-lived one inside a bigger type.

One of the possible forms of an enum.

A queue you can push to and pop from at both ends quickly.

version requirement

Read the section →

The version range a Cargo.toml line allows, like "1.4" meaning 1.4.0 up to (not including) 2.0.0.

Who is allowed to use an item: only its own module, the whole crate, or anyone.

A table of function pointers a trait object uses to find its methods.

A compiler message about code that compiles but looks wrong.

wasm-bindgen

Read the section →

The tool that generates the glue between Rust compiled to Wasm and JavaScript.

weak reference

Read the section →

A pointer to a shared value that doesn't keep the value alive.

WebAssembly

Read the section →

A compact, portable program format that browsers and other hosts can run safely.

A connection that stays open so a server and a browser can both send messages at any time.

where clause

Read the section →

A tidy place after a signature to list trait bounds.

The pattern _, which matches anything.

working directory

Read the section →

The folder a terminal command runs in.

A set of crates built together that share one Cargo.lock and one target folder.

Marking a published crate version so new projects won't pick it, without deleting it.

zero-cost abstraction

Read the section →

A convenience that compiles to code as fast as writing it out by hand.

zero-sized type

Read the section →

A type whose values take 0 bytes, like a unit struct.