그냥 듣기론 소유권이 이동하는 언어라고 들었는데
정확히는 복사가 공짜가 아닌 애들 얘기더라
다시 말해서 정수형 같은 기본 자료형은 해당 없고
아무튼 이건 객체 복사가 왜 그냥 안 되는지를 이해해야
뭘 좀 제대로 받아들일 수 있는 개념같아
그리고
var s={var k=String::from("aaa"); k};
주딱이 한번 올렸지만
반환되어 이동된 애들은 스코프가 끝나도 객체 자체는 살아있는데(죽는 식별자가 쥔 메모리가 죽는건데 주고 죽었으니깐)
이건 능지나 멘탈 파탄난 상황에선 오해할 수도 있지 않을까 싶었음
추가:
loop랑 while true가 다르다는데 잘 이해 안감
정확히는 복사가 공짜가 아닌 애들 얘기더라
다시 말해서 정수형 같은 기본 자료형은 해당 없고
아무튼 이건 객체 복사가 왜 그냥 안 되는지를 이해해야
뭘 좀 제대로 받아들일 수 있는 개념같아
그리고
var s={var k=String::from("aaa"); k};
주딱이 한번 올렸지만
반환되어 이동된 애들은 스코프가 끝나도 객체 자체는 살아있는데(죽는 식별자가 쥔 메모리가 죽는건데 주고 죽었으니깐)
이건 능지나 멘탈 파탄난 상황에선 오해할 수도 있지 않을까 싶었음
추가:
loop랑 while true가 다르다는데 잘 이해 안감
소유권 이동이라 해봐야 move가 기본이고 복사는 항상 명시적으로 일어난다고만 알면됨
loop는 항상 무한루프니까 break로 값을 전달 가능함 while은 불가능
while if break 안돼?
loop 말고는 값을 못넣음
https://doc.rust-lang.org/reference/expressions/loop-expr.html#break-and-loop-values
TMI로 break 없는 loop 문은 ! 타입으로 취급돼서 모든 타입으로 변환가능함 let foo: <아무타입> = loop {}; 이런거 가능
그니깐 반복 관점에서가 아니고 반환 관점에서 다르다는 거네 TMI는 컴파일러가 안 잡고 런타임에 무한루프 빠진다는 거지?
TMI는 그냥 사족이란 뜻이구 저게 유용할때가 종종 있음
서버짤때 fn main_loop() -> Result<()> 해두고 loop 하나 박아둔다던가 ㅇㅇ
반대로 break 있을때만 허용해주면 유연하게 못바꾸니까 엄청 불편하니까 굳이 금지할 이유가 없으면 허용해줘야지 그리고 프로세스 종료외는 유일하게 !타입 만들수있는 방법이라 no_std같은거 할때 placeholder로 종종 쓰임
!타입이 머에요?
never라고 읽는데 절대 초기화 될수 없는 타입이라서 모든 타입으로 암시적으로 변환될수있음 타입스크립트에도 있다
ㅎㄷㄷ