[Verse 1]
In Rust we start with variables, the building blocks we need
First declare with let keyword, that's how we plant the seed
By default they're immutable, they cannot change their face
But add the word "mut" after let, and change becomes their grace
[Chorus]
Let it be, let it be immutable by design
Let mut be, let mut be when you need to reassign
Integer, boolean, floating point and string
These are the types that make your Rust code sing
[Verse 2]
When you create a binding, you're giving data a name
Like storing thirty-two in age, it's Rust's memory game
The compiler infers the type, or you can specify
Add colon and the type name, no need to wonder why
[Chorus]
Let it be, let it be immutable by design
Let mut be, let mut be when you need to reassign
Integer, boolean, floating point and string
These are the types that make your Rust code sing
[Verse 3]
Integers come in many sizes, eight to sixty-four
Signed or unsigned flavors, pick what you're coding for
Booleans are true or false, as simple as can be
Floating point for decimals, precise as you can see
[Bridge]
String slice or owned String, text data has two ways
Characters in UTF-eight, through Rust's memory maze
Shadowing lets you reuse names with different types inside
Same name, different meaning, let Rust be your guide
[Chorus]
Let it be, let it be immutable by design
Let mut be, let mut be when you need to reassign
Integer, boolean, floating point and string
These are the types that make your Rust code sing
[Outro]
From let to mut to basic types, you've learned the Rust foundation
Variables are your building blocks for any application