Red de conocimiento informático - Computadora portátil - ¿Qué hace que Clang sea mejor que el compilador GCC?

¿Qué hace que Clang sea mejor que el compilador GCC?

La velocidad de compilación es más rápida, el resultado de la compilación es más pequeño y las indicaciones de error son más amigables. Especialmente en situaciones más extremas.

Escribí un intérprete de Scheme hace más de dos años, con alrededor de 2000 líneas de análisis léxico y sintaxis, usando Boost.Spirit, un marco que depende en gran medida de la metaprogramación de plantillas C. La situación al compilar con g 4.2 en ese momento era:

1. La velocidad de compilación era extremadamente lenta: una compilación completa demoraba 20 minutos

2. El consumo de memoria durante el proceso de compilación. era extremadamente grande: una sola memoria de instancia g El consumo máximo supera 1G

3 La salida intermedia es enorme: todos los archivos .o compilados suman aproximadamente 1 ~ 2G y el producto de enlace de depuración supera los 200M.

4. Los errores de compilación son extremadamente difíciles de entender: los errores de compilación suelen tener una longitud de decenas de kilobytes y son básicamente ilegibles. Lo más terrible es que los errores de compilación suelen ser lo suficientemente largos como para ser truncados por g. No se puede ver la ubicación real del error. Básicamente, solo puedes depurar mirando el código desnudo.

No me importa si hay un problema con la forma en que uso Spirit o el problema con el marco de Spirit. sí mismo. Como realmente no podía soportar g, probé clang en su lugar. Estaba usando clang 2.8 en ese momento y acababa de compilar Boost por completo y estaba muy satisfecho con el efecto:

1. La velocidad de compilación ha mejorado significativamente, lo recuerdo. aproximadamente 1/3 o 1/4 de g

2 Parece haber poca diferencia en el consumo de memoria durante el proceso de compilación

3. también 1/3 o 1/4 de g

4 En comparación con g, la legibilidad de los errores de compilación ha mejorado. Al menos no habrá problema de que los errores de compilación sean demasiado largos y se trunquen.

La mayor deficiencia en ese momento era que el archivo ejecutable compilado por clang no podía Al depurar con gdb, debe usar g para compilar nuevamente cuando necesite usar el depurador. Sin embargo, este problema se resolvió más tarde. No sé si clang es compatible con gdb o gdb. Al menos los archivos binarios que actualmente compilo usando clang 3.0 en Ubuntu se pueden depurar exitosamente con gdb.

El último punto, que también han mencionado otros estudiantes, es que Clang utiliza el protocolo BSD. Esta es una razón importante por la que Apple financió LLVM y FreeBSD para eliminar GCC y reemplazarlos con Clang.