C++ 진화 제안: 시대, 실용적 표준, 그리고 재설계된 예외 처리
C++ 개발자들은 언어의 세 가지 버전을 다루며 골머리를 앓는다: 표준에 명시되었지만 사용할 수 없는 버전, 최신 컴파일러의 실험적 버전, 그리고 널리 사용되는 실제 버전. 이 이론과 실무 간의 괴리를 바로잡아야 한다. 제안은 간단하다: 기능이 승인되면 컴파일러 구현을 위한 기술 사양으로 이동시킨다. 최소 두 개의 주요 컴파일러에서 지원된 후에야 완전한 표준에 포함된다.
이 접근법은 구현 중 문제를 드러내고, 표준 변경 없이 조정을 허용하며, 표준이 발행될 때 기능이 실제로 컴파일러에서 사용 가능하도록 보장한다. 실험가들은 GCC나 Clang에 기능이 도입된 직후 새로운 기능을 조기 액세스할 수 있다.
레거시 호환성을 버리는 '시대(Eras)' 메커니즘
.cpp 파일 상단에 '시대(eras)'를 도입하면 해당 모듈의 C++ 버전을 선언할 수 있다. 이를 통해 수십 년간 쌓인 잡동사니를 제거할 수 있다: 자동 숫자 타입 변환, signed/unsigned 비교 함정, 암시적 배열-포인터 변환, 그리고 여러 초기화 구문 등.
주요 이점:
- 레거시 코드를 다시 작성하지 않고도 한 프로젝트에서 서로 다른 시대의 파일을 섞어 사용할 수 있다.
- ABI 호환성을 유지하면서 현대 코드를 이전 표준으로 변환(transpile)할 수 있다.
- C의 후방 호환성에 짓눌리지 않고 개선된 C++을 진화시킬 수 있다.
시대는 언어가 역사적 짐의 무게로 괴물처럼 부풀어 오르는 것을 막는다.
C++ 예외 처리 재고
C++의 예외 처리는 1980년대 실패작이었다: 비용이 많이 들고, 예측 불가능하며, 모든 프로젝트의 절반에서 금지되었다. std::expected 같은 대안도 신뢰성 문제를 해결하지 못한다. 우리는 시대와 통합된 제로 비용 예외가 필요하다: 최근 시대의 파일에서만 새로운 예외를 사용.
구형 코드와 신규 코드를 섞는 것은 통합 문제를 일으키지만, 현 상태는 지속 불가능하다. '예외 사용'과 '예외 미사용'으로 나뉜 커뮤니티는 진전을 막고 있다.
주요 요점
- 표준은 기술 사양을 앞지르지 말고 구현된 기능을 문서화해야 한다.
- 시대는 레거시와 현대 코드를 섞으면서 새로운 코드에서 역사적 실수를 제거할 수 있게 한다.
- 새로운 제로 비용 예외는 시대별로 도입되어 오버헤드를 줄이고 예측성을 높인다.
- 이러한 변화 없이는 C++이 PL/I의 운명을 맞을 수 있다: 복잡성 폭증과 이득 없음.
- 위원회는 전술적 세부 사항보다 전략적 메커니즘을 우선해야 한다.
결론 및 전망
C++이 앞으로 40년 더 번영하려면 대담한 변화가 필요하다: 실용적 표준, 진화를 위한 시대, 그리고 예외 처리 재시작. 이는 생태계를 통합하고, 새로운 코드를 단순화하며, 레거시를 보존한다. 위원회는 선언에서 벗어나 실제 실무를 문서화해야 하며, 과거 짐 없이 언어가 적응할 수 있게 해야 한다.
— Editorial Team
아직 댓글이 없습니다.