Scientia Conditorium

[C++][Summary] Approaching C++ Safety - Bjarne Stroustrup 본문

프로그래밍/C++

[C++][Summary] Approaching C++ Safety - Bjarne Stroustrup

크썸 2023. 8. 23. 21:54

2023년 6월 5일 CoreC++ 컨퍼런스에서 C++ 창시자 비야네 스트롭스트룹(Bjarne Stroustrup)가 발표한 내용
Approaching C++ Safety 라는 제목으로 C++ 안전성에 대해 다루고 있으며 요약하면 아래와 같음

1. 여러 소프트웨어 커뮤니티에서 메모리 안전 언어를 활용하는 방향으로 소프트웨어 개발 문화를 주도하기 시작

2. 미국 국가 안보국(NSA)에서 C/C++와 같이 고유한 메모리 보호 기능을 거의 또는 전혀 제공하지 않는 프로그래밍 언어에서 메모리 안전 언어로 전략적으로 전환하는 것을 권고
메모리 안전 언어로 C#, Go, Java, Ruby, Swift

3. 그러나 TIOBE 프로그래밍 언어 인기 지수를 보면 C++는 증가함
오늘날 C/C++ 선택하는 사람들은 바보가 아님
(the people that chose C++ today are not stupid)

4. 물론 1,2번 내용을 부정/무시할 수는 없고 '안전(Safety)' 이슈는 중요함

5. C++ 보다 더 '안전한' 언어를 고려한다면 C++와 멀어지는게 나쁘다고 생각하진 않지만, 사실은 그렇지 않음.
여기에서 '안전성'은 메모리 안전에 국한되며, 언어가 어떤 안전과 보안을 침해하기 위해 악용될 수있는 수십가지 다른 방법은 제외함

6. C와 C++를 하나의 카테고리로 묶어버린 탓에 지난 30년 이상의 발전이 무시됨

7. 완전한 타입과 리소스 안전성(Complete type-and-resource safety)은 C++의 이상적인 목표

8. C++은 새로운 도전에 대처하며 진화하고 적응할 수 있도록 설계되었으며 표현할 수 있는 내용에 제한이 없는 것이 핵심

9. 지난 30년간 이를 헤치지 않고 안전성에 대한 해결책을 계속 내놓고 있었음
RAII, OOP(캡슐화 등), Range-for & span, 템플릿, 컨테이너, 알고리듬, 스마트포인터, Exceptions 등등

10. 개발자의 의도를 직접적으로 표현하는 효율적인 코드를 작성하기 위해선
당연히 신중한 프로그래밍 기술이 필요하고 조심하는 것만으로 해결되지 않음.
리소스 사용은 올바른 반환과 관리가 필요함

11. 이를 위해 핵심 가이드라인(Core Guidelines)과 프로파일이 존재(정적 분석기 등)하고
이런 지침과 프로파일 도구는 안전성을 시행하고 오류를 방지하는데 도움을 줌

12. 런타임 오류는 여기서 자세히 다루지 않지만, 기본적으로 컴파일 타임때 검사가 안전 신뢰성을 높임

13. C++를 안전하게 사용하기 위한 전략으로는
안전하지 않은 코드가 실행되지 않았는지 확인하기 위한 정적 분석
산업 규모의 정적 분석을 실행할 수 있도록 코드를 단순화하는 코딩 규칙
단순화된 코드를 쉽게 작성하고 필요하다면 런타임 검사를 보장하는 라이브러리

14.결론은 기본적으로 C++ 안전 문제에 대해 더 나은 코드를 작성해야 한다는 것인데
C++에는 이미 이를 도와줄 수 있는 모든 도구들이 있긴함

15. 그러나 Core Guidelines이라던가 프로파일을 위한 기준이 아직 부족함
보편적인 안전성 보장은 복잡한 과제로 점진적인 도입이 필요

 

참고자료
https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2739r0.pdf
https://www.ciokorea.com/t/21999/%EA%B0%9C%EB%B0%9C%EC%9E%90/275413

https://youtu.be/eo-4ZSLn3jc