오늘 들은 답변중에서,
(1) 미사용 참조자의 수명이 스코프를 벗어나기 이전에 끝났다
라는 힌트랑
(2) 수명에 의해 관리되는것이 맞다
라는 힌트가 주요했음.
내가 안그래도 라이프타임이 헷갈리긴 해서
공간적인 참조자 얽힘이 혹시 라이프타임과 관련된거냐고 물어봤는데, 실제로 내 라이프타임에 대한 이해도 부족에서 오는 의문점이었음.
위 코드의 에러메세지가 두개가 나오는데,
a에 mut 참조가 두번일어났다 + b에 mut 참조가 두번일어났다
혹시 라이프타임 헷갈리는 사람있으면, 이 예시를 보면 도움이 될 수도 있을듯.
Vec 과 struct 모두 라이프타임 때문에 부분참조와 전체참조가 충돌을 일으키는게 맞았음.
또, 참조규칙에 대해서 한가지만 더 논하자면,
위 코드에서 c.push_str부분을 c만 d로 바꾸면 에러가 발생하지 않는데,
참조자의 수명은, 스코프가 끝날때 까지가 아닌듯. 마지막 사용처를 컴파일러가 알아보고 해당 영역까지로 수명을 똑똑하게 정해주는듯.
1. 왜 mut 참조는 여러개가 안 되는지? 2. 에러메시지는 몇번째 라인에서 생기는지? 3. Vec랑 struct를 따로 생각하는 이유가 뭔지? 4. 마지막 사용처라고 했는데 let x = &mut a;를 만들고 x를 test에 넣으면 어떻게 되는지?
왜이리 공격적이신지 모르겠는데 13은 질문이 별로라고생각하고 2는 d 에서 새 참조 등장하면서고, 4는 함수의 반환에서 x랑 충돌일으켜서 문제생기겠죠. 4상황만 테스트해보면 이해 제대로됐는지 확인할수있을듯.
질문이 별로인 이유를 말해줘봐
근데 이거 4번 좀 신기하네. c가 move될줄알았는데 readable함. 어렵네
아 c가 아니라 x
에휴 됐다 애매하게 적어놔서 물어봤더만 공격이라고 취급하는 사람한테 더 말해봤자 무의미하다
mut 참조자를 인수로 전달해주는 상황에 대해서 생각해봐야겠네... mut 참조자가 메소드를 계속 호출하는것만 생각해보더라도 move 방식으로 전달되지 않겠군요
혹시 4번상황이 mut 참조자 중 하나가 read전용으로 바뀌고 두개의 mut참조자가 살아있는 경우라서 1번질문 하신거면 ㅇㅈ. 난 그냥 갑자기 난데없이 교과서적인 질문하는건줄알음
ㅅㅂ 교과서 ㅋㅋㅋㅋ 남얘기 주의깊게 안듣고 혼자 주절주절 떠들꺼면 내 댓글에 답글달지마라
지금 보이기로는, mut 참조자는 move 대신 borrow 로 가져가고, 라이프타임의 작동원리는 return하는 참조자가 살아있는동안, parametur의 참조자를 살려두어서, 댕글링포인터가 parameter쪽 참조자에서 검증 가능하도록 한거같다
님이 공격적인건 못알아채는게 호구임
암튼 님 4번질문덕분에 알게된건 많아서 ㄱㅅ. 님 의도는 뭐였을진 몰라도
님이 저지능 잼민이라 질문글만 보면 공격으로 발작하는걸 호구 ㅇㅈㄹ ㅋㅋㅋㅋ
내가 저지능이라고 생각해서 님이 발작하는건지, 저지능이라고 믿고싶어서 뭐 하나 저지능이라는 증거 잡아내려고 발작하는건지 생각해보시고, 진짜 지능배틀뜨고싶으신거면 현실에서 찾아와보셈
근데 4번질문은 ㄹㅇ 명질문이었음. 이거 하나로 엄청 clear해진게 많음
아니 그래서 Vec이랑 struct랑 따로 생각하는 이유는? 진짜 차이가 있는지 아니면 뇌피셜로 Vec랑 struct랑 적용되는 규칙이 다르다고 착각했던건지?
ㅇㅇㅇ 뇌피셜로 진짜 다르다고 생각했었지. 라이프타임이 빌트인으로 깔려있는질 몰랐고, 참조자간에 상관관계를 정의하는 다른 무언가가 없다고 알고있으니까, 특수한 규칙같은걸로 생각했었음 진짜로 라이프타임을 1도 몰라서 struct규칙도 예외로 여기고, Vec도 예외로 여기고, 둘이 다르다고 여겼던거
진짜 어이터진다 내가 모르는 Vec와 struct의 차이가 있나해서 물어본건데 공격에 질문이 별로 ㅋㅋㅋㅋ 결국 뇌피셜이었네 하
님이 저지능이 아니라면 지금 그 말이랑 3번질문이 대답할 가치가 없었다는거랑 어떻게 연결되는건지 생각해보셈. 글구 난 솔직히 님한테 배울건 좀 있어보여서 계속 이야기중인데, 싸울 이유가 전혀 없기도하고 계속 댓 길어지면 남들이 보기에도 안좋으니 여기서 끝낼게. 걍 내 잘못맞으니 ㅇㅇ
그래서 공간적인 참조자 얽힘은 도대체 무슨 의미야? 영어단어 직역한거야? 아니면 어떤 상황이었는지 묘사할 수 있어? 네가 저지능이라 이해를 못하겠네
라이프타임으로 두 참조자를 엮어줘야하는 이유임. 걍 무시해도 됨. 애초에 라이프타임으로 충돌 막으려는게 메모리고 메모리가 공간적인 개념인데. 글구, 윗 댓에서도 고쳐야할게 좀 있는데, 이거 고치는 이유는 그냥 누군가가 나땜에 혼란생기지말란거고 &mut 타입은 인수로 전달될때 borrow로 전달되는것까진 ㅇㅋ인데, 파라미터가 살아있는건 틀렸음
parameter로 전달된 borrow값이 함수 종료이후에도 남아있는건 아니란뜻. 해당 파라미터를 그대로 반환했으니, return값이 남아서 x의 borrow를 계속 이어가는것
그니까 니가 새로 만든 단어란거지?
ㅇㅇㅇㅇㅇ 새로만든단어라고 해도 맞는데 사실상 이해도 부족에서 나오는 헛소리 ㅋㅋㅋ
라이프타임을 쓰는 이유가 같은 메모리를 참조하는 참조자 (내가 공간적인 이유라고 헛소리한거) 때문인건데, 라이프타임을 제대로 이해를 못해서 공간적인 이유니 뭐니 그랬던거
그니까 저 단어도 출처는 없는 뇌피셜이네 씹
그리고 공간적인 참조적 얽힘은 도대체 무슨 의미인지?
공간적인 참조자 얽힘
공간적인 참조자 얽힘은 도대체 무슨 의미인지?
공간적인 참조자 얽힘은 뭔지 설명안해줄꺼야? 어떤 용어를 직역한거라던가 무슨 상황인지?