ISO C++ 위원회
1. 개요
1. 개요
ISO C++ 위원회는 C++ 프로그래밍 언어의 국제 표준을 개발하고 유지보수하는 공식 기구이다. 정식 명칭은 ISO/IEC JTC 1/SC 22/WG 21이며, 국제 표준화 기구(ISO)와 국제 전기 표준 회의(IEC)의 합동 기술 위원회 산하에 위치한다. 이 위원회는 1991년 설립되어 C++ 언어의 진화를 이끌고 있으며, 그 주요 산출물은 ISO/IEC 14882로 알려진 C++ 표준 문서이다.
위원회의 핵심 임무는 새로운 언어 기능과 라이브러리를 제안, 논의, 표준화하여 C++ 언어를 현대 프로그래밍 요구사항에 맞게 발전시키는 것이다. 이를 통해 언어의 호환성, 이식성, 안정성을 보장하며, 전 세계의 소프트웨어 개발자와 IT 산업 전반에 지침을 제공한다. 위원회의 작업은 컴파일러 제작사, 도구 개발자, 학계 및 산업계 전문가들의 광범위한 협력을 바탕으로 이루어진다.
위원회는 여러 하위 그룹(Study Groups, Working Groups)으로 구성되어 있으며, 각 그룹은 코어 언어, 표준 라이브러리, 병행 처리, 보안 등 특정 주제를 심도 있게 다룬다. 표준화 절차는 제안서 제출, 기술적 논의와 초안 작성, 그리고 최종적으로 ISO와 IEC 회원국들의 투표를 거쳐 국제 표준으로 공표되는 과정을 따른다. 이 과정을 통해 C++98, C++11, C++14, C++17, C++20, C++23과 같은 주요 표준 버전이 출시되었다.
2. 역사
2. 역사
C++ 언어의 표준화 작업은 1989년 ANSI에 의해 시작되었다. 이는 비야네 스트롭스트룹이 개발한 C++ 언어의 공식적인 사양을 정의하기 위한 것이었다. 1991년, 이 작업은 국제적인 범위로 확장되어 ISO와 IEC의 합동 기술 위원회인 ISO/IEC JTC 1 산하의 프로그래밍 언어 분과위원회(SC 22) 내에 공식적인 워킹 그룹(WG 21)으로 설립되었다. 이로써 ANSI와 ISO의 표준화 노력이 통합되어 국제 C++ 표준을 함께 개발하게 되었다.
위원회의 첫 번째 주요 성과는 1998년에 공표된 국제 표준 ISO/IEC 14882:1998, 즉 C++98이었다. 이 표준은 C++ 언어의 핵심과 표준 템플릿 라이브러리(STL)를 공식적으로 정의했다. 이후 2003년에는 오류 수정과 명료화를 담은 기술 수정안이 발표되어 C++03으로 알려지게 되었다.
2000년대 후반부터 위원회는 보다 적극적인 표준 개정 주기를 채택하기 시작했다. 이는 새로운 언어 기능과 라이브러리 확장을 보다 빠르게 반영하기 위한 것이었다. 그 결과 C++11은 2011년에 발표되어 람다 표현식, 스마트 포인터, 이동 의미론 등 언어에 중대한 변화를 가져왔다. 이후로 위원회는 약 3년 주기로 표준을 개정해 C++14, C++17, C++20을 발표해왔으며, C++23 이후의 버전에 대한 작업도 지속적으로 진행 중이다.
3. 구성
3. 구성
3.1. 위원회 구성원
3.1. 위원회 구성원
ISO C++ 위원회의 공식 명칭은 ISO/IEC JTC 1/SC 22/WG 21이다. 이는 국제 표준화 기구와 국제 전기기술위원회의 합동 기술 위원회 산하의 프로그래밍 언어, 그 환경 및 시스템 소프트웨어 인터페이스에 관한 소위원회(SC 22) 내에서 운영되는 작업 그룹(WG 21)에 해당한다. 위원회는 주로 각국의 국가 표준 기관에서 파견한 전문가들로 구성되며, 이들은 C++ 언어 설계자, 컴파일러 개발자, 도구 제작자, 라이브러리 구현자 및 학계 연구원 등 다양한 배경을 가진다.
위원회의 핵심 운영은 위원장과 부위원장, 그리고 편집자들에 의해 이끌어진다. 위원장은 전체 회의를 주재하고 의사 진행을 총괄하며, 부위원장은 특정 분야를 지원한다. 표준 문서의 실제 작성을 담당하는 편집자(Editor)는 제안된 변경 사항들을 표준 초안에 통합하고 문서의 일관성을 유지하는 중요한 역할을 수행한다. 이들의 작업은 공개된 GitHub 저장소를 통해 투명하게 관리된다.
위원회 구성원들은 자국의 이익을 대표하기보다는 기술적 전문성과 언어의 발전을 위한 공동의 목표를 바탕으로 활동한다. 회의는 보통 분기별로 개최되며, 전 세계에서 모인 전문가들이 직접 참석하거나 온라인으로 참여한다. 논의와 결정 과정은 공개 메일링 리스트를 통해 이루어지며, 이는 표준화 과정의 개방성과 포용성을 보여준다.
3.2. 하위 그룹(Study Groups, Working Groups)
3.2. 하위 그룹(Study Groups, Working Groups)
ISO C++ 위원회는 특정 기술 분야나 주제를 집중적으로 다루기 위해 여러 하위 그룹으로 구성된다. 이들은 크게 장기적인 방향을 연구하는 스터디 그룹(Study Group, SG)과 구체적인 표준 초안을 작성하는 워킹 그룹(Working Group, WG)으로 나뉜다.
각 스터디 그룹은 병행성, 모듈, 메타프로그래밍과 같은 광범위한 주제를 탐구하며, 언어의 미래에 대한 가능성을 조사하고 기술적 보고서(TS)를 준비하는 역할을 담당한다. 반면, 워킹 그룹은 핵심 언어(Core)와 표준 라이브러리(Library)에 대한 실제 표준 문서의 편집과 기술적 결의안 작성에 주력한다. 특히 라이브러리 워킹 그룹(LWG)은 STL을 포함한 모든 표준 라이브러리 구성 요소의 명세를 관리한다.
이러한 하위 그룹 체계는 복잡한 C++ 표준화 작업을 체계적으로 분업하고, 전문가들의 집중된 논의를 가능하게 한다. 모든 그룹의 논의와 결정 사항은 정기적인 전체 회의에서 보고되고 통합되며, 궁극적으로 ISO와 IEC에 제출될 국제 표준 초안을 완성하는 데 기여한다.
4. 표준화 절차
4. 표준화 절차
4.1. 제안서 제출
4.1. 제안서 제출
C++ 표준에 대한 새로운 기능이나 수정 사항은 제안서 형태로 위원회에 제출된다. 제안서는 일반적으로 위원회 구성원이나 외부 전문가가 작성하며, C++ 커뮤니티의 요구 사항이나 기술적 발전을 반영한다. 제안서는 특정 문제를 해결하거나 언어나 표준 라이브러리를 개선하는 구체적인 내용을 담고 있어야 한다.
제안서는 공식적으로 ISO와 IEC의 합동 기술 위원회인 JTC 1 산하의 SC 22 프로그래밍 언어 위원회를 통해 접수된다. 실제 심사 및 작업은 SC 22의 워킹 그룹인 WG21에서 이루어진다. 제안서는 초안 단계로 진입하기 전에 관련 하위 그룹에서 예비 검토를 받는다.
제안서는 기술적 완성도가 높을수록 표준화 과정을 통과할 가능성이 커진다. 따라서 제안자들은 종종 실험적 구현을 완성하거나 기술 사양서를 미리 작성하여 아이디어의 실현 가능성을 입증한다. 많은 제안이 C++ 개발자 회의나 온라인 포럼에서 논의된 후 공식 절차에 들어간다.
성공적인 제안서는 위원회의 합의를 얻어 작업 초안에 포함되고, 이후 국제 표준 초안 단계를 거쳐 최종 ISO/IEC 14882 표준의 일부가 된다. 제안서 제출은 C++ 표준화 과정의 첫 번째이자 가장 중요한 단계이다.
4.2. 초안 작업
4.2. 초안 작업
제안서가 공식적으로 채택되면, 해당 기능이나 개선 사항의 구체적인 기술적 명세를 작성하는 초안 작업 단계가 시작된다. 이 작업은 주로 관련 하위 그룹 내에서 이루어지며, 제안서의 저자와 해당 분야에 전문성을 가진 위원회 구성원들이 참여한다. 초안 작업의 목표는 제안된 내용을 C++ 표준 문서에 통합할 수 있는 완성도 높은 문안으로 다듬고, 모든 세부 사항과 에지 케이드를 명확히 정의하는 것이다.
이 과정에서는 문법, 의미론, 라이브러리 스펙, 기존 표준과의 호환성, 구현 가능성 등이 집중적으로 논의된다. 논의는 이메일 리스트, 전화 회의, 그리고 연 3~4회 열리는 전체 회의에서 진행된다. 초안 작업의 결과물은 표준 문서의 특정 섹션을 수정하거나 추가하는 구체적인 변경 사항, 즉 "패치" 형태로 만들어지며, 이는 Working Draft에 반영된다.
초안 작업은 반복적인 과정으로, 작성된 문안은 해당 하위 그룹과 전체 워킹 그룹의 검토를 여러 차례 거친다. 기술적 문제가 해결되고 합의가 이루어지면, 해당 변경 사항은 공식 초안에 포함될 후보로 상정된다. 이 단계를 성공적으로 마친 제안은 이후 국제적 투표 단계로 넘어가게 된다.
4.3. 국제 투표 및 승인
4.3. 국제 투표 및 승인
ISO C++ 위원회가 개발한 C++ 표준 초안은 최종적으로 국제 표준화 기구와 국제 전기 표준 회의의 공동 위원회인 ISO/IEC JTC 1의 승인을 받아야 공식 국제 표준이 된다. 이 승인 절차는 국제 표준 초안 단계와 최종 국제 표준 발행 단계로 나뉘며, 각 단계마다 회원국들의 투표를 통해 합의를 이끌어낸다.
먼저, 위원회 초안이 완성되면 국제 표준 초안으로 등록되어 모든 ISO 및 IEC 회원국에게 투표용 문서로 배포된다. 이 투표 기간은 일반적으로 2개월에서 5개월 정도이며, 회원국들은 기술적 내용에 대한 찬성, 반대 또는 기권 의사를 표시한다. 반대표를 던진 국가는 반드시 기술적 이유를 명시해야 하며, 이러한 의견은 위원회가 검토하여 초안을 수정하는 데 반영된다. 이 과정을 통해 국제적인 기술적 합의가 형성된다.
국제 표준 초안 투표에서 규정된 찬성률을 넘어 승인되면, 문서는 최종적으로 편집을 거쳐 ISO와 IEC에 의해 공식 국제 표준으로 출판된다. 이 표준에는 ISO/IEC 14882와 같은 고유 번호가 부여되며, 예를 들어 C++11 표준의 공식 명칭은 ISO/IEC 14882:2011이다. 이렇게 확정된 표준은 전 세계의 C++ 컴파일러 개발자, 도구 제조사 및 프로그래머들이 준수해야 할 규격의 근간이 된다.
5. 주요 활동 및 표준
5. 주요 활동 및 표준
5.1. C++98/C++03
5.1. C++98/C++03
C++의 첫 번째 공식 국제 표준은 1998년에 ISO/IEC 14882:1998로 출판되었으며, 흔히 C++98이라고 불린다. 이 표준은 비야네 스트롭스트룹이 개발한 C++ 언어의 핵심 기능과 표준 템플릿 라이브러리(STL)를 공식적으로 정의했다. C++98은 템플릿, 예외 처리, 네임스페이스, 실행 시간 타입 정보(RTTI)와 같은 주요 기능과 함께 STL의 컨테이너, 알고리즘, 반복자 등을 포함시켜 언어의 기초를 마련했다.
2003년에는 기술적 오류와 모호성을 수정한 개정판이 ISO/IEC 14882:2003으로 출판되었고, 이를 C++03이라고 부른다. 이 버전은 새로운 기능을 추가하기보다는 C++98 표준의 결함 보고서를 처리하여 명세를 명확히 하는 데 주력했다. 따라서 C++03은 C++98과 사실상 동일한 언어 사양으로 간주되며, 대부분의 컴파일러와 개발 환경에서 두 표준을 묶어서 지원한다.
이 초기 표준화 작업은 C++가 다양한 플랫폼과 컴파일러에서 일관된 동작을 보장하는 강력한 프로그래밍 언어로서의 지위를 확립하는 데 결정적인 역할을 했다. C++98/03 표준의 성공은 이후 C++11을 비롯한 보다 진화된 표준들의 기반이 되었다.
5.2. C++11
5.2. C++11
C++11은 C++ 프로그래밍 언어의 주요 개정판으로, 공식 명칭은 ISO/IEC 14882:2011이다. 이 표준은 2011년 8월에 승인되어 출판되었으며, C++98 이후 13년 만에 등장한 획기적인 업데이트로 평가받는다. C++11은 언어의 현대화를 목표로 하여 핵심 언어와 표준 라이브러리 모두에 걸쳐 방대한 새로운 기능을 도입했다.
주요 언어 기능으로는 자동 형식 추론을 위한 auto 키워드, 범위 기반 for 루프, 람다 표현식, 스마트 포인터, 이동 의미론과 우측값 참조, nullptr 상수, 강력한 형식 열거형 등이 추가되었다. 이러한 기능들은 코드의 안전성, 표현력, 성능을 크게 향상시켰다. 특히 이동 의미론과 스마트 포인터는 메모리 관리와 자원 관리를 획기적으로 개선했다.
표준 라이브러리 측면에서는 새로운 컨테이너와 알고리즘이 도입되었으며, 스레드 라이브러리를 통해 언어 차원의 멀티스레딩 지원이 시작되었다. 또한 정규 표현식, 난수 생성 라이브러리, 튜플, 시간 라이브러리 등이 추가되어 라이브러리의 기능이 크게 확장되었다.
C++11의 등장은 C++ 언어의 부활을 알리는 신호탄이 되었다. 이후 3년 주기의 규칙적인 표준 개정이 시작되는 기반을 마련했으며, 현대 C++ 프로그래밍의 토대를 구축했다. 이 표준은 C++ 커뮤니티에 큰 활력을 불어넣었고, 이후 C++14, C++17, C++20으로 이어지는 발전의 초석이 되었다.
5.3. C++14
5.3. C++14
C++14는 C++11 이후의 첫 번째 마이너 업데이트 표준으로, 공식 명칭은 ISO/IEC 14882:2014이다. 주로 C++11에서 도입된 기능들을 다듬고, 불완전하거나 불편했던 부분을 보완하는 데 초점을 맞췄다. 이는 "완성을 위한 표준"이라는 슬로건 아래, 언어의 완성도를 높이는 것을 목표로 했다.
주요 개선 사항은 다음과 같다. 첫째, 일반화된 람다 캡처가 도입되어 람다 표현식에서 이동 캡처가 가능해졌다. 둘째, 반환 타입 추론이 일반 함수에도 확장 적용되어 auto를 함수의 반환 타입으로 사용할 수 있게 되었다. 셋째, 이진 리터럴과 숫자 구분자가 추가되어 코드의 가독성이 향상되었다. 또한, constexpr 함수의 제약이 크게 완화되어 조건문과 반복문을 사용할 수 있게 되었으며, 표준 템플릿 라이브러리에도 std::make_unique, std::shared_timed_mutex 등의 유용한 유틸리티가 추가되었다.
C++14는 비교적 빠른 주기로 개발되어 2014년 8월에 최종 승인되었다. 이는 ISO C++ 위원회가 3년 주기의 표준 발표 사이클을 시험하는 중요한 사례가 되었으며, 이후 C++17, C++20으로 이어지는 보다 예측 가능한 표준화 프로세스의 기반을 마련했다. 이 표준은 C++11의 성공을 공고히 하고, 현대적 C++ 프로그래밍의 보급을 가속화하는 역할을 했다.
5.4. C++17
5.4. C++17
C++17은 ISO C++ 위원회가 개발한 C++ 프로그래밍 언어의 주요 개정판이다. 공식 명칭은 ISO/IEC 14882:2017이며, 2017년 12월에 국제 표준으로 공표되었다. 이 표준은 이전 버전인 C++14의 마이너 업데이트 성격을 띠면서도, 언어와 표준 라이브러리에 상당한 새로운 기능과 개선 사항을 도입했다. C++17의 개발 목표는 언어의 표현력을 높이고, 일반적인 프로그래밍 작업을 더 간결하고 효율적으로 만드는 데 중점을 두었다.
주요 언어 기능으로는 구조화된 바인딩을 통한 튜플 및 구조체의 편리한 분해, if 문과 switch 문 내에서의 초기화 구문 도입, constexpr if를 이용한 템플릿 메타프로그래밍의 단순화, 그리고 중첩된 네임스페이스 정의와 같은 문법적 편의 기능들이 추가되었다. 또한 파일 시스템 라이브러리가 표준에 정식으로 포함되어 운영체제 독립적인 파일 및 디렉토리 조작이 가능해졌다.
표준 라이브러리 측면에서는 std::optional, std::variant, std::any와 같은 새로운 유틸리티 타입이 도입되어 값의 존재 유무나 여러 타입 중 하나를 안전하게 표현할 수 있게 되었다. 병렬 알고리즘 지원이 강화되어 많은 표준 라이브러리 알고리즘에 실행 정책을 지정하여 병렬 실행이 가능해졌으며, 문자열 뷰가 추가되어 문자열 데이터의 비소유 참조를 효율적으로 처리할 수 있게 되었다.
C++17은 C++11/14가 가져온 현대적 C++ 프로그래밍 패러다임을 공고히 하고, 실용성을 크게 향상시킨 버전으로 평가받는다. 이후 버전인 C++20이 보다 큰 변화를 준비하는 동안, C++17은 안정성과 실용적인 기능 추가에 초점을 맞춘 과도기적 표준의 역할을 했다.
5.5. C++20
5.5. C++20
C++20은 ISO C++ 위원회가 2020년에 공식 발표한 C++ 프로그래밍 언어의 주요 개정판이다. 이 표준은 C++17 이후 3년 만에 도입되었으며, 언어와 표준 라이브러리에 상당한 변화와 새로운 기능을 추가하여 현대적인 프로그래밍을 더욱 지원하는 것을 목표로 했다. C++20은 모듈, 코루틴, 개념과 같은 대규모 기능을 도입함으로써 언어의 패러다임을 확장했다.
가장 주목할 만한 기능 중 하나는 모듈이다. 모듈은 기존의 헤더 파일과 선행처리기에 의존하는 방식의 대안을 제공하여, 컴파일 시간을 단축하고 매크로의 누출 문제를 해결한다. 또 다른 핵심 기능은 코루틴으로, 비동기 프로그래밍과 지연 평가를 위한 새로운 메커니즘을 제공하여 협력형 멀티태스킹을 구현하기 쉽게 한다. 또한, 템플릿 메타프로그래밍의 복잡성을 줄이기 위해 개념이 도입되어, 템플릿 매개변수에 대한 제약 조건을 명시적으로 정의하고 검사할 수 있게 되었다.
표준 라이브러리에도 많은 확장이 이루어졌다. 범위 라이브러리가 도입되어 알고리즘과 컨테이너를 더욱 선언적이고 조합 가능한 방식으로 사용할 수 있게 했다. 또한 형식 특성 메타함수와 스마트 포인터 유틸리티가 개선되었고, 날짜와 시간 라이브러리에 대한 지원이 강화되었다. 이러한 추가 사항들은 코드의 가독성, 안전성, 그리고 표현력을 높이는 데 기여한다.
C++20은 언어의 현대화를 가속화한 중요한 이정표로 평가받는다. 모듈과 개념과 같은 기능들은 장기적으로 C++ 생태계의 구조와 개발 방식을 근본적으로 바꿀 잠재력을 가지고 있다. 이 표준의 채택은 컴파일러 지원이 점차 완성됨에 따라 계속 진행되고 있으며, C++23 및 이후 버전을 위한 토대를 마련했다.
5.6. C++23 및 이후 버전
5.6. C++23 및 이후 버전
C++23은 C++20 이후의 주요 개정판으로, 2023년에 국제 표준화 기구와 국제 전기 표준 회의에 의해 공식적으로 승인 및 발표되었다. 이 표준은 C++20에서 도입된 대규모 변화를 안정화하고 보완하는 데 중점을 두었으며, 언어와 표준 라이브러리에 여러 실용적인 개선 사항을 추가했다. 주요 기능으로는 std::print와 std::format의 향상된 지원, 스택 추적 라이브러리, std::expected 타입, 람다 표현식에 대한 확장, 그리고 모듈과 코루틴 관련 사소한 결함 수정 등이 포함된다.
C++26은 현재 ISO C++ 위원회가 적극적으로 개발 중인 다음 표준 버전이다. 위원회는 정기적인 회의를 통해 새로운 기능 제안을 논의하고, 초안을 반복적으로 개선해 나가고 있다. 예상되는 주요 논의 주제에는 정적 리플렉션, 패턴 매칭, 실행 공간(execution space) 지원 확장, 그리고 네트워킹 라이브러리 표준화 등이 있다. 이러한 기능들은 각각 관련 스터디 그룹이나 워킹 그룹에서 깊이 있게 검토된 후, 위원회 초안에 포함될지 결정된다.
표준화 과정의 투명성을 위해, 위원회는 각 회의 후 논의 결과와 초안 상태를 공개 위키나 메일링 리스트를 통해 발표한다. 또한, C++26 개발과 병행하여 C++23에 대한 결함 보고서를 수집하여 향후 개정판에 반영한다. 이처럼 ISO C++ 위원회는 3년 주기의 표준 개정 주기를 유지하며, 언어의 현대적 요구사항을 지속적으로 반영하고 발전시켜 나가고 있다.
6. 다른 표준화 기구와의 관계
6. 다른 표준화 기구와의 관계
ISO C++ 위원회는 국제 표준화 기구의 체계 안에서 운영된다. 이 위원회의 공식 명칭은 ISO/IEC 공동 기술 위원회 1(JTC 1) 산하의 소위원회 22(SC 22)에 속한 작업 그룹 21(WG 21)이다. 즉, 프로그래밍 언어 표준을 총괄하는 SC 22 내에서 C++ 언어의 표준화를 전담하는 실무 조직이다.
이러한 구조는 C++ 표준이 국제적으로 공인된 절차를 통해 제정됨을 의미한다. 위원회가 작성한 표준 초안은 상위 조직인 SC 22와 JTC 1을 거쳐 최종적으로 ISO와 IEC의 회원국들로부터 투표를 받아 국제 표준으로 공표된다. 이 과정에서 미국 국립 표준 협회(ANSI)와 같은 각국의 국가 표준 기구들이 중요한 역할을 한다.
C++ 표준화 작업은 다른 프로그래밍 언어 표준화 기구들과도 긴밀한 관계를 유지한다. 특히 같은 SC 22 산하의 C 언어 표준을 담당하는 작업 그룹 14(WG 14)와는 역사적, 기술적 유사성으로 인해 지속적으로 협의한다. 또한, 라이브러리나 동시성 모델과 같은 특정 기술 영역에서는 해당 분야의 전문 표준화 기구와의 협력이 이루어지기도 한다.
7. 여담
7. 여담
ISO C++ 위원회는 공식적으로는 ISO와 IEC의 합동 기술 위원회인 ISO/IEC JTC 1의 산하 분과위원회 SC 22(프로그래밍 언어, 그 환경 및 시스템 소프트웨어 인터페이스)에 속한 작업 그룹 WG 21으로 지정된다. 이 복잡한 명칭은 C++ 표준화 작업이 광범위한 국제 정보 기술 표준 체계의 일부로 운영됨을 보여준다.
위원회는 전 세계 C++ 커뮤니티에서 'C++ Standards Committee' 또는 간단히 'WG21'이라는 이름으로 더 널리 알려져 있다. 위원회의 공식 회의는 보통 1년에 3회 정도 개최되며, 미국, 유럽, 아시아 등 전 세계를 순회하며 열린다. 이 회의에는 언어 설계자, 주요 컴파일러 및 라이브러리 개발자, 학계 연구자, 그리고 업계 전문가들이 참석하여 새로운 기능 제안을 논의하고 표준 초안을 작성한다.
위원회의 작업 과정과 논의는 대체로 공개적이며, 회의 후 발표되는 회의록과 각 하위 그룹의 문서를 통해 그 진행 상황을 추적할 수 있다. 이 개방성은 C++ 언어의 발전이 커뮤니티의 광범위한 피드백과 참여 위에서 이루어지도록 하는 데 기여한다. 위원회의 결정과 논의는 때때로 활발한 공개 토론을 불러일으키며, 이는 C++ 언어의 복잡성과 다양한 사용 사례를 반영한다.
