inflearn logo
강의

講義

知識共有

エレガントな高性能プログラミング言語Rustの入門と活用

構造体の基礎

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

70

newminkyung

投稿した質問数 1

0

안녕하세요!

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

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

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

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

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

rust webassembly

回答 2

0

hatemogi

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

 

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

0

communityai8509

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

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

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

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

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

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

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

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

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

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

다음강의 플랜이 어떻게 되실까요?

0

32

1

소스코드

0

32

1

강의 자료 ppt나 pdf 파일은 없을까요?

0

69

1

선생님 ppt자료를 받아서 공부하고 싶습니다.

0

52

2

강의 추가 계획 질문

0

76

2

소유권 이전과 관련된 질문입니다

0

146

2

&r1 을 써야하는지 r1을 써야하는지?

1

120

1

임대값 수명에 대한 질문

1

122

1

변수 가리기 shadowing 을 듣고 궁금한점이 생겼습니다.

1

154

1

튜플 구조체에서 println! 사용시 에러가 발생합니다.

0

166

1

메모리 관리규칙에서 질문드립니다.

1

209

1

튜플과 구조체 차이 설명에 관한 질문

0

377

1

튜플과 배열 강의 4:50에서 벡터 나중에 설명해주신다고 하셨는데

0

192

1

trait를 인자로 받을 때 &impl과 &dyn차이

1

365

2

구조체는 언제나 Heap에 저장되나요??

2

418

2

Lifecycle 강의에서 두 문자열 슬라이스를 비교해 긴 문자열 슬라이스를 리턴하는 것 관련 질문

0

268

1

혹시 어떤 폰트일까요?

0

455

2

build 오류

0

402

1

웹 어플리케이션 개발에도 잘 사용되나요?

1

458

1

임대값의 수명 강의가 재생이 안되고 있습니다~

0

412

3

임대값의 수명에 대한 강의는 언제쯤 볼 수 있을까요?

0

350

2

문자열 리터럴이 너무 어려워요ㅠㅠ

1

555

1

Integer는 자동으로 copy되서(copy type)(integer 는 stack에 할당되서)

0

366

2

명령어를 입력 한 후 source "$HOME/.cargo/env" 이 명령어를 입력해야 합니다.

0

336

2