강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của newminkyung
newminkyung

câu hỏi đã được viết

Giới thiệu và sử dụng Rust, một ngôn ngữ lập trình tinh tế, hiệu suất cao

Cấu trúc cơ bản

Rust는 어떻게 컴파일 타임에 dangling reference를 막나요?

Viết

·

53

0

안녕하세요!

강의를 통해 dangling reference를 Rust가 컴파일 타임에 막는다는것에 대해 잘 학습할 수 있었습니다.

그 원리가 조금 더 궁금합니다.

Rust는 참조의 생명주기를 어떤 기준으로 분석해서

“이 참조는 원본보다 오래 살 수 없다”고 판단하나요?

단순히 스코프만 보는 건지, 아니면 변수의 사용 시점까지 추적하는 건지도 궁금합니다.

rustwebassembly

Câu trả lời 2

0

hatemogi님의 프로필 이미지
hatemogi
Người chia sẻ kiến thức

Rust의 매력이자 다른 언어들과 대비되는 기능 중 하나인 거 같습니다. 라이프타임(스코프)와 소유권 이동을 확인해가며 검사하는 "임대 검사기"가 올바른 사용을 강제하는데요, 마치 컴파일러에 있는 타입검사기(type checker)가 변수나 함수들의 타입이 올바른지 확인하고, 틀리다면 컴파일을 거부하는 것 처럼, 임대검사기(borrow checker)가 돌면서 소유권과 생명주기가 올바른지 확인하는 시스템이 있는 거죠.

 

변수의 라이프타임과 소유권을 추적한다고 보면 맞겠습니다. 변수가 선언된 스코프와 라이프타임이 거의 같기는 할 텐데, 변수가 블럭 스코프 중간에 선언될 수도 있으니 조금 더 좁을 수 있겠지요. 그래서 스코프보다 라이프타임이라고 따로 칭하는 게 조금 더 정확하겠습니다.

0

안녕하세요, 인프런 AI 인턴입니다.

Rust의 최대 장점 중 하나는 메모리 안전성을 보장하는 시스템입니다. 이 시스템 덕분에 Rust는 컴파일 타임에 dangling reference(더 이상 유효하지 않은 메모리 참조)를 미리 발견하고 막을 수 있습니다.

Rust에서 참조의 생명주기를 관리하는 방법에 대해 설명드리겠습니다.

  1. 생명주기(lifetime) 주석:

    • Rust는 생명주기 주석을 사용하여 참조가 유효한 범위를 추적합니다. 이는 스코프와 관련이 있지만, 단순히 스코프 수준에서 판단하는 것은 아닙니다. Rust는 참조가 안전하게 사용될 수 있는지를 결정하기 위해, 변수의 사용 시점을 포함하여, 각 참조가 유효한 시점을 컴파일 타임에 분석합니다.
  2. borrow checker(차용 검사기):

    • Rust의 borrow checker는 참조가 안전한지 확인하는 데 중요한 역할을 합니다. 이 검사기는 참조가 유효한 동안 원본 데이터가 다른 방식으로 변경되지 않고 항상 안정적으로 사용될 수 있도록 합니다.
  3. 생명주기 명시:

    • 함수에서 입력되는 참조의 생명주기를 명시적으로 정의하여 호출자와 함수 간의 참조 유효 기간을 맞춥니다. 예를 들어, 두 참조 매개변수가 동일한 생명주기를 가지도록 명시하여, 함수 내부에서의 참조가 안전하게 사용될 수 있음을 보장합니다.

Rust는 이러한 메커니즘을 통해 컴파일 타임에 참조의 안전성을 보장하여, 메모리와 관련된 오류(예: dangling reference)를 원천적으로 차단합니다.

Rust가 이러한 메모리 오류를 어떻게 관리하는지에 대한 추가적인 설명과 데모는 “구조체는 언제나 Heap에 저장되나요?” 게시물에서 관련 내용을 참고하실 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

Hình ảnh hồ sơ của newminkyung
newminkyung

câu hỏi đã được viết

Đặt câu hỏi