let mut a =  vec!(스트링, 스트링, 스트링);
let b = &mut a[0];
b.push_str(~~);
let c = &mut a[1];
c.push str(~~);

여기까지 문제 없음.
println!으로 확인해봐도 아무 문제가 없고, 독립적으로 작용함.
애초에 index_mut 의 작용을 생각해보았을때에도 b랑 c 사이에는 아무 문제가 없음.

각각이 첫번째 스트링과 두번째 스트링에 대한 참조를 직접 가져가니까...



근데 여기에서 struct같은 경우에는 분명히

뒤에다가

let d = &a; 를 추가하면 공간적인 개념?을 염두에 두어서인지 에러가 발생.

난 당연히 벡터도 안될줄알았는데

벡터는

let d = &a; 정상적으로 사용 가능하네.


내가보기에 이거 메모리 경쟁상태인데, 러스트가 체크를 안해주는 부분인거같음.


이것도 라이프타임처럼 무언가 컴파일러에게 경쟁상태를 정의해줄수 있는 무언가가 필요하지 않음??




글구 지금 이 관점에서 앞의 질문을 다시 생각해보니까,

예외였던것은 struct 고, struct만 신기하게 필드의 참조자랑 구조체 전체의 참조자가 연관되어있고,

원래 공간적인 경쟁상태는 러스트가 체크 안해준다고 보는게 맞을듯.



그리고 슬라이스의 경우에 범위를 다르게 지정한 두개의 슬라이스에 대한 참조가, 같은 슬라이스에 대한 참조로 취급했던것은,

슬라이스가 DST 데이터라서
&something[..4] 랑 &something[4..] 둘다 그냥 something 이라는 str 에 대한 참조로 여겨지나봄. something[..4] 라는 데이터가 따로 존재하는 개념이 아니라서 그런가봄.