Skip to content

Resource Acquisition Is Initialization

RAII는 C++에서 자주 쓰이는 idiom으로 자원의 안전한 사용을 위해 객체가 쓰이는 스코프를 벗어나면 자원을 해제해주는 기법이다. C++에서 heap에 할당된 자원은 명시적으로 해제하지 않으면 해제되지 않지만, stack에 할당된 자원은 자신의 scope가 끝나면 메모리가 해제되며 destructor가 불린다는 원리를 이용한 것이다.

원래는 exception 등으로 control flow가 예상치 못하게 변경될 때를 대비하기 위해서 쓰이던 기법이다.

RAII, Rust/Linux의 환상

Rust 개발자와 기존 Linux 개발자 사이의 분쟁을 지켜보고 쓰는 글입니다. 여러 개발자가 각자 다른 코딩 스타일을 가질 순 있으나, Linux 프로젝트는 이미 C++을 배제해서 그것의 코드 스타일과 구조(RAII)를 피한 전적이 있습니다.

Asahi Lina가 언급한 코드의 작동 방식은 그 프로그램을 종료할 때 너무 느리며, 성능 지향 소프트웨어를 만드는 데 가장 기초적인 방식인 일괄 작업과 대립합니다. 예를 들어, 메모리 영역을 사용해 일괄 작업을 하는 것은 여러 개의 수명을 하나로 조정할 수 있어 RAII가 필요 없습니다.

여기 제 주장을 뒷받침하는 자료를 제시합니다. 이 자료들 모두 일괄 작업이 왜 좋은지 알려주고 있습니다:

따라서 저는 Linux가 평생 RAII를 받아들이지 말아야 한다고 생각합니다.

See also

Favorite site