표준 C++ 규격이 3년 간격으로 제정 되는 이유

Draft FAQ: Why does the C++ standard ship every three years? – Sutter’s Mill

현재 C++ 표준은 3년 단위로 제정 되고 있는데 왜 3년 주기인지 C++ 표준 위원회 의장인 Herb Sutter씨의 설명.

C++ 표준은 3년 간격으로 제정된다. 초안에 버그가 있기 때문에 연기해야 할까? 아니다. 이를 위해 2년 간의 기능 추가 및 1 년간의 기능 정지와 버그 수정 기간이 벌어진다.
그러나 어떤 “기능”은 앞으로 몇 차례의 회의를 거친다면 완전히 합의가 되어 들어갈 수 있는 상태가 된다. 이 “기능”을 위해 C++ 20을 약간 연기해야 할까? 안 된다. 기한까지 C++ 20에 넣을 수 없는 “기능”은 C++ 23으로 보낸다.

이 일정은 아주 엄격하다. 왜 3년이라는 고정 기간으로 일을 진행하게 되었냐면 프로젝트 관리를 하는 방법은 두 가지 밖에 없다.
오랜 경험을 바탕으로 이 방법이 다른 방법보다 낫다고 밝혀졌기 때문이다.

프로젝트 관리를 하는 두 가지 방법이란 무엇인가? 완제품을 출시하는 시기를 결정하는 방법으로 두 가지가 있다.
하나는 기능에 맞추는 것. 또 하나는 기간에 맞출 것. 한쪽을 선택하면 다른 쪽은 선택할 수 없다.

릴리스를 기능에 맞추는 경우 기능이 완성해야 릴리스 할 수 있다. 따라서 출시 기간을 결정할 수 없다. 결과적으로 출시 기간이 끝 없이 지연된다.
릴리스를 기간으로 설정할 경우, 기간 내에 맞추지 못한 기능은 이번 릴리스에 포함되지 않는다.

릴리스를 기능에 맞춘 경우는 C++ 98과 C++ 11 이었다. C++ 98 표준은 본래 1994년까지 제정 되었어야 했다.
Bjarne Stroustrup는 1994년까지 제정하지 못하면 실패라고까지 말했다. 결과 1998년에 되었다.
C++ 11은 200x 년까지 제정 되었어야했다. 결과적으로 2009년에서 2년 늦게 되었다.

어떤 기능이 앞으로 몇 달 안에 완성한다고 할 때, 이것은 몇 개월 동안 완성하지 않고 1년이라도 완성하지 못한다. 비록 앞으로 몇 달 안에 완성하기 때문이라는 핑계로 릴리스를 끝없이 미루면 당초 예정보다 크게 출시가 늦어져 버린다.

C++ 표준 제정이 늦어지면 C++ 컴파일러 구현도 늦어진다. C++ 컴파일러 벤더들은 모처럼 구현한 기능이 규격의 변경에 의해 바뀌어 버리는 것을 생각하면 아직 변경 되는 동안은 일부러 적극적으로 구현 할 이유가 없다. 규격을 제정하여 드디어 구현에 들어 갈 수 있다.

C++ 98과 C++ 11에서 이 같은 실패를 한 것은, 우리는 경험이 부족했기 때문이다.
경험을 얻은 우리는 프로젝트 관리에 엄격하게 기간을 결정하고, 일정에 따라 규격을 제정하게 되었다.
3년의 기간에 맞추지 못한 기능은 이후 규격으로 보낸다.


이 글은 2019-07-17에 작성되었습니다.