위 어셈은 a랑 b가 다르다는 보장이 있어서 가능한 최적화임
저번에 memcpy memmove 예시도 들었는데 &mut가 유일한 참조라던가 Sync는 동시에 접근해도 안전하던가
이런 안전 정보를 적극 활용해서 최적화를 하기 때문에 unsafe 쓴다고 C/C++ 감각으로 할수 있는게 아니라
어디까지나 safe한 코드를 짜되 이게 안전하다는건 컴파일러 대신 코드 작성자가 책임을 져야함
위 어셈은 a랑 b가 다르다는 보장이 있어서 가능한 최적화임
저번에 memcpy memmove 예시도 들었는데 &mut가 유일한 참조라던가 Sync는 동시에 접근해도 안전하던가
이런 안전 정보를 적극 활용해서 최적화를 하기 때문에 unsafe 쓴다고 C/C++ 감각으로 할수 있는게 아니라
어디까지나 safe한 코드를 짜되 이게 안전하다는건 컴파일러 대신 코드 작성자가 책임을 져야함
근데 unsafe rust 안 쓰고 컴파일러의 borrow checker 같은 안전 확인 다 통과하면 undefined behavior가 생길 수 없다는게 증명된거야? 아니면 그냥 통계와 느낌임?
규칙을 따르지 않는것이 UB기 때문에 따르는 코드에서 UB가 없다는건 정의상 확실함 다만 밑바닥에서 쓰이는 unsafe 코드들과 컴파일러 검사기들은 모두 사람이 만드는것이니만큼 실수가 있을수 있고 그러면 UB가 발생하는데 다른 unsafe 언어와 차이점은 그것이 1%미만의 unsafe 블록안에 격리돼있다는거임
아 그런거구나 ㄱㅅㄱㅅ
그쪽보다는 사람이 간섭하는 범위가 넓긴한데 C#에서도 만에하나 GC 코딩실수가 있으면 use-after-free같은게 터질수도 있잖음? 그럼 그 UB가 터졌을때 GC에서 터졌다고 생각할수있고 책임주체가 명확하지
진짜 저렇게까지 최적화해주는거 보니까 컴파일러 만든 사람 갈려나갔겠다