10P by neo 2일전 | favorite | 댓글 3개
  • 방언(Dialect) 없는 단일 C++의 꿈은 이미 오래전에 사라진 것으로 보임
  • Reddit와 그 오렌지색 웹사이트(HN), 그리고 공식 C++ 표준 위원회 회의에서 C++의 미래에 대한 많은 논쟁이 있음

C++의 현재 상태

  • C++의 진화 작업 그룹(EWG)은 P3466 R0를 채택하기로 합의함.
    • ABI(응용 프로그램 이진 인터페이스) 중단 없이 C 및 이전 C++과의 링크 호환성을 유지함.
    • '바이럴 주석'을 사용하지 않음.
    • ABI 중단과 제로 오버헤드 원칙이라는 상충되는 목표를 고수함.
  • 미국 정부는 C++ 사용을 중단하도록 권고함.
    • CISA, NSA, 백악관 등 여러 기관이 메모리 안전하지 않은 언어 사용에 대한 경고를 발표함.
  • 대형 기술 기업들이 Rust를 채택하고 있음.
    • Microsoft, Google, AWS 등이 Rust를 사용하고 있음.
    • Google은 C++/Rust 상호 운영 툴까지 개발
  • C++ 커뮤니티 내 내부 갈등
    • Herb Sutter가 Microsoft를 떠나고 MSVC가 C++23 기능 구현에 느리다는 소식이 있음.
    • Google은 C++ 개발 프로세스 참여를 줄이고 자체 C++ 후속 언어를 개발 중임.
    • 기존 C++ 표준 위원회 프로세스에 대한 신뢰 부족
    • 모듈 기능은 여전히 미완성 상태
    • '안전 프로파일(‘Safety Profiles’)'이 이상한 상태에 있음

C++의 두 문화

  • 현대적이고 자동화된 도구 사용 그룹
    • Google과 같은 대형 기술 기업들이 주요 예
    • 최신 C++ 표준(C++17 이상)을 사용하며, 자동화된 빌드 및 테스트 도구 지원
    • 코드 품질 유지에 투자하며 지속적으로 코드베이스를 현대화
  • 레거시 C++ 그룹
    • 오래된 환경과 도구에서 운영되는 코드베이스
    • 소스 코드 없이 운영되거나 빌드 시스템이 구식
    • 유지보수 비용이 높고 현대화의 장벽이 큼
  • 주요 차이점은 도구와 프로세스
    • 현대 C++ 그룹은 통합 빌드 시스템과 정적 분석기, 포매터, 린터 등 도구에 의존
    • 레거시 그룹은 이러한 도구와 프로세스 부재로 인해 운영 효율성이 낮음

결과 및 영향

  • 안전 프로파일
    • 기존 레거시 코드의 변경 없이 안전성을 강화하려는 목적
    • 현대적 C++의 요구보다는 기존 코드 유지에 초점
  • 모듈
    • 헤더 파일을 모듈로 간단히 가져올 수 있도록 설계
    • 레거시 코드와의 호환성을 고려해 설계됨
  • C++ 커뮤니티의 분열
    • 현대와 레거시 그룹 간의 요구사항 불일치로 커뮤니티 내 갈등 심화
    • C++ 표준 위원회의 보수적 접근이 이러한 갈등을 완화하려는 시도로 보임

대안적 관점

  • Safe C++ 같은 대안적인 아이디어는 커뮤니티 내에서 환영받지 못하고 있음
  • 표준 위원회의 일부 멤버가 개인적인 미적 기준을 고수하며 변화에 저항하는 경우가 있다는 비판 존재

Rust 는 gui 개발 생태계가 아직 없어서, 채택하질 못하고 있긴 한데요
Rust를 사용하는 괜찮은 gui 프레임워크가 나와야할텐데...

러스트가 C++를 대체할 수 있는지는 잘 모르겠지만
신규 C++ 프로젝트가 거의 보이지 않는 것은 사실이죠...
C++ 위원회는 탈태보다 본래의 가치를 더 중시하는 방향이 옳다고 정한 듯 하네요.

Hacker News 의견
  • Google의 C++ 코드는 종종 최신 버전에서 작동하지 않으며, 개발자들이 이를 수정할 의지가 없는 경우가 많음. 이는 Google의 코드가 오래된 것과 현대적인 것 사이의 중간 지점에 머물러 있기 때문임

    • Google의 C++ 코드는 상태 기계와 수동 약한 포인터로 인해 메모리 손상이 발생할 수 있음
    • Google이 C++ 생태계를 떠나는 것을 긍정적으로 봄
    • Rust 생태계에 대한 Google의 관심이 긍정적이지 않을 것이라고 생각함
  • C++ 표준 작업자들에게 현재의 C++ 방향성을 지지하며, C++의 미래에 대해 온라인에서 나오는 소음은 무시하라고 조언함

    • Rust를 사용하여 정적 수명 검사를 원하는 사람들에게 Rust를 사용하라고 권장함
    • 정부 계약자라면 Rust를 사용하라고 제안함
    • 기존의 C++ 개발 프로세스가 잘 작동하고 있다고 주장함
  • C++를 사용하는 유일한 집단은 리팩토링하기에는 너무 큰 레거시 코드베이스를 가진 집단일 것이라고 주장함

    • WG21에 대한 신뢰를 잃은 다른 집단은 새로운 언어로 이동하고 있음
    • Herb Sutter가 C++에 수명 주석을 추가하는 것이 다른 언어로의 "출구 램프"를 만들 것이라고 언급함
  • Rust의 에디션 시스템이 매우 잘 작동한다고 평가함

    • C++에도 이러한 시스템이 도입된다면, 모듈 경계에 제한이 있을 수 있지만 두 진영이 모두 만족할 수 있는 방법이 될 수 있다고 제안함
  • Herb Sutter가 Microsoft를 떠난다는 소식이 Microsoft에 좋지 않은 영향을 미칠 것이라고 우려함

    • Herb가 C++ 표준 채택을 주도하고 더 나은 미래 비전을 위해 노력했다고 평가함
    • Microsoft의 제안이었던 std::span이 범위 검사를 제외하고 채택된 것을 언급하며, Herb의 노력이 필요했다고 주장함
  • 자동화된 테스트가 두 진영을 구분하는 주요 요소라고 강조함

    • 레거시 C++ 앱에서 자동화된 테스트가 없으면 코드 변경이 앱을 손상시킬 위험이 있다고 설명함
    • C++의 특성상 무해해 보이는 코드 변경도 문제를 일으킬 수 있다고 경고함
  • C++의 매력을 떨어뜨린 주요 요인은 모듈의 부재라고 주장함

    • 모듈이 있었다면 C++ 커뮤니티가 형성될 수 있었을 것이라고 평가함
  • Herb Sutter는 타협을 이끌어내는 데 능숙했지만, Google은 자신의 의제를 밀어붙였다고 비교함

  • 대규모 코드베이스를 가진 고객들은 엄격한 규칙을 만족시키기 위해 코드의 1%도 변경하지 않으려 한다고 언급함

    • 많은 회사들이 새로운 표준으로 업그레이드하는 데 시간을 투자하고 있다고 주장함
  • Python과 Javascript/Node/Typescript에도 여러 파벌이 존재한다고 설명함

    • Rust는 이러한 파벌을 피하려고 했지만, 학습 곡선이 높아졌다고 평가함
    • Go는 파벌을 방지하고 널리 채택되기 위한 시도를 했지만, 제네릭을 도입해야 했다고 언급함