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


12

우리는 지금 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 모듈을 구축하지 않아도됩니다.


1
" Clang에서 GCC에 의해 작성된 모듈을 사용할 수 없습니다" Clang에서 GCC에 의해 작성된 모듈 의 컴파일 된 결과 를 사용할 수 없습니다 .
Nicol Bolas

1
나는 문제를 잡을 수 없다. 사전 컴파일 된 모듈 파일을 분배 할 수 있지만 필수는 아닙니다. 모든 사용자는 모든 컴파일러 / 버전마다 한 번씩 컴파일 할 수 있으며 모든 것이 정상입니다. 배포 패키지가 사전 컴파일 된 파일을 제공하는 경우 현재 모든 컴파일에서 수행하는 단일 컴파일 만 저장합니다. 사전 컴파일 된 모듈을 제공하면 어떤 이점이 있습니까? 다운로드 / 설치는 컴파일 시간이 한 번 더 오래 걸릴 수 있습니다.
클라우스

순수한 추측이 아닌 어떤 종류의 분석가를 생각하십니까?
n. '대명사'm.

@ 클라우스 정확히는 아무런 이점이 없습니다. 그러나 대부분의 응용 프로그램은 두 부분으로 나뉩니다. 인터페이스와 핵심 라이브러리. 따라서 사람들은 핵심 기능과 직접 상호 작용할 수 있습니다. 예를 들어 yosys를 보자. libyosys와 yosys에 연결되어 있습니다. libyosys가 더 빠른 빌드를 위해 모듈을 사용하기로 결정한 경우, 각 사용자가 libyosys를 빌드해야합니다. 모든 패키지 관리자를 효과적으로 AUR 또는 출현으로 전환
Mary Chang

@n. '대명사입니다. 패키지 관리자 개발자가 질문을보고 그들이 어떻게 문제를 해결하고 있는지 설명하기를 바랐습니다.
Mary Chang

답변:


1

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

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

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

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

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.