Understanding Rust Error E0388


Rust Error E0388 is an error code that was previously emitted by the Rust compiler. Note that this error code is no longer emitted. The purpose of this article is to provide a detailed explanation of the Rust Error E0388 and help programmers understand the associated concepts and context.

Historical Context and Overview

In the past, Rust Error E0388 was emitted when an illegal assignment to a non-mutable variable or value was attempted. This was a violation of Rust's strict rules regarding immutability and borrowing, which are in place to ensure memory safety and prevent data races. Although this error code is no longer emitted, it is essential to understand the concepts of immutability and borrowing in Rust.

Immutability in Rust

In Rust, by default, variables are immutable, meaning their values cannot be changed once assigned. If you try to change the value of an immutable variable, you will receive a compile-time error. To declare a mutable variable, you should use the 'mut' keyword:

let mut my_variable = 10;
my_variable = 20;

Borrowing in Rust

Borrowing is a core concept in Rust that allows data to be safely shared among different parts of the code. When you borrow something in Rust, you are granting temporary access to the data without transferring ownership. There are two types of borrowing - mutable and immutable.

Immutable Borrowing

Immutable borrowing allows multiple parts of the code to read the data concurrently without modifying it. To create an immutable reference, you can use the '&' symbol, like this:

let my_variable = 10;
let reference_to_variable = &my_variable;

Mutable Borrowing

Mutable borrowing allows a single part of the code to modify the data, while no other parts can read or write to it simultaneously. To create a mutable reference, you can use the 'mut' keyword and the '&' symbol together:

let mut my_variable = 10;
let reference_to_variable = &mut my_variable;


Although Rust Error E0388 is no longer emitted by the compiler, understanding the concepts of immutability, borrowing, and the historical context of this error code is essential for Rust developers. It not only sheds light on how the language has evolved but also highlights the importance of Rust's strict rules for ensuring memory safety and preventing data races.