홈으로 돌아가기

C++의 진화: epochs와 표준

이 기사는 C++의 장기 개발을 위한 메커니즘을 제안합니다: 현실적인 표준을 위한 기술 명세서, 혼합 호환성을 위한 epochs와 zero-cost exceptions. 이를 통해 언어가 레거시 부담 없이 진화할 수 있습니다.

미래의 C++: epochs, TS 및 새로운 예외
Advertisement 728x90

C++ 진화 제안: 시대, 실용적 표준, 그리고 재설계된 예외 처리

C++ 개발자들은 언어의 세 가지 버전을 다루며 골머리를 앓는다: 표준에 명시되었지만 사용할 수 없는 버전, 최신 컴파일러의 실험적 버전, 그리고 널리 사용되는 실제 버전. 이 이론과 실무 간의 괴리를 바로잡아야 한다. 제안은 간단하다: 기능이 승인되면 컴파일러 구현을 위한 기술 사양으로 이동시킨다. 최소 두 개의 주요 컴파일러에서 지원된 후에야 완전한 표준에 포함된다.

이 접근법은 구현 중 문제를 드러내고, 표준 변경 없이 조정을 허용하며, 표준이 발행될 때 기능이 실제로 컴파일러에서 사용 가능하도록 보장한다. 실험가들은 GCC나 Clang에 기능이 도입된 직후 새로운 기능을 조기 액세스할 수 있다.

레거시 호환성을 버리는 '시대(Eras)' 메커니즘

.cpp 파일 상단에 '시대(eras)'를 도입하면 해당 모듈의 C++ 버전을 선언할 수 있다. 이를 통해 수십 년간 쌓인 잡동사니를 제거할 수 있다: 자동 숫자 타입 변환, signed/unsigned 비교 함정, 암시적 배열-포인터 변환, 그리고 여러 초기화 구문 등.

Google AdInline article slot

주요 이점:

  • 레거시 코드를 다시 작성하지 않고도 한 프로젝트에서 서로 다른 시대의 파일을 섞어 사용할 수 있다.
  • ABI 호환성을 유지하면서 현대 코드를 이전 표준으로 변환(transpile)할 수 있다.
  • C의 후방 호환성에 짓눌리지 않고 개선된 C++을 진화시킬 수 있다.

시대는 언어가 역사적 짐의 무게로 괴물처럼 부풀어 오르는 것을 막는다.

C++ 예외 처리 재고

C++의 예외 처리는 1980년대 실패작이었다: 비용이 많이 들고, 예측 불가능하며, 모든 프로젝트의 절반에서 금지되었다. std::expected 같은 대안도 신뢰성 문제를 해결하지 못한다. 우리는 시대와 통합된 제로 비용 예외가 필요하다: 최근 시대의 파일에서만 새로운 예외를 사용.

Google AdInline article slot

구형 코드와 신규 코드를 섞는 것은 통합 문제를 일으키지만, 현 상태는 지속 불가능하다. '예외 사용'과 '예외 미사용'으로 나뉜 커뮤니티는 진전을 막고 있다.

주요 요점

  • 표준은 기술 사양을 앞지르지 말고 구현된 기능을 문서화해야 한다.
  • 시대는 레거시와 현대 코드를 섞으면서 새로운 코드에서 역사적 실수를 제거할 수 있게 한다.
  • 새로운 제로 비용 예외는 시대별로 도입되어 오버헤드를 줄이고 예측성을 높인다.
  • 이러한 변화 없이는 C++이 PL/I의 운명을 맞을 수 있다: 복잡성 폭증과 이득 없음.
  • 위원회는 전술적 세부 사항보다 전략적 메커니즘을 우선해야 한다.

결론 및 전망

C++이 앞으로 40년 더 번영하려면 대담한 변화가 필요하다: 실용적 표준, 진화를 위한 시대, 그리고 예외 처리 재시작. 이는 생태계를 통합하고, 새로운 코드를 단순화하며, 레거시를 보존한다. 위원회는 선언에서 벗어나 실제 실무를 문서화해야 하며, 과거 짐 없이 언어가 적응할 수 있게 해야 한다.

— Editorial Team

Google AdInline article slot
Advertisement 728x90

다음 읽기