2011-03-28 8 views
13

He estado usando omniCppComplete + ctags por un tiempo, y quiero hacer una mejora adicional en la finalización del código.gccsense vs. clang_complete

De acuerdo con la sugerencia aquí [1], gccsense y clang_complete parecen ser alternativas. Sin embargo, no estoy seguro de cuál es mejor. Alguna idea sobre su rendimiento?
Gracias!

Actualización: Después de probar clang_complete, encontré la velocidad de finalización extremadamente inaceptable. Luego lo intenté usando libclang.dylib, que acelera mucho pero todavía hace que uno se sienta rezagado. Creo que debería quedarme con los ctags por ahora.

Respuesta

21

Probablemente deberías usar clang_completo, no gccsense.

El punto principal aquí es la arquitectura de los dos. La idea detrás de ambas soluciones es muy similar: no puede obtener la finalización normal de C++ sin acceso a la información interna del compilador (gcc) (Árbol de sintaxis abstracta) mientras que gcc no le proporciona suficientes interfaces para eso. La parte de implementación de acceder a esta información es bastante diferente aquí: gccsense es una especie de "hack": es una compilación personalizada de gcc capaz de almacenar la información necesaria para luego proporcionarla al complemento, mientras que el comando clang_complete va en la dirección contraria al usar una alternativa compilador: clang, uno de los principales objetivos de la creación fue hacer que AST sea fácilmente accesible mediante herramientas externas.

Por lo tanto, en caso de usar gccsense tendrá que compilar su código con un tipo de compilador gcc personalizado, que ya está un poco desactualizado (gccsense usa gcc 4.4) ahora y necesitará constantemente soporte del desarrollador en la característica . Por el contrario, clang_complete no depende tanto del compilador de clang, sino que lo usa como herramienta externa.

En cuanto a rendimiento: nuevamente clang fue diseñado para ser más rápido que gcc y lo es. Clang_complete puede ser un poco más lento en Windows que en MacOS/Linux, sin embargo, gccsense no puede compilarse para Windows en ese momento.

+0

Eso es muy plausible. Voy a darle una oportunidad a clang_complete. ¡Gracias por el consejo! –

+1

Bueno, no lo creo. Acabo de probar gccsense, y se completa sin tener que compilar nada antes de trabajar en tu código. Fácil de instalar y usar. Usando CEDET, no puede encontrar las funciones dentro de boost :: mutex, pero gccsense puede verlo. Sin embargo, la desventaja es que gccsense no puede completarse en "." o ">", así que dejaré ese problema a CEDET, y cuando CEDET no puede hacer su trabajo, uso gccsense (con la vinculación de claves, por supuesto). – Amumu

+0

¡Gracias por la respuesta! – rdo

Cuestiones relacionadas