rust 'static Misconception

wangki·2025년 12월 30일

Rust

목록 보기
57/57

개요

tokio spawning
tokio에 대해 공부하던 중, 이전에 남긴 포스팅이 생각이 났다. 'static의 사용법에 관한 포스팅이었는데 좀 더 자세히 나와있는 것 같다.

https://velog.io/@wang_ki/rust-라이프타임

내용

tokio를 사용해 taskspawn하기 위해서는 send trait을 구현하면서 동시에 'static을 만족시켜야 한다. 이 말의 의미는 아래 내용과 같다.

SpawnedTask가 외부에서 빌려온 참조를 가지면 안된다는 의미이다.

예시를 보자면

use tokio::task;

#[tokio::main]
async fn main() {
    let v = vec![1, 2, 3];

    task::spawn(async {
        println!("Here's a vec: {:?}", v);
    });
}

위 코드는 컴파일 에러가 발생한다. println!은 값을 빌려와 화면에 출력을 한다. 즉, Vec 타입인 v 변수의 참조를 가져오게 되는데, 'static bound를 만족시키지 못해서 에러가 발생한다. 만약에 참조를 가지고 있다면 spawnedtaskpoll을 통해서 동작할 때, 실제 데이터가 여전히 살아있는 지 보장할 수 없다.
메인 함수가 아닌 다른 함수에서 spawn이 된 경우 빌려온 데이터에 접근할 때, Dangling Pointer 문제가 발생할 수 있으므로 Rust 컴파일러가 이를 미리 막아주는 것이다.

결론

'static bound에 대해서 이해하고 있었는데, tokio의 공식 문서를 확인하니 더욱 이해가 되는 것 같다. 공식 문서를 읽어보는 습관을 들이면 좋을 것 같다.

0개의 댓글