Это простая история, пока вы не начнете смотреть чуть глубже. Простая часть заключается в том, что Google удалось использовать компилятор Clang для компиляции Chrome для Windows. Настоящий вопрос — почему?
The Clang Dragon в честь известного сборника книг.
Ситуация с C / C ++ в Windows была и остается сложной. Спросите у большинства программистов C / C ++, какой компилятор использовать, и ответ, скорее всего, будет GCC — Коллекция компиляторов GNU. Есть и другие известные компиляторы, такие как компилятор Intel, но в основном GCC считается стандартом. Единственное исключение — Clang, который хорошо продуман, но используется не так часто. Он имеет репутацию компилятора, который выбирают ученые и языковые экспериментаторы.
Под Windows большинство программистов просто уступают и используют компилятор Microsoft C / C ++, но с большим ворчанием говорят о том, что он не полностью соответствует какому-либо стандарту C или другому и обо всех поддерживаемых им расширениях Microsoft. Конечно, если вы разрабатываете приложение для Windows, вам действительно нужны расширения и дополнительные компоненты.
До Chrome 54 Google использовал Clang для компиляции Chrome для всех платформ, кроме Windows, где он использовал компилятор Microsoft. Проблема в том, что Clang не поддерживал Windows — и теперь он поддерживает.
Google помог с проектом с открытым исходным кодом сделать Clang Windows совместимым. Он не только совместим с Windows, но и двоично совместим с выводом компилятора Microsoft. Это означает, что вы можете использовать компоновщик для объединения кода каждого компилятора в единую программу.
Это удивительное усилие, но обратите внимание, что команде Google потребовалось с 2013 года до настоящего времени, чтобы получить приемлемую производственную сборку Chrome для Windows. Самое удивительное, что в 2015 году Microsoft решила помочь. Microsoft также опубликовала формат PDB для двоичного файла, который создает его компилятор — это неслыханное сотрудничество. Программисты занимались обратным проектированием файлов PDB с момента их существования.
Так что же от всего этого получает Google?
Не очень много, если посмотреть на показатели производительности. Вы можете ознакомиться с деталями, но, по сути, версия Chrome для Clang имеет примерно такой же размер и работает более или менее с той же скоростью. Это может измениться, поскольку команда Google настраивает Clang для Windows. Существует длинный список причин для использования Clang для Chrome, но основные из них, похоже, заключаются в том, что теперь можно писать плагины для компилятора, а исправления будут кроссплатформенными.
Проще говоря, один компилятор хорош, шесть разных компиляторов на шести разных платформах — плохо.
Также есть список плюсов и минусов использования Clang, но все они кажутся довольно незначительными. Выделяется довольно очевидное:
«Если ваш проект работает на нескольких платформах, вы можете везде использовать один компилятор».
Об этом стоит задуматься на мгновение. Вы можете видеть привлекательность для разработчиков Chrome, но как насчет остальных? Я использую GCC из-за количества поддерживаемых им целей — в основном микроконтроллеров. Он также поддерживает более широкий спектр языков, чем Clang, что может не быть проблемой, если вы просто ориентируетесь на C и C ++, но … в основном он работает в Linux. Я говорю «в основном», потому что есть порты для Windows, но они довольно беспорядочные. Теперь вы можете запускать GCC с помощью подсистемы Linux в Windows, но опять же есть недостатки. Самый простой и чистый способ запустить GCC в Windows — это полноценная виртуальная машина под управлением Linux.
Теперь рассмотрим выбор нового приложения — GCC, которое дает вам Linux; или Clang, что дает вам Linux и Windows. Возможно, доминирование GCC в Linux скоро ослабнет. Возможно, поэтому Microsoft внесла изменения в Clang?
Как бы то ни было, похоже, Кланг достиг совершеннолетия. Он готов к производству для Linux и Windows и используется для компиляции текущего популярного браузера на всех его платформах. Добавьте к этому тот факт, что с версии 51 Opera будет скомпилирована с использованием Clang для Windows, и вы увидите, что все действительно изменилось.
Последнее слово должно быть за сообщением в блоге LLVM, в котором анонсируется все:
«Спасибо всему сообществу LLVM за помощь в создании первого нового производственного компилятора C ++ для Windows более чем за десять лет и первого компилятора C ++ с открытым исходным кодом, совместимого с ABI и MSVC!»
Последний восклицательный знак вполне оправдан.