C++26, 사상 첫 ISO 표준안(DIS) 투표 부결… Contracts 논쟁이 불러온 표준화 위기

한눈에 보는 핵심 요약
C++26이 2026년 10월 23일 ISO 국제표준안(DIS) 투표에서 부결됐습니다. 12주 동안 진행된 국가 회원기관(NB, National Body) 투표에서 승인에 필요한 3분의 2 찬성을 얻지 못했습니다. 표준화위원 Andreas Fertig가 아는 범위에서는 C++ 역사상 처음 있는 일입니다.
- 반대의 핵심 이유는 Contracts였습니다. 여러 NB가 이 기능을 아직 표준에 넣어 내보낼 단계가 아니라고 판단했습니다.
- Contracts는 수년간의 검토와 여러 차례의 다수결을 거쳐 C++26에 들어갔고, 2026년 3월 WG21 초안 투표에서도 큰 표 차이로 통과됐습니다.
- 앞으로 가능한 경로는 DIS 재투표, 위원회(CD) 단계 복귀, 기술 명세(TS) 발행, 프로젝트 취소 네 가지입니다. 어느 쪽을 택해도 차기 표준은 늦어집니다.
- 11월 16일 회의에서는 이 교착 상태를 푸는 것이 최우선 과제가 될 예정입니다.
이 글은 독일 표결에 참여하는 C++ 표준화위원 Andreas Fertig의 개인적인 분석을 바탕으로 합니다. ISO 규정상 일부 내부 투표 결과나 세부 내역은 공개되지 않습니다.
DIS 투표란? 그리고 무엇이 문제였나
ISO 표준화 절차에서 DIS(Draft International Standard)는 끝에서 두 번째 단계입니다. 각 나라의 NB는 승인, 거부, 기권 중 하나를 고르고 의견을 함께 낼 수 있으며, 통과하려면 3분의 2 이상이 찬성해야 합니다.
C++는 1998년 첫 표준 이후 이 단계를 늘 순조롭게 넘겨 왔습니다. 하지만 이번에는 NB들이 낸 의견에서 Contracts의 준비 상태가 핵심 반대 이유로 꼽혔습니다.
전례가 있었을까?
Fertig가 ISO 시스템에서 찾은 다른 부결 사례는 2006년 8월 11일자 ISO/IEC DIS 26926(C++/CLI Language Specification) 하나입니다. 이 프로젝트는 결국 중단됐습니다. 검색 권한 때문에 놓친 사례가 있을 수는 있지만, 프로그래밍 언어 표준은 모두 조회할 수 있다는 전제에서 나온 결과입니다.
WG21의 합의 문화와 NB 투표가 부딪힌 지점
C++ 표준을 만드는 WG21은 ISO 규칙 외에 자체 관행도 따릅니다.
- 새로운 정보가 나오면 의견을 다시 듣고 논의합니다.
- 충분히 검토했는데도 원하는 변경이 받아들여지지 않으면, 다수의 판단을 존중하고 결과를 받아들이는 것이 관행이었습니다.
다만 NB에서 투표하는 사람은 WG21 참여자와 다를 수 있고, NB는 독자적으로 표결할 권리가 있습니다. 지금까지 NB가 표준에 반대하는 경우는 새로운 정보가 나왔거나 절차상 오류가 확인됐을 때 정도였습니다.
Contracts 제외를 요구하는 NB들은 새로운 정보가 있다고 주장합니다. 반면 Fertig는 기존 논거를 다시 정리한 문서를 새로운 정보로 보기는 어렵다며, 이번 투표가 그동안의 관행에서 벗어났다고 봅니다.
Contracts가 C++26에 들어오기까지
Contracts는 계약 기반 프로그래밍(사전·사후 조건 등)을 언어 차원에서 지원하는 기능으로, 오랫동안 요청돼 왔습니다. 그 과정을 정리하면 다음과 같습니다.
- 2019년 쾰른 회의: 지금과 다른 형태로 C++20에 들어갔다가 같은 회의에서 다시 빠졌습니다.
- 2020년~2024년경: 연구 그룹(SG)이 Contracts의 여러 측면을 검토했습니다.
- EWG(Evolution Working Group) 논의: 연구 결과와 제안이 언어 확장을 담당하는 EWG에 올라갔고, 여러 회의를 거친 뒤 다수결로 C++26에 포함됐습니다.
- 2026년 3월 WG21 투표: Contracts를 포함한 C++26 초안이 큰 표 차이로 통과됐습니다. 반대표도 있었지만 찬성이 3분의 2를 넘었습니다.
- DIS 단계: 반대표가 승인 기준을 넘을 만큼 많아 부결됐습니다.
앞으로의 시나리오: 네 가지 선택지
ISO 절차상 가능한 선택지는 네 가지입니다.
| 선택지 | 내용 | |---|---| | DIS 재투표 | 수정한 초안으로 DIS 투표를 다시 진행 | | CD 단계 복귀 | 수정 초안을 위원회에 다시 올려 한 단계 앞으로 돌아감 | | 기술 명세(TS) 발행 | 정식 표준 대신 Technical Specification으로 발행 | | 프로젝트 취소 | C++26 자체를 취소 |
어떤 길을 택하든 차기 C++ 표준은 늦어지고, 이름을 C++26으로 유지할 수 있을지도 불확실합니다.
왜 합의가 어려운가
- 어느 경로든 WG21 안에서 다수의 동의가 필요합니다. 그런데 WG21은 이미 Contracts를 포함한 초안을 다음 단계로 보내기로 승인한 상태입니다.
- 찬성 측은 수년간 작업하고 여러 번 승인받은 기능을 쉽게 내려놓기 어렵습니다.
- 반대 측도 대안 구현까지 만들며 노력을 들였기 때문에, Contracts를 빼지 않고는 DIS 결과가 바뀌기 어렵다는 것이 Fertig의 전망입니다.
- 물론 실제 결과는 투표를 해 봐야 알 수 있습니다.
C++26이 취소된다면? C++29까지 번지는 파장
프로젝트 취소 역시 WG21 다수의 동의가 필요합니다. Fertig의 이해에 따르면 취소할 경우 다음과 같이 진행됩니다.
- C++23을 기준으로 되돌아가 변경 없이 C++29 작업을 이어갑니다.
- C++26에 이미 들어간 기능들은 C++29에 다시 반영해야 합니다.
- 그러려면 기능마다 제안 문서를 맡아 추진할 사람이 최소 한 명 있어야 합니다. 담당자의 시간이나 의욕이 부족하면 일부 기능은 빠질 수 있습니다.
Fertig는 이번 일이 C++29에도 영향을 줄 가능성이 매우 높다고 보고, 지금으로서는 C++29 작업을 계속할 이유가 없다고까지 말합니다.
에디터의 시선: 결국 관건은 '신뢰'
Fertig는 이번 부결을 C++ 커뮤니티 전체에 큰 타격으로 받아들입니다. Contracts를 좋아하든 싫어하든, 현재의 형태는 수년간의 작업과 여러 차례의 다수 승인을 거친 결과라는 것입니다.
ISO 표준은 결국 타협의 집합입니다. 참여자라면 누구나 자기 의견이 채택될 때도, 받아들여지지 않을 때도 있습니다. Fertig는 이번 반대표를 앞선 표결에서 진 쪽이 결과를 받아들이지 않은 것으로 보고, 신뢰와 상호 존중으로 굴러가던 협업 체계가 흔들렸다고 진단합니다.
다음 단계로 가려면 합의가 필요하고, 합의에는 신뢰가 필요하다.
C++ 개발자라면 11월 16일 회의 결과를 주목할 필요가 있습니다. Contracts의 운명은 물론, 앞으로 몇 년간 C++ 표준화의 방향이 여기서 갈릴 수 있습니다.
원문: https://news.hada.io/topic?id=36576&utm_source=geeknews&utm_medium=rss&utm_campaign=news