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).

Комментарии (17)


  1. clamaw
    22.10.2015 13:54

    Так вроде ж уже можно использовать clang в msvs: clang.llvm.org/docs/UsersManual.html#id7


    1. tangro
      22.10.2015 14:48
      -1

      Ну раньше надо было всё руками ставить и изолентой клеить, а тут всё будет из коробки работать.


    1. KindDragon
      22.10.2015 17:16
      -2

      Пока clang-cl не может даже элементарный проект с try/catch собрать и там большая беда с отладочной информацией.

      CppCon 2015: Reid Kleckner "Clang on Windows: a status update"


      1. khim
        22.10.2015 22:26
        +1

        Далеко не всем нужно «элементарый проект с try/catch» собирать — некоторым хватает того, что можно собрать проекты типа того же Chrome.


        1. KindDragon
          23.10.2015 00:21

          Да им думаю и старого Clang хватает. Им clang-cl и вряд ли нужен был


          1. KindDragon
            23.10.2015 00:26
            -1

            * Им clang собирающий код созданный под Visual C++ компилятор вряд ли нужен.


            1. khim
              23.10.2015 01:30
              -1

              Им нужен был Clang, который может полноценно использовать Windows SDK, так как задача была не «собрать Chrome clang'ом под Windows», а «собрать обычный Chrome под Windows с ASANом». Разводить Cygwin никто не собирался :-)


  1. sborisov
    22.10.2015 14:35
    -7

    Это же только front end, как всегда от microsoft -полумеры.


    1. tangro
      22.10.2015 14:51
      +3

      Фронтенд парсит С++ код и в общем отвечает за поддержку всяких фич из стандарта языка (ну все эти лямбды, auto и т.д.), в то время как бекенд лишь оптимизирует AST и генерит бинарник. Clang в качестве фронтенда — совсем не так уж мало.


      1. sborisov
        22.10.2015 15:30
        -2

        Это очевидно и об этом сказано в оригинальной статье, странно, что это не попало в перевод:
        «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 вот только как это сделано у них…


        1. yatagarasu
          22.10.2015 15:33

          1. sborisov
            22.10.2015 15:38

            официальный ресурс здесь
            llvm.org/releases/download.html


            1. yatagarasu
              22.10.2015 16:12

              Ну да, я знаю где официальный ресурс. Так что если вам интересно было бы потестировать, вы можете потестировать — в официальных билдах уже есть интеграция с msvc ;)

              К слову по мне так интеграция Frontend Clang с Backend MSVC гораздо интересней полной интеграции CLang, сделанной Микрософт — зачем дважды одну и ту же работу делать?


  1. KindDragon
    22.10.2015 17:20
    +2

    CppCon 2015: James Radigan “CLANG + C2 — Engineering/Futures/Measurements"


  1. vma
    23.10.2015 11:24

    Планируется ли до февраля выпустить фиксы для множества уже найденных багов в VS2015?


    1. tangro
      23.10.2015 12:30

      В ноябре же апдейт выходит.


      1. vma
        23.10.2015 12:36

        Т.е. само обновление в ноябре релизное, но содержание Clang-части его Preview? Странно как-то.

        Планируемое в ноябре обновление с поддержкой Clang будет иметь статус «превью», а основной релиз планируется на февраль 2016-го года.