Браузер Google Chrome с недавних пор собирается под Windows с использованием компилятора clang-cl: https://news.ycombinator.com/item?id=16524313
clang-cl — это форк компилятора clang, поддерживаемый компанией Google. Смысл форка — обеспечить полную совместимость clang с MSVC: возможность линковать obj-файлы, произведённые обоими компиляторами в один dll/exe с помощью любого из компоновщиков; полная совместимость генерируемых obj-файлов с MSVC по формату отладочной информации, так, чтобы их можно было отлаживать из Visual Studio; полная совместимость по C++ ABI, включая раскрутку стека при исключениях. Разумеется, собранные бинарники не тянут зависимости наподобие libgcc_s и тулчейн лицензионно чист от GNU GPL.
А ещё clang-cl, в отличие MSVC, поддерживает ассемблерные вставки в 64-битном режиме.
Вся затея длится уже более четырёх лет, и судя по всему, достигла достаточной степени стабильности для испытания нахомячках пользователях браузера Chrome.
О целях мы можем только догадываться:
Сам по себе факт появления не-Microsoft'овского SDK для разработки Win32-приложений — не такое уж и большое дело, в середине 90-х такие SDK поддерживали фирмы Borland и Watcom. Но в последнее время из-за отсутствия реальной конкуренции Microsoft обнаглела, начала воспринимать Win32 SDK как свою собственность, и слегка съехала с катушек, например сломала совместимость последних версией компилятора с Windows XP, натолкала в CRT телеметрии и т.п. Надеюсь, что эта разработка Google будет держать MS в тонусе и содействовать общей адекватности в этой сфере.
clang-cl — это форк компилятора clang, поддерживаемый компанией Google. Смысл форка — обеспечить полную совместимость clang с MSVC: возможность линковать obj-файлы, произведённые обоими компиляторами в один dll/exe с помощью любого из компоновщиков; полная совместимость генерируемых obj-файлов с MSVC по формату отладочной информации, так, чтобы их можно было отлаживать из Visual Studio; полная совместимость по C++ ABI, включая раскрутку стека при исключениях. Разумеется, собранные бинарники не тянут зависимости наподобие libgcc_s и тулчейн лицензионно чист от GNU GPL.
А ещё clang-cl, в отличие MSVC, поддерживает ассемблерные вставки в 64-битном режиме.
Вся затея длится уже более четырёх лет, и судя по всему, достигла достаточной степени стабильности для испытания на
О целях мы можем только догадываться:
- Google хочет иметь возможность кросс-компиляции браузера Chrome и других проектов из Linux, и чтобы они при этом не несли отпечатки mingw-шной второсортности, такие как зависимость от libgcc_s_dw2-1.dll, невозможность нормальной отладки и несовместимость по исключениям
- Google не хочет использовать MSVC, в последних версиях которого CRT содержит обязательную телеметрию (вызовы ETW)
- Google хочет использовать в исходниках Chrome новейшие фичи C++17 без опасения за совместимость кода, сгенерированного будущими версиями компилятора, с Windows 7
- Находящийся под контролем Google и независимый от Microsoft'а SDK для разработки Win32-приложений — часть более общего плана, как-то связанного с другими проектами Google, например ОС Fuchsia
Сам по себе факт появления не-Microsoft'овского SDK для разработки Win32-приложений — не такое уж и большое дело, в середине 90-х такие SDK поддерживали фирмы Borland и Watcom. Но в последнее время из-за отсутствия реальной конкуренции Microsoft обнаглела, начала воспринимать Win32 SDK как свою собственность, и слегка съехала с катушек, например сломала совместимость последних версией компилятора с Windows XP, натолкала в CRT телеметрии и т.п. Надеюсь, что эта разработка Google будет держать MS в тонусе и содействовать общей адекватности в этой сфере.