2010-04-11 9 views
20

Pour ma propre éducation, je suis curieux de savoir ce que les compilateurs utilisent en tant que front-end et back-end C++. Pouvez-vous m'éclairer là où les technologies suivantes sont utilisées et quelles sont leurs caractéristiques/avantages éventuels?Compilateurs C++ et frontaux/frontaux

  • Open64 - est-ce back-end, front-end ou les deux? Quels compilateurs l'utilisent? Je le rencontre dans le compilateur CUDA. EDG - pour autant que je sache, il s'agit d'une utilisation frontale par les compilateurs Intel et COMEAU. les autres compilateurs l'utilisent-ils? J'ai trouvé pas mal de références dans le code source boost.

  • ANTLR - c'est un analyseur général. Est-ce que les compilateurs communs l'utilisent?

compilateurs: En ce qui concerne

  • avec bout avant/arrière-plan ne suite compilateur gcc utilise? at-il un héritage commun avec un autre compilateur? Qu'est-ce que les compilateurs PGI et PathScale frontaux/dorsaux utilisent?

  • ? Ce que le compilateur XL frontal/principal utilise (offre IBM)

des liens approfondis sur Internet ou votre savoir-faire personnel serait formidable. J'ai fait quelques recherches sur Google, mais les informations que je rencontrais généralement étaient plutôt superficielles.

Merci.

Répondre

11

EDG est un frontal utilisé par Intel et Comeau. Voir la liste de EDG customers pour d'autres utilisateurs.

ANTLR est un générateur de parseur. Je ne suis pas au courant de tout compilateur C++ construit autour d'un analyseur qui a été construit avec ANTLR (cela ne signifie pas qu'il ne pourrait pas exister si). GCC est une suite de compilateurs, avec des frontaux pour C, C++, Fortran, Ada, Java, etc., et des back-ends pour plus de processeurs que je ne voudrais y penser. Open64 est également une suite de compilateurs comprenant plusieurs frontaux (pour C, C++, Fortran, et éventuellement d'autres dont je ne me souviens pas pour le moment) et des back-ends (ciblant X64, Itanium, ARM, et, encore une fois, probablement d'autres dont je ne me souviens pas et/ou que je ne connais pas). Je crois que son origine (jeu de mots notés par non prévu) est le (s) compilateur (s) de SGI. Je me souviens d'avoir lu quelque chose suggérant qu'Open64 était dérivé d'une version de l'interface frontale GCC, mais je ne sais pas 1) comment cela reste-t-il à GCC en interne, ou 2) la version de GCC à partir de laquelle dérivé - mais ça fait assez longtemps que je suppose que c'était GCC 3.x au plus récent, et probablement GCC 2.x. Je pense que PathScale a créé au moins un compilateur dérivé d'Open64, mais ils peuvent en avoir d'autres. Pour autant que je sache, le compilateur IBM est entièrement créé par ses soins. Je deviner IBM (maintenant abandonné) VisualAge pour C++ partagé un peu de patrimoine/développement/code avec XL C++, mais ne le savent pas à coup sûr, et ne peut même pas commencer à deviner à la mesure de celui-ci, même en supposant que c'est vrai.

+0

merci. Avec nvcc (open 64), je rencontre des problèmes majeurs lorsque j'essaie d'utiliser des traits de type boost (ou tout ce qui l'inclut). j'espère que je vais avoir une référence lorsque vous cherchez des solutions de contournement – Anycorn

+1

C++ n'est pas LALR, c'est pourquoi (nom de votre générateur d'analyseur préféré) n'est pas utilisé pour le frontal. ANTLR fonctionne sur la base de LL (*) au lieu de LALR, mais je pue aussi que cela n'est pas suffisant pour certaines syntaxes plus compliquées de C++. La grammaire C++ n'est pas contextuelle, ce qui est une exigence pour la plupart des générateurs d'analyseurs généralisés. –

+0

@Ben: Bien que ce soit assez précis en ce qui concerne la plupart des générateurs d'analyseurs, il y en a quelques-uns qui devraient être capables de gérer C++. Je suis raisonnablement certain que C++ devrait tenir dans les (quelques) contraintes d'une grammaire GLR. Quelques générateurs peuvent traiter des grammaires GLR (par exemple, Elkhound). –

6

avec frontend/backend la suite du compilateur gcc est-elle utilisée? at-il un héritage commun avec un autre compilateur?

L'acronyme « GCC » signifie « collection de compilateur GNU » (à l'origine « compilateur GNU C ») et cela donne déjà un indice: compilateurs GNU sont une collection des compilateurs, notamment pour C et C++, mais également pour Fortran, Objective-C et autres. Ils partagent une représentation commune back-end et intermédiaire développée spécifiquement pour GCC.

Les frontaux sont tous personnalisés pour le GCC. Certains ont été apportés par des tiers, notamment le front-end Objective-C, apporté par Apple.

7

Le projet Clang fournit de nouveaux frontaux pour C/C++/Objective C sur le backend LLVM. Le projet LLVM fournit également un LLVM-gcc, en utilisant le frontal GCC et le backend LLVM. Le projet DragonEgg cherche à remplacer le backend GCC par LLVM.

Le Codeplay VectorC, Passoire et Offload compilateurs utilisent un front-end personnalisé et back-end

Questions connexes