Question

Je viens de découvrir cette vieux C ++ 0x projet sur les modules en C ++ 0x.

L'idée était de sortir du système .h / Cpp actuel en écrivant uniquement les fichiers .cpp qui serait alors générer des fichiers du module lors de la compilation, qui à son tour être utilisés par les autres fichiers .cpp.

Cela ressemble à une caractéristique vraiment super.

Mais ma question est: pourquoi ont-ils le retirer de C ++ 0x? Était-ce à cause de trop de difficultés techniques? Manque de temps? Et pensez-vous qu'ils vont travailler là-dessus d'envisager pour une version ultérieure de C ++?

Était-ce utile?

La solution

De la état de C ++ Evolution (post San Francisco 2008) , la proposition a été classé comme modules "en-tête pour un TR séparé:"

  

Ces sujets sont jugés trop importants pour attendre une autre norme après C ++ 0x avant d'être publié, mais trop expérimental pour être achevés à temps pour la prochaine norme. Par conséquent, ces caractéristiques seront livrés par un rapport technique le plus tôt possible.

La proposition de modules n'était pas prêt et attendre qu'il aurait retardé la finition du C ++ 0x standard. Il n'a pas été vraiment retiré, il a été tout simplement jamais intégré dans le document de travail.

Autres conseils

C ++ Modules projet (Spécification Technique après C ++ 17)

Un projet et plusieurs révisions mises à jour pour le C / C ++ module de spécification ont été publiés par WG21 sur open-std.org. Je ne relier aux derniers documents ici:

  • Projet de travail, des extensions à C ++ pour les modules N4610 (Octobre 2016).
  • Quatrième révision a publié P0142R0 (Mars 2016).
  • pour les modules publié Libellé P0143R2 (Mars 2016).
  • L'équipe clang a publié une deuxième révision de leurs modifications: P0273R1 (Octobre 2016).

Les messages de blog suivants contiennent un résumé des réunions de normalisation et en particulier un résumé de l'état actuel des modules projet de:

  • Rapport voyage: les modules clang page . Cependant clang ne pas encore mettre en œuvre une syntaxe concrète pour les modules, qui est, aucune de ces syntaxe mentionnée a été mis en œuvre par Clang. Pour expliquer la page contient la déclaration suivante:

      

    À l'heure actuelle, il n'y a pas de syntaxe ++ C ou C pour les déclarations d'importation. Clang suivra la proposition de modules   au sein du comité de C ++. Voir la section comprend les importations pour voir comment les modules importés se aujourd'hui.

    La partie principale qui est actuellement mis en œuvre par Clang est le « Module carte Langue » qui permet le module d'écriture des cartes pour le code existant qui utilise toujours les fichiers en-tête.

    Exportations macro de modules

    Comme mentionné ci-dessus, il est encore difficile de savoir si les exportations macro feront partie de la finale Modules TS . P0273R1 la syntaxe suivante a été proposée pour l'exportation de macros:

    #export define MAX(A,B) ((A) > (B)) ? (A) : (B);
    

Clang est le premier compilateur pour commencer à travailler sur des modules avant même la normalisation est terminée. Il n'y a pas beaucoup d'une documentation encore, mais le code exemple pourrait être trouvé ici:
http://llvm.org/viewvc/llvm-project/cfe/ trunk / test / modules /

Quelques commentaires de Douglas Gregor (le développeur leur mise en œuvre):
http://clang-developers.42468.n3.nabble.com /C-modules-td3619936.html

En théorie, vous pouvez définir un tas de macros d'aide comme begin_module, end_module, import_module pour vous protéger de tout changement susceptible de la syntaxe qui viendra à l'avenir.

EDIT 1:
Douglas Gregor a publié une présentation au sujet de sa mise en œuvre:
http://llvm.org/devmtg/2012-11/Gregor- Modules.pdf? = soumettre

EDIT 2:
Le support du module dans clang ont été documentés ici:
http://clang.llvm.org/docs/Modules.html

EDIT 3:
Les modules sont désormais pris en charge dans le compilateur Microsoft C ainsi: http : //blogs.msdn.com/b/vcblog/archive/2015/12/03/c-modules-in-vs-2015-update-1.aspx

  1. Parce qu'il est très grand changement conceptuel.
  2. Il n'y a pas besoin réel de celui-ci comme la séparation des sources à h / cpp fait le travail
  3. Parce que C ++ ne définit pas comment les bibliothèques « modules » réelle sont construites. il laisse il au développeur du compilateur et éditeur de liens.
  4. « Modules » sont parfois très dépendant de la plateforme, par exemple tout à fait différentes DLL des objets partagés. Il est donc pas si trivial de fusion entre ces concepts.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top