LLVM 3.0 Release

    1 декабря состоялся релиз LLVM 3.0 (Low Level Virtual Machine) — «инфраструктуры для компиляторов», которая генерирует платформонезависимый оптимизированный байткод низкого уровня (см. обзор на Хабре). LLVM используется в том числе в официальных средствах разработки для Mac OS X и iOS.

    С момента выхода LLVM 2.9 прошло шесть месяцев, новшеств довольно много, в том числе новый «жадный» аллокатор регистров. Он применяет интересные способы оптимизации и способен значительно улучшить производительность кода.

    Из других улучшений в LLVM: появилась полная поддержка атомарных операций и модели памяти C++, сильно усовершенствован MIPS-бэкенд, появилась поддержка профилирования gprof и gcov.

    Разработчики говорят, что хотя это инкрементальный релиз, но мажорный номер версии «позволил избавиться от старого багажа». В частности, LLVM 3.0 больше не поддерживает фронт-энд llvm-gcc. Вместо него рекомендуют Clang или Dragonegg. Первый лучше для C, а Dragonegg — для тех, кто хочет получить использовать GCC через плагин. Связка из GCC-фронтэнда и LLVM-бэкенда поддерживает языки C, C++, Фортран и Ада, частично Java, Objective-C, Objective-C++ и Google Go.

    LLVM 3.0 также не принимает файлы .bc или  .ll от LLVM 2.8 или более ранних версий. Новый формат файлов обещают сделать стабильным навсегда, так что после версии 3.0 он уже меняться не будет.

    В комплекте с LLVM 3.0 идёт компилятор Clang 3.0, который в последнее время сильно прибавил в производительности и тоже добавил несколько важных фич (см. release notes), в том числе расширена поддержка C'1x и C++'11 (C++'0x), добавлена поддержка автоматического подсчёта ссылок (Automatic Reference Counting) из Objective-C.

    В результате Clang сам работает быстрее, компилирует более быстрый код и лучше обрабатывает ошибки, чем LLVM 2.9 при использовании GCC.
    • +26
    • 1,6k
    • 7
    Поделиться публикацией

    Комментарии 7

      0
      Последний раз когда компилил exim на FreeBSD clang-ом то он прибавил 100К в размере (12%) по сравнению с gcc.
      Надо будет попробовать свеженький релиз
        0
        А я как то посмотрел презентацию эпла года 2009 про clang, что собранное им типа ssl быстрее работает процентов на 20 и еще куча софта, чем gcc. Решил проверить на своем коде. Собранное версией 2.8 работало раза в 1.5 медленнее, чем с gcc.
          +1
          Всегда было интересно об этом платформонезависимом коде. Насколько хорошо работает процесс перевода в данный код, например, из C++, а затем генерация по нему текста на C? Как решаются вопросы с библиотеками типа STL, Boost и прочего. Справляется?
            0
            На сайте clang должна быть информация о процесе подгоднки компилятора под эти библиотеки.
            Или на сайтах соотв. библиотек как к примеру Qt: labs.qt.nokia.com/2010/10/29/compiling-qt-with-clang/
              +1
              Процесс перевода в IR из, например, C++ работает очень хорошо — компилятор clang именно это и делает. А вон трансляция IR в С уже проблематична, т.к. C backend уже давно никто не трогал. Однако, если допилить его до адекватного состояния, то он будет прекрасно работать.
              Насчет STL и Boost — не понял вопроса.
                0
                Boost/stl компилируюся Clang'ом уже давно.
                  0
                  boost уже полтора года как компилится без проблем: blog.llvm.org/2010/05/clang-builds-boost.html

                Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                Самое читаемое