Skip to content
FreeType

Rust typing test

Borrows, lifetimes, and the punctuation-dense ownership model.

0 wpm100% acc0sstart typing…
double.rs
fn double(x: i32) -> i32 { x * 2 }

Characters that slow you down in Rust

  • &Shift-7 for borrows; mutable borrows make it a constant prefix.
  • ::Path separator, doubled and shifted, on every use statement.
  • 'Lifetimes put an apostrophe directly in front of an identifier.
  • ->Return types on nearly every signature.
  • =>Match arms, several per expression.

The ampersand becomes a prefix

In most languages the ampersand is occasional. In Rust it prefixes arguments, types and expressions constantly. It is shift-7, a left-hand number-row reach, and it arrives immediately before an identifier so there is no pause to recover in.

The mutable-borrow prefix is worth drilling as a single unit. It is five keystrokes including the space, it appears everywhere, and typing it as one gesture rather than four decisions makes a noticeable difference.

Lifetimes use a character nothing else does

A lifetime annotation puts an apostrophe directly against a letter inside angle brackets. No other common language does this, so there is no transferable muscle memory — in prose the apostrophe is followed by a space or a letter, never opened and left unclosed.

Typists fluent in every other language still fumble lifetimes, and the reason is that the shape is unfamiliar rather than difficult. A few minutes of deliberate practice fixes it faster than most weak keys.

Match arms chain arrows

A match expression puts a fat arrow on every arm, often four or five in a row, separated by patterns full of capitalised variant names that each need a shift.

The rhythm of a match block is therefore shift-heavy and highly regular. It is excellent material for practising the opposite-hand shift habit, because the capitals arrive predictably rather than at random.

The question mark is doing real work

The try operator after a fallible call is idiomatic Rust, and it lands at the end of an expression right before a semicolon. That is shift-slash immediately followed by an unshifted semicolon on the same hand.

It is a small movement but a frequent one, and getting it wrong produces a compile error rather than a silent bug. Practising that closing tail is worth as much as any single character in the language.

Frequently asked questions

Why is Rust harder to type than other languages?
Punctuation carries meaning that other languages express in words. Borrows, lifetimes, paths and the try operator all add symbols, so a Rust line has more distinct characters than an equivalent line elsewhere.
What is the hardest part of typing Rust?
Lifetimes. Placing an apostrophe against a letter inside angle brackets is a shape that appears in no other common language, so there is no existing muscle memory to draw on.
Which Rust sequences are worth drilling?
The mutable-borrow prefix, the try-operator tail before a semicolon, and the path separator in use statements. All three are frequent enough that treating them as single gestures pays back quickly.

Practise by level

Related reading

We stand with Palestine.