Если коротко, ты можешь использовать значения только один раз.
Связано это с тем, что например в этом примере у нас строка.
Как ее передавать куда-то?
1) Алоцировать новую память, копировать все байты строки и радоваться жизни.
2) Просто взять указатель на строку и теперь, когда мы будем копировать строку где либо, она будет копироваться вообще везде. Начинающий гофер хомячок програмист этого не знает и баги потом получаются очень веселые.
Как решили в Расте?
Они ввели идею "владения" и "заимстования".
То есть когда ты владеешь одной строкой, и кому-то ее передаешь, ты уже ей не владеешь, а значит переменная становится невалидной.
Если ты явно указываешь, что ты заимствуешь эту переменную, то хорошо, но тогда ты уже не можешь ее менять.
Если ты таки хочешь ее менять, то ты заимствуешь мутабельную ссылку, но тогда это может делать только один обьект.
Ну а мем о том, что s1 обьявила строку, s2 ее взял и s1 больше не владеет строкой, а ты хочешь ее запринтить, это ошибка.