Microsoft добавит поддержку компилятора Clang в ноябрськом обновлении Visual Studio 2015 — об этом было заявлено на конференции CPPCon 2015, проходящей сейчас в городе Белвью, США.
Clang это компилятор кода на С, С++ и Objective-C, который в связке с LLVM позволяет собирать программы под различные платформы. Visual Studio 2015 уже поддерживает Clang для разработки Android и iOS-приложений. При разработке под Android можно выбирать между GCC и Clang, а для iOS приходится использовать внешний Mac в качестве билд-сервера.
Планируемое обновление принесёт поддержку Clang на качественно новом уровне — теперь им можно будет собирать обычные Windows-приложения.
Компилатор Visual C++ состоит из нескольких частей: фронтенд-часть, отвечающая за генерацию AST (абстрактного синтаксического дерева), соответствующего коду программы и бекенд-часть, которая читает AST и генерирует исполняемый код. Фронтенд-часть называет С1, бекенд-часть называется С2 и над ними работают разные команды.
Clang планируется добавить в качестве замены С1, в то время как С2 и дальше будет использоваться по своему назначению. Как рассказал тимлид бекенд-части Джим Рэдиган, Clang будет создавать промежуточное представление кода, которое затем будет конвертироваться в формат, совместимый со входом С2, который Джим назвал набором кортежей. Далее С2 будет генерировать исполняемый код с помощью универсального компилятора кортежей (Universal Tuple Compiler).
Главной задачей создания связки Clang/C2 является облегчения кросс-платформенной разработки приложения как для самой Microsoft, так и для сторонних разработчиков. Многие приложения могли бы вынести свои невизуальные части в отдельные компоненты, которые бы собирались единообразно, одним и тем же компилятором Clang под различными операционными системами.
В качестве примера был указан Microsoft Office, мобильная версия которого сегодня доступна под Android, iOS и Windows 10 Universal Windows Platform. При использовании Clang в качестве фронтенд-компилятора общий код всех этих приложений мог бы собираться одинаково, исключая возникновения багов из-за отличий в Clang и C1.
Разработчики должны хорошо принять поддержку Clang из-за его лучшего соответствия последним стандартам С++. Тем ни менее, Microsoft не прекращает поддержку C1, её разработка будет продолжена, поскольку в версии стандарта С++ от Microsft есть некоторые специфические дополнения и тем программам, которые их используют, по-прежнему понадобиться С1 для сборки. Кроме того, скорость сборки кода в уже давно обкатанной комбинации С1\С2 несколько выше.
Джим Рэдиган отметил, что Microsoft не будет делать форк Clang, а сосредоточится на добавлении кода для платформы Windows в его основную ветку. При этом от Clang не будет требоваться делать что-либо особенное для поддержки С2, всё необходимое для совместимости Microsoft сделает на своей стороне.
Планируемое в ноябре обновление с поддержкой Clang будет иметь статус «превью», а основной релиз планируется на февраль 2016-го года.
Кроме поддержки Clang планируются и другие нововведения, к примеру поддержка “await” в соответствии с текущим предложением от Microsoft.
Также будет выпущена новая версия компилятора, позволяющая задействовать связку Clang/C2 из командной строки (без необходимости покупать и устанавливать Visual Studio IDE).
clamaw
Так вроде ж уже можно использовать clang в msvs: clang.llvm.org/docs/UsersManual.html#id7
tangro
Ну раньше надо было всё руками ставить и изолентой клеить, а тут всё будет из коробки работать.
KindDragon
Пока clang-cl не может даже элементарный проект с try/catch собрать и там большая беда с отладочной информацией.
khim
Далеко не всем нужно «элементарый проект с try/catch» собирать — некоторым хватает того, что можно собрать проекты типа того же Chrome.
KindDragon
Да им думаю и старого Clang хватает. Им clang-cl и вряд ли нужен был
KindDragon
* Им clang собирающий код созданный под Visual C++ компилятор вряд ли нужен.
khim
Им нужен был Clang, который может полноценно использовать Windows SDK, так как задача была не «собрать Chrome clang'ом под Windows», а «собрать обычный Chrome под Windows с ASANом». Разводить Cygwin никто не собирался :-)
sborisov
Это же только front end, как всегда от microsoft -полумеры.
tangro
Фронтенд парсит С++ код и в общем отвечает за поддержку всяких фич из стандарта языка (ну все эти лямбды, auto и т.д.), в то время как бекенд лишь оптимизирует AST и генерит бинарник. Clang в качестве фронтенда — совсем не так уж мало.
sborisov
Это очевидно и об этом сказано в оригинальной статье, странно, что это не попало в перевод:
«Microsoft Engineering Manager Steve Carroll (from the front-end team), who also spoke at CPPCon, explained that while Microsoft’s support of the C99 and C11 standards is already much improved, Clang/C2 will complete it.»
Технически бекэнд намного сложнее фронтенда. Просто интересно было бы протестировать полный цикл от разбора кода до постороения бинарника, к слову сказать Clang предоставляет компилятор под Windows llvm.org/builds вот только как это сделано у них…
yatagarasu
Есть же www.ishani.org/projects/ClangVSX
sborisov
официальный ресурс здесь
llvm.org/releases/download.html
yatagarasu
Ну да, я знаю где официальный ресурс. Так что если вам интересно было бы потестировать, вы можете потестировать — в официальных билдах уже есть интеграция с msvc ;)
К слову по мне так интеграция Frontend Clang с Backend MSVC гораздо интересней полной интеграции CLang, сделанной Микрософт — зачем дважды одну и ту же работу делать?
KindDragon
CppCon 2015: James Radigan “CLANG + C2 — Engineering/Futures/Measurements"
vma
Планируется ли до февраля выпустить фиксы для множества уже найденных багов в VS2015?
tangro
В ноябре же апдейт выходит.
vma
Т.е. само обновление в ноябре релизное, но содержание Clang-части его Preview? Странно как-то.