Eclipse a deux C / C ++ indexeurs (rapide et complète): quelle est la différence?
-
11-09-2019 - |
Question
Eclipse CDT fournit deux indexeurs pour le code C / C ++ (Préférences> C / C ++> de Indexer). Quelqu'un sait-il ce que la différence exacte entre ces deux?
Le fichier d'aide est pas tout à fait éclairante:
"CDT soutient la contribution de indexeurs supplémentaires, avec 2 indexeurs étant prévu avec le défaut CDT de presse:
rapide C / C ++ Indexer: offre la plus rapide des capacités d'indexation - à la fois des déclarations et des références croisées information. Ceci est le recommandé indexeur.
Full C / C ++ Indexer: fournit l'indexation encore plus précis capacités au coût de performance - les déclarations et informations de référence croisée ».
Qu'est-ce que cela signifie d'être plus précis : il fait plus de choses index, et si oui quels sont ceux
La solution
Voici un extrait de la page CDT décrivant leur analyse et l'indexation ( CDT / modèles / Vue d'ensemble Parsing). Il donne une assez bonne description de ce que les différences sont et où l'indexeur rapide peut échouer:
L'analyse et la résolution de liaison est un processus lent, cela est un problème parce que l'utilisateur attend l'édition de code des fonctionnalités telles que le contenu aider à être vite. Pour cette raison, les magasins CDT les informations de liaison dans un sur disque cache appelé « l'index » ou « le PDOM » (Document Model persistantes Object) dans afin d'être en mesure de fournir des fonctionnalités qui répondent rapidement aux demandes des utilisateurs.
Construire l'index implique l'analyse syntaxique tout le code dans un projet, résoudre toutes les liaisons et l'écriture de ces les liaisons à l'index. L'indice est puis progressivement mis à jour chaque fois que l'utilisateur édite un fichier.
Les versions plus anciennes de soutien CDT trois différents modes d'indexation, rapide l'indexation, l'indexation complète et non indexage. Le réglage par défaut étant l'indexeur rapide parce que l'indexation d'une grand projet peut être un temps processus. La différence entre la est que indexeurs rapide et complète la indexeur rapide ignorera les fichiers d'en-tête qui ont déjà été analysés une fois, alors que le plein indexeur toujours réanalysera un fichier d'en-tête chaque fois qu'il est inclus. Cependant, il est important comprendre que la pleine indexeur, malgré son nom, est toujours pas complètement précis.
Lorsqu'un fichier d'en-tête est inclus dans un fichier source, il est soumis à aucune macros qui ont été définies à ce point. Certains en-têtes de bibliothèque utilisent des macros en collaboration avec préprocesseur conditionals (#ifdefs) a partiellement inclure un fichier d'en-tête. parfois, ces un fichier d'en-tête est inclus plus une fois dans un projet, si les macros l'en-tête dépend sont différents chaque fois que l'en-tête est inclus alors les différentes parties de l'en-tête peuvent être inclus dans différents fichiers source. Ni indexeur sera exacte dans ce scénario car il ne fera que index l'en-tête pour la première fois il est rencontré.
Le indexeur intégral têtes réanalysera il a déjà rencontré, mais il ne sera pas ré-indexer. Donc les fichiers sources qui comprennent un en-tête peut être analysé de façon plus précise, mais le lui-même en-tête ne sera indexé le une fois. L'indexeur complète est beaucoup plus lent que l'indexeur rapide car de l'analyse syntaxique supplémentaire qu'il fait, mais il est à peine plus précis. Pour cette raison l'indexeur complète n'est pas recommandé et a été retiré de la version actuelle de la CDT.
Chaque projet a un seul PDOM associé avec. Le PDOM est stocké sur le disque en tant que fichier binaire plat. le indexeur uniquement les en-têtes d'index sont inclus par les fichiers source, donc si il y a un fichier .h dans le projet ne soit pas inclus par toute .c ou .cpp, puis normalement il ne sera pas indexé. Cependant, il y a une préférence réglage pour indexer tous les fichiers dans le projet.
Autres conseils
Je crois qu'il reparses toujours tout trouvé / fichiers inclus sans « cache ». La raison si que le contenu des fichiers peuvent dépendre des définitions de préprocesseur de sorte qu'il est toujours reparsed. analyseur rapide suppose que rien n'a changé depuis le fichier a été rencontré.
(mais je peux me tromper)
Quelqu'un sait-il ce que la différence exacte entre ces deux?
Dans mon expérience, sur les tas de 32Mo.