[c++] Linux 패키지 관리자는 C ++ 20 모듈을 어떻게 처리합니까?

우리는 지금 2020 년에 있으며 오랫동안 기다려온 C ++ 모듈 기능과 함께 C ++ 20이 나옵니다. 그러나 CppCon에 대한 몇 가지 이야기를 본 후 C ++ 모듈이 이상한 장소에 있다는 것을 알았습니다. 특히 Linux 패키지 관리자 (pacman, apt, emerge 등)에게는

내가 배운 것에서 C ++ 모듈은

  1. 컴파일러에 따라 다름
    • Clang에서 GCC로 빌드 한 모듈을 사용할 수 없습니다
    • GCC 9.1 모듈은 GCC 9.2에서 작동하지 않습니다
  2. 동일한 모듈의 여러 버전을 가질 수 있습니다
    • 동일한 범위로 내 보내지 않는 한
  3. 종속성이 업데이트되면 모듈을 다시 작성해야합니다.

내 문제는 모든 롤링 릴리스 배포판에서 컴파일러가 항상 업데이트되고 사용자가 자체 컴파일러 빌드를 가질 수 있다는 것입니다. 현재 컴파일러를 업데이트하거나 update 할 수도 있습니다 libstdc++. 그러나 모듈의 libstdc++경우 컴파일러가 업데이트 될 때 업데이트되어야 한다고 제안 합니다.

컴파일러가 업데이트 할 때 패키지 관리자가 STL과 같은 업데이트를 어떻게 처리합니까? 모든 버전의 컴파일러에 대해 모든 버전의 STL 모듈을 빌드하는 것이 가능하다고 생각하지 않습니다. 사용자가 자체 STL 모듈을 구축하지 않아도됩니다.



답변

현재 (Jan / 10 / 2020), 모듈 시스템은 헤더 / lib 배포를 대체하는 것이 아니라 프로젝트 내부 기능으로 간주됩니다. Clang 커뮤니티의 사람들이 제안한 것처럼 컴파일러 독립적 AST 양식을 만들 제안이 있지만 Clang이나 Gcc 또는 Microsoft는이 작업을 수행 할 계획이 없습니다. 그래서 당신은에 대해 추측

동일한 모듈의 여러 버전을 가질 수 있습니다

옳고 한동안 계속 유지할 것입니다.

패키지 관리 플랫폼의 측면에서 여전히 해결 방법은 알려져 있지 않지만 모듈 시스템은 프로젝트 내부 기능에 가깝기 때문에 최악의 경우 “header / lib”방식이 여전히 발생합니다.

추신 : 나는 스택 오버 플로우가 이와 같은 질문에 대한 좋은 장소가 아니라고 생각합니다. 정답을 원한다면 메일 목록에 문의 하십시오.


답변