Scratchpad

SOURCE CODE

CODE RUNNER

Step By Step

Step By Step Test

This is the first prototype of the viewer. Next step is to highlight lines that changed.


NOTE: These are in reverse order of how they were created so I don't have to keep scrolling down

TODO: Come up with the list of things you can do for references:

immutable - immutable mutable - immutable mutable - mutable

and that you can't do

immutable - mutable

Immutable -> Immutable

fn main() {
  let alfa = String::from("apple");
  widget(&alfa);
  println!("alfa is {alfa}")
}

fn widget(value: &String) {
  println!("widget got {value}")
}

Mutable -> Mutable

fn main() {
  let mut alfa = String::from("apple");
  widget(&mut alfa);
  println!("alfa is {alfa}");
}

fn widget(value: &mut String) {
  value.push_str("-pie")
}

Mutable -> Immutable

fn main() {
  let mut alfa = String::from("apple");
  widget(&alfa);
  println!("alfa is {alfa}")
}

fn widget(value: &String) {
  println!("widget got {value}")
}

Immutable -> Mutable (will crash)

fn main() {
  let alfa = String::from("apple");
  widget(&mut alfa);
}

fn widget(value: &mut String) {
  println!("widget got {value}")
}

This crashes as expected because it's not a reference

fn main() {
  let alfa = String::from("apple");
  widget(alfa);
  println!("alfa is {alfa}")
}

fn widget(value: String) {
  println!("widget got {value}")
}

Other situaltions:

combinging mutalbe and immutable references.