안전하지 않음

안전하지 않음 (Unsafety)

unsafe 연산(unsafe operations) 은 Rust의 정적 의미론(static semantics)이 보장하는 메모리 안전성(memory-safety)을 잠재적으로 위반할 수 있는 연산을 말해요.

출처: Rust Reference

본문

다음 언어 수준의 기능들은 Rust의 안전한 부분집합(safe subset)에서는 사용할 수 없어요.

  • raw 포인터 역참조하기.
  • 가변 또는 unsafe 외부 static 변수를 읽거나 쓰기.
  • union의 필드에 접근하기(할당하는 경우 제외).
  • unsafe 함수 호출하기.
  • 같은 기능을 활성화하는 target_feature 속성이 없는 함수에서, 그 target_feature로 표시된 안전한 함수 호출하기.
  • unsafe trait 구현하기.
  • extern 블록 선언하기.¹
  • 항목에 unsafe 속성 적용하기.

¹ 원문 각주: 2024 에디션 이전에는 extern 블록을 unsafe 없이 선언하는 것이 허용되었어요.

정리하면, 이 목록의 연산들은 평범한 안전 코드에서는 막혀 있고 unsafe 블록이나 unsafe 함수 안에서만 사용할 수 있어요. 그래서 이 기능들을 쓸 때는 메모리 안전성을 스스로 책임져야 해요.

더 알아보기