2009-04-18 7 views
13

Eclipse CDT proporciona dos indizadores para el código C/C++ (Preferencias> C/C++> Indizador). ¿Alguien sabe cuál es la diferencia exacta entre estos dos?Eclipse tiene dos indexadores C/C++ (rápido y completo): ¿cuál es la diferencia?

El archivo de ayuda no es exactamente esclarecedor:

"CDT apoya la contribución de indexadores adicionales, con 2 indexadores se le facilite la liberación predeterminado CDT :

  • rápido Indizador C/C++: proporciona capacidades de indexación más rápidas, tanto declaraciones como información de referencia . Este es el recomendado. indexador.

  • completa C/C++ paso a paso: ofrece aún más precisos indexación capacidades a costa de rendimiento - ambas declaraciones y información de referencia cruzada "

¿Qué significa ser más. preciso: ¿indexa más cosas, y si es así?

+1

¿Sigue siendo el caso, en Eclipse Kepler, de que haya dos indexadores disponibles? No veo dos ... tal vez uno ha sido eliminado? – einpoklum

Respuesta

13

Aquí hay un extracto de la página CDT que describe su análisis e indexación (CDT/designs/Overview of Parsing). Se da una descripción bastante buena de lo que son las diferencias y en el que el controlador paso a paso rápido pueden fallar:

de análisis y resolución de unión es un proceso lento , este es un problema debido a que el usuario espera que la edición de código características tales como asistencia de contenido para ser rápido. Por esta razón las tiendas CDT información vinculante en un disco en caché llamado “índice” o “la PDom” (modelo de objetos persistentes de documentos) en fin de ser capaz de proporcionar características que responden rápidamente a las peticiones de los usuarios.

La construcción del índice implica analizar todo el código en un proyecto, resolver todos los enlaces y escribir esas fijaciones al índice. El índice es y luego se actualiza incrementalmente cada vez que el usuario edita un archivo.

Las versiones anteriores de apoyo CDT tres modos diferentes de indexación, rápido indexación, indexación completa y sin indexación. La configuración predeterminada es el indexador rápido porque la indexación de un proyecto grande puede consumir mucho tiempo en el proceso . La diferencia entre los indexadores rápidos y completos es que el indexador rápida saltará archivos de cabecera que ya se han analizado una vez, mientras que el indexador completa siempre re-analizar un archivo de cabecera cada vez que está incluido. Sin embargo, es importante saber que el indexador completo, a pesar de su nombre, aún no es completamente preciso.

Cuando un archivo de cabecera se incluye en un archivo fuente que está sujeta a ningún macros que se han definido en ese punto . Algunos encabezados de biblioteca usan las macros junto con el preprocesador condicionales (#ifdefs) parcialmente incluyen un archivo de encabezado. A veces, tales un archivo de cabecera se incluye más de una vez en un proyecto, si las macros que la cabecera depende son diferentes cada vez que se incluye el encabezado entonces diferentes partes de la cabecera pueden incluidos en diferentes archivos de origen. Ningún indexador será preciso en este escenario porque solo mostrará el encabezado la primera vez que se encuentre .

El indexador completo volverá a analizar los encabezados que ya ha encontrado, pero no los volverá a indexar. Por lo tanto, los archivos de origen que incluyen un encabezado pueden analizarse con mayor precisión, , pero el encabezado solo se indexará el una vez. El indexador completo es mucho más lento que el indexador rápido porque del análisis extra lo hace, pero es solo marginalmente más preciso. Para esta razón, el indexador completo no es recomendado y se ha eliminado de la versión actual de CDT.

Cada proyecto tiene asociado un solo PDOM . El PDOM se almacena en el disco como un archivo binario plano. El indexador solo indexará los encabezados que están incluidos en los archivos fuente, por lo que si hay un archivo .h en el proyecto que no está siendo incluido por ningún archivo .c o .cpp, entonces normalmente no se obtendrá indexado. Sin embargo, hay una configuración de preferencia para indexar todos los archivos en el proyecto .

+6

Escribí esa entrada en la página Wiki y la volví a leer aquí. Me di cuenta de que estaba mal. El indexador completo no es del todo exacto y se ha eliminado de la versión actual de CDT. He actualizado la wiki y esta respuesta es correcta (y he verificado con otros desarrolladores de CDT para asegurarme de que es correcta). –

+1

@MikeKucera, todos los que conozco que usan eclipse usan una versión anterior para que puedan obtener el indexador completo, ¿sabes si alguna vez volverá a las versiones actuales? –

+0

Ya ni siquiera llamamos al indexador restante el indexador 'rápido', ya que solo ha habido un indexador durante años, ahora solo empezamos a llamarlo 'el indexador'. Ha obtenido muchas mejoras de precisión y velocidad últimamente. Por ejemplo, el indexador ahora indexará un archivo de encabezado varias veces si se incluye más de una vez en diferentes contextos (es decir, diferentes conjuntos de macros significativas). Eso te devuelve una gran parte de la precisión que tenía el antiguo indexador completo sin la gran penalización de rendimiento. Recomiendo encarecidamente que usted y sus amigos actualicen a la última versión de CDT. –

1

Creo que siempre reparses cualquier archivo encontrado/incluido sin "almacenamiento en caché". razón por la cual el contenido de los archivos puede depender de las definiciones del preprocesador, por lo que siempre se repasa. El analizador rápido asume que nada ha cambiado desde la primera vez que se encontró el archivo.

(pero podría estar equivocado)

1

¿Alguien sabe cuál es la diferencia exacta entre estos dos?

En mi experiencia, aproximadamente 32 MB de capacidad.

Cuestiones relacionadas