#cppcon16 Leak-Freedom in C++ By Default / Herb Sutter

/pnotes/assets/2016-12-26-cppcon2016-leak-freedom-in-cpp-by-default-herb-sutter-01.png

4번을 해결할 수 있는 표준 라이브러리가 없다. 이걸 해결하려고 GC(garbage collection)를 만든다. 순환 참조를 풀려면 결국 이것밖에 없나 싶기도 하고.

https://github.com/hsutter/gcpp. 단순히 컨셉만 설명하는 게 아니라 검증도 해보고 이걸 바탕으로 발표도 하고. 멋지네.

큰 그림을 그리고 빈 곳을 찾아서 이걸 메울 방법을 설명하고 완성하는 건 무척 어려운 일이다. 4번 해결책만 보면 김빠지지만 큰 그림은 다르지. 그래서 난 아주 좋은 발표라고 생각한다. 역시 믿고 보는 Herb Sutter 발표.

/pnotes/assets/2016-12-26-cppcon2016-leak-freedom-in-cpp-by-default-herb-sutter-02.png

다른 발표도 봐야겠네.

/pnotes/assets/2016-12-26-cppcon2016-leak-freedom-in-cpp-by-default-herb-sutter-03.png

raw pointer 대신 소유권(ownership)이 명확한 *_ptr 템플릿 클래스를 사용하자는 내용. 예제로 보여줘서 재미있게 볼 수 있다. 여기까지만 발표하면 herb sutter 형님이 아니다. 뒤에 하나 더 설명한다.

/pnotes/assets/2016-12-26-cppcon2016-leak-freedom-in-cpp-by-default-herb-sutter-04.png

처음 봤다. shared_ptr aliasing constructor. shared_ptr<Node> 레퍼런스 카운트를 사용하는 shared_ptr<Data>를 만들 때 사용한다.

/pnotes/assets/2016-12-26-cppcon2016-leak-freedom-in-cpp-by-default-herb-sutter-05.png

/pnotes/assets/2016-12-26-cppcon2016-leak-freedom-in-cpp-by-default-herb-sutter-06.png

순환 그래프(cycle graph)는 어떻게 소유권을 관리해야 하나? 순환 참조(reference cycles) 때문에 소유권 정보를 Node에 안 넣고 생명주기(lifetime)를 관리할 수 있는 container를 추가하는 방법으로 해결할 수 있다. Graph 소멸자에서 할당받은 메모리를 릴리즈하기 때문(Region-based memory management)에 메모리 누수(memory leak)은 없다만 Graph 객체가 살아있는 동안에 사용 안 하는 node를 해제하는 건 직접 짜줘야 한다.

/pnotes/assets/2016-12-26-cppcon2016-leak-freedom-in-cpp-by-default-herb-sutter-07.png

이건 현재 있고

/pnotes/assets/2016-12-26-cppcon2016-leak-freedom-in-cpp-by-default-herb-sutter-08.png

짠~ deferred_ptr.

/pnotes/assets/2016-12-26-cppcon2016-leak-freedom-in-cpp-by-default-herb-sutter-09.png

/pnotes/assets/2016-12-26-cppcon2016-leak-freedom-in-cpp-by-default-herb-sutter-10.png

위 예제를 다시 실험 중인 라이브러리로 바꾸면 이렇게. 퉁쳐서 GC를 구현했다고 생각하면 된다.

/pnotes/assets/2016-12-26-cppcon2016-leak-freedom-in-cpp-by-default-herb-sutter-11.png

FAQ 미리 준비해놓고 관련 질문이 나오니 슬라이드를 띄운다. 훌륭.

자료


크리에이티브 커먼즈 라이선스
Feedback plz <3 @ohyecloudy, ohyecloudy@gmail.com
|