러스트(Rust) 언어 프로젝트가 2026~2027년 로드맵의 핵심 과제로 '이동 불가(non-movable) 타입'과 '소멸자 실행 보장'을 위한 새로운 트레이트(trait) 도입을 승인했습니다. 현재 러스트는 모든 값이 메모리의 다른 위치로 이동할 수 있고, `mem::forget` 함수를 통해 소멸자(destructor) 실행 없이 잊힐 수 있다는 두 가지 전제를 가지고 있습니다. 하지만 이 전제는 자기 참조 구조(self-referential structure)를 사용하는 비동기 코드나 특정 리소스 관리 패턴에서 복잡성과 안전성 문제를 야기했습니다.
새롭게 도입될 트레이트는 `Move`, `Destruct`, `Forget` 세 가지입니다. `Move` 트레이트는 값이 메모리에서 이동할 수 있음을 나타내며, `!Move` (Move가 아님) 타입은 이동할 수 없어 주소가 고정됩니다. 이는 현재 `Pin`을 통해 구현되는 자기 참조 타입의 복잡성을 줄이고, 장소(place)의 속성이 아닌 타입 자체의 속성으로 이동 불가능성을 표현하게 됩니다. `Destruct`는 범위(scope)를 벗어날 때 암묵적으로 드롭(drop)될 수 있음을, `Forget`은 `mem::forget`으로 잊힐 수 있음을 명시합니다. 특히 `!Forget` 타입은 소멸자 실행을 보장하여, 비동기 작업 핸들(scoped task handle)처럼 특정 시점에 반드시 정리 작업(예: `join`)이 필요한 경우 안전성을 확보할 수 있게 됩니다. 이 프로젝트는 컴파일러 MVP 개발, RFC(Request for Comments) 작성, 리눅스 커널(Linux kernel)에서의 실현 가능성 검증에 집중할 예정입니다.
이번 변화는 러스트의 핵심 설계 철학 중 하나인 '안전성'을 한 단계 더 끌어올리는 중요한 진전입니다. 기존 `Pin`의 복잡한 사용법을 개선하고, 비동기 프로그래밍에서 자기 참조 타입을 더 안전하고 효율적으로 다룰 수 있는 길을 열어줄 것입니다. 또한, 소멸자 실행 보장은 데이터베이스 트랜잭션(transaction)이나 특정 리소스 관리에서 발생할 수 있는 잠재적 문제를 방지하여, 러스트가 시스템 프로그래밍 영역에서 더욱 강력한 입지를 다지는 데 기여할 것으로 기대됩니다. 장기적으로는 `Pin` 자체를 언어에서 폐기하고 `!Move`가 그 역할을 대체하는 것을 목표로 하고 있어, 러스트 개발 경험 전반에 긍정적인 영향을 미칠 전망입니다.