In che modo i gestori di pacchetti Linux gestiscono i moduli C ++ 20?


12

Siamo nel 2020 e C ++ 20 sta arrivando, insieme alla tanto attesa funzionalità dei moduli C ++. Ma dopo aver visto alcuni discorsi su CppCon trovo che i moduli C ++ si trovano in un posto strano, specialmente per i gestori di pacchetti Linux (pacman, apt, emerge, ecc ...)

Da quello che ho imparato, i moduli C ++ sono

  1. Compilatore dipendente
    • Non è possibile utilizzare un modulo creato da GCC in Clang
    • I moduli GCC 9.1 non funzioneranno su GCC 9.2
  2. Puoi avere molte versioni diverse dello stesso modulo
    • Finché non vengono esportati nello stesso ambito
  3. È necessario ricostruire un modulo se le sue dipendenze si aggiornano

Il mio problema è che in tutte le distribuzioni a rilascio continuo i compilatori vengono sempre aggiornati e l'utente potrebbe avere la propria build di compilatore. Attualmente si può semplicemente aggiornare il compilatore o anche aggiornare libstdc++. Ma con i moduli, sembra suggerire che libstdc++debba essere aggiornato quando il compilatore si aggiorna.

In che modo il gestore pacchetti gestirà l'aggiornamento, ad esempio, l'STL quando il compilatore si aggiorna? Non penso che sia realizzabile ogni versione del modulo STL per ogni versione del compilatore. Né l'utente deve costruire il proprio modulo STL come una buona idea.


1
" Non è possibile utilizzare un modulo creato da GCC in Clang " Non è possibile utilizzare i risultati compilati di un modulo creato da GCC in Clang.
Nicol Bolas,

1
Non riesco a capire il problema. È possibile distribuire i file del modulo precompilato, ma non è un must. Ogni utente può compilarli una volta per ogni compilatore / versione e tutto va bene. Se il pacchetto distro fornisce i file precompilati, salva solo una singola compilazione che attualmente eseguiamo su ogni compilazione. Qual è il vantaggio di fornire moduli precompilati? Il download / installazione potrebbe richiedere più tempo della compilazione una volta.
Klaus

Che tipo di anawer immagini che non sarebbe pura speculazione?
n. 'pronomi' m.

@Klaus Esatto, non ci sono vantaggi. Ma la maggior parte delle applicazioni sono divise in 2 parti. Un'interfaccia e la libreria principale. In questo modo le persone possono interagire direttamente con le funzionalità principali. Prendi yosys per esempio. È sputato in libyosys e yosys. Se libyosys decide di utilizzare i moduli per build più veloci, libyosys deve essere creato da ciascun utente. Trasformare efficacemente ogni gestore di pacchetti in AUR o emerge.
Mary Chang,

@ n.'pronouns'm. Speravo che uno sviluppatore di pacchetti manager vedesse la domanda e spiegasse come stanno risolvendo il problema.
Mary Chang,

Risposte:


1

Per ora (10 gennaio 2020), il sistema di moduli è considerato più una caratteristica interna al progetto piuttosto che una sostituzione della distribuzione header / lib. Come suggeriscono i ragazzi della comunità di Clang, sebbene ci sia una proposta per creare un modulo AST indipendente dal compilatore, né Clang né Gcc né Microsoft hanno in programma di farlo. Quindi indovina

Puoi avere molte versioni diverse dello stesso modulo

è giusto e rimarrà fermo per qualche tempo.

Come aspetto della piattaforma di gestione dei pacchetti, la risoluzione è ancora sconosciuta, ma poiché il sistema dei moduli è più una caratteristica interna al progetto, il caso peggiore è che il modo "header / lib" continuerà ad avere luogo.

PS Penso che stackoverflow non sia un buon posto per domande come queste, se vuoi davvero una risposta, chiedi a questa mailing list.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.