Saltar al contenido

Chrome para Windows reemplaza el compilador de Microsoft por Clang

12 marzo, 2018

El navegador Chrome de Google, uno de los más usados, ahora se compila utilizando el compilador Clang en Windows. Desarrollado previamente utilizando el compilador Microsoft C ++, Google ahora usa el mismo compilador para Windows, MacOS, Linux y Android. Este cambio de compilación hace que Chrome sea posiblemente el primer gran proyecto de software en usar Clang en Windows.

Chrome en macOS y Linux se ha construido durante mucho tiempo utilizando el compilador Clang. Así como la cadena de herramientas LLVM. El compilador de código abierto es el compilador de elección en macOS. Por lo que es la opción natural allí, y también es una opción de primera clase para Linux.

Aunque el venerable GCC sigue siendo la principal elección del compilador en Linux. Al usar Clang en su lugar, Google se aseguró de tener solo un conjunto de rarezas de compilación para trabajar en lugar de dos conjuntos.

No obstante, Chrome en Windows ha utilizado el compilador de Visual C++ de Microsoft. El compilador de Visual C++ es el compilador más utilizado y popular en Windows. Y lo que es más importante, es el compilador con el mejor soporte para la amplia gama de herramientas de diagnóstico y depuración de Windows.

El depurador de Visual Studio es muy querido por la comunidad de C++. Y otras herramientas, como el depurador de WinDbg (a menudo utilizado para analizar los volcados de memoria), son partes centrales de la experiencia del desarrollador de Windows.

Google y Clang

Allá por 2013, Google decidió que quería usar Clang en todas partes, incluido Windows. Usar el mismo compilador en todas partes hace que el desarrollo sea mucho más fácil. Porque se tiene el mismo conjunto de errores para tratar en cada plataforma. Clang en particular tiene herramientas de diagnóstico como ASan y UBSan que Google quería poder usar.

Solo había un pequeño punto de fricción: Clang y LLVM realmente no tenían mucho soporte de Windows. Esto era cierto de forma superficial, ya que Clang, por ejemplo, admite diferentes opciones de línea de comandos para el compilador de Microsoft. Por esto, podría funcionar como un reemplazo directo y de muchas maneras más profundas.

Por ejemplo, las herramientas de Windows se basan en el formato de archivo PDB («base de datos de programas») para almacenar información de depuración. Los depuradores de Microsoft y una amplia gama de herramientas de terceros suponen que los programas de Windows tendrán sus datos de depuración disponibles como archivos PDB.

LLVM, sin embargo, no pudo producir PDB. Al igual que con casi cualquier proyecto de software grande, las API de Windows también requieren ciertas extensiones no estándar. Unas para las que Clang tuvo que ser modificado.

Mejoras en LLVM

El primer paso que Chrome pudiera usar Clang en Windows fue mejorar Clang y LLVM. Esto para darles soporte de primera clase para Windows. Google ensambló un equipo para trabajar en esto. El navegador se construyó con éxito con Clang en Windows en 2015. Y Google lo probó primero en su canal de desarrollo Canary, luego en los canales de Desarrollo y Beta. Con Chrome 64, el canal de navegador estable está cambiando a usar Clang.

Google hizo la mayor parte del desarrollo del compilador para que esto suceda. Sin embargo, parte del trabajo necesario fue realizado por Microsoft. El formato PDB no estaba documentado en gran medida (y la documentación que existía era muy obsoleta).

Por lo tanto, los desarrolladores de LLVM pidieron ayuda: Microsoft respondió publicando una gran parte de la fuente utilizada para producir PDB. Microsoft también ha trabajado para garantizar que tanto los encabezados de Windows como las bibliotecas de C++ funcionen con Clang y con su propio compilador.

Google aún no se ha movido por completo a la cadena de herramientas LLVM. Chrome para Windows todavía usa el enlazador de Microsoft y aún usa la biblioteca Microsoft C++. Con el tiempo, Google planea cambiar al enlazador LLVM y también podría usar la biblioteca Clang C++.