Суббота, 18.05.2024, 23:51
Приветствую Вас, Гость | RSS
Меню сайта
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Главная » 2015 » Февраль » 28 » Новая версия набора компиляторов LLVM 3.6
21:13
Новая версия набора компиляторов LLVM 3.6
Представлен релиз проекта LLVM 3.6 (Low Level Virtual Machine) - GCC совместимого инструментария (компиляторы, оптимизаторы и генераторы кода), компилирующего программы в промежуточный биткод RISC подобных виртуальных инструкций (низкоуровневая виртуальная машина с многоуровневой системой оптимизации). Сгенерированный платформонезависимый псевдокод может быть преобразован при помощи JIT-компилятора в машинные инструкции непосредственно в момент выполнения программы. Улучшения в Clang 3.6: Применяемый по умолчанию режим языка Си изменён с C99 с расширениями GNU на C11 с расширениями GNU; Добавлена экспериментальная поддержка некоторых элементов будущего стандарта C++1z (C++17), в том числе выражения Fold, символьного литерала u8, краткого определения вложенных пространств имён (namespace A::B { ... } вместо namespace A { namespace B { ... } }), атрибутов для пространств имён; Добавлена поддержка стандартного C11-заголовка stdatomic.h; Встроенный макрос __has_attribute больше не выполняет проверку атрибутов с учётом различных синтаксисов (GNU, C++11, __declspec и т.п.) и ограничивается только запросом атрибутов в стиле GNU. Для запросов атрибутов в стилях C++11 и __declspec следует использовать отдельные макросы __has_cpp_attribute и __has_declspec_attribute; В утилите clang-format обеспечена возможность форматирования кода на языке Java; Средства диагностики расширены возможностями по выявлению новых типов ошибок. Реализован механизм умной корректировки опечаток; Изменена логика установки макроса __EXCEPTIONS, который теперь привязывается к включению исключений как для C++, так и для Objective-C. Для надёжной проверки включения исключений для C++ следует кроме проверки __EXCEPTIONS также проверять и __has_feature(cxx_exceptions); Добавлены новые директивы "#pragma unroll" и "#pragma nounroll", позволяющие управлять оптимизацией по развёртыванию циклов; Значительно улучшена поддержка платформы Windows. Достигнут уровня самопересборки (self host) в окружении msvc на x86 и x64 системах Windows. Кроме исключений, поддержка Microsoft C++ ABI более-менее полностью реализована; Продолжена реализация поддержки OpenMP, добавлены дополнительные семантики pragma, определённые в стандарте OpenMP 3.1. Runtime-библиотека OpenMP адаптирована для архитектур ARM и PowerPC. Улучшена совместимость с GCC 4.9; Основные новшества LLVM 3.6: В состав включен набор биндингов для обеспечения поддержки развиваемого компанией Google языка программирования Go, который позиционируется как гибридное решение, сочетающее высокую производительность компилируемых языков с такими достоинствами скриптовых языков, как лёгкость написания кода, быстрота разработки и защищённость от ошибок. Принятый код основан на наработках проекта LLVM Go, разработчики которого согласились перелицензировать код под лицензией LLVM и предложили свою работу для включения в основной состав LLVM. Включение биндингов в состав LLVM является необходимым условием дальнейшей интеграции в LLVM фронтэнда с компилятором для языка Go (llgo), который построен с использованием данных биндингов. Проект LLVMLinux достиг уровня, при котором возможна пересборка ядра Linux штатным компилятором Clang c применением к ядру небольшого числа патчей. В новом выпуске добавлены опции "-mabicalls" "-mno-abicalls", устранены проблем с совместимостью inline-ассемблера LLVM и GCC, во встроенный ассемблер добавлена поддержка директив, используемых в коде ядра Linux; Поддержка интеграции LLVM IR в обычные объектные файлы. В частности, биткод теперь может быть размещён внутри специальной секции .llvmbc в составе обычных объектных файлов ELF, COFF и Mach-O; Требования к минимально поддерживаемой версии Python повышены до выпуска 2.7; Удалён код старого JIT-компилятора, всем пользователям рекомендуется перейти на MCJIT; Прекращена поддержка платформы AuroraUX; Реализована возможность преобразования доступного в MSVC вызова __vectorcall в вызов x86_vectorcallcc; Добавлен новый экспериментальный механизм для описания точек сохранения (safepoint) в сборщике мусора; Отмечен прогресс в реализации проекта Portable Computing Language OpenCL (PoCL), в рамках которого ведётся разработка полностью открытой реализации стандарта OpenCL, независимой от производителей графических ускорителей. PoCL позволит разработчикам не задумываться об особенностях той или иной реализации стандарта и использовать предоставляемые компилятором оптимизации вместо применения специфических для каждой платформы техник ручной оптимизации. PoCL реализован по модульному принципу, позволяющему использовать различные бэкенды для выполнения OpenCL-ядер на разных типах графических и центральных процессоров; Из параллельно развивающихся проектов, основанных на LLVM, можно отметить: KLEE - символьный анализатор и генератор тестовых наборов; Runtime-библиотека compiler-rt; llvm-mc - автогенератор ассемблера, дизассемблера и других связанных с машинным кодом компонентов на основе описаний параметров LLVM-совместимых платформ. Реализация функционального языка программирования Pure; LDC - компилятор для языка D; Roadsend PHP - оптимизатор, статический и JIT компилятор для языка PHP; Виртуальные машины для Ruby: Rubinius и MacRuby; LLVM-Lua FlashCCompiler - средство для компиляции кода на языке Си в вид, пригодный для выполнения в виртуальной машине Adobe Flash; LLDB - новая модульная инфраструктура отладки, использующая такие подсистемы LLVM как API для дизассемблирования, Clang AST (Abstract Syntax Tree), парсер выражений, генератор кода и JIT-компилятор. LLDB поддерживает отладку многопоточных программ на языках C, Objective-C и C++; отличается возможностью подключения плагинов и скриптов на языке Python; показывает крайне высокое быстродействие при отладке программ большого размера; emscripten - компилятор биткода LLVM в JavaScript, позволяющий преобразовать для запуска в браузере приложения, изначально написанные на языке Си. Например, удалось запустить Python, Lua, Quake, Freetype; sparse-llvm - бэкенд, нацеленный на создание Си-компилятора, способного собирать ядро Linux. Portable OpenCL - открытая и независимая реализация стандарта OpenCL; CUDA Compiler - позволяет сгенерировать GPU-инструкции из кода, написанного на языках Си, Си++ и Fortran; Julia - открытый динамический язык программирования, использующий наработки проекта LLVM. Jade (Just-in-time Adaptive Decoder Engine) - универсальный движок для декодирования видео, использующий LLVM для JIT-компиляции адаптивных конфигураций декодера видео, определённых комитетом MPEG Reconfigurable Video Coding (RVC); PNaCl (Portable Native Client) - интегрированная в браузер Chrome система, которая позволяет организовать выполнение приложений, написанных на языках C и С++, в специальном изолированном окружении web-браузера, независимо от текущей аппаратной архитектуры; PoCL (Portable Computing Language OpenCL) - реализация стандарта OpenCL, независимая от производителей графических ускорителей и позволяющая использовать различные бэкенды для выполнения OpenCL-ядер на разных типах графических и центральных процессоров; Likely - открытый предметно-ориентированный язык для распознавания изображений. Алгоритмы распознавания на лету компилируются (JIT) при помощи инфраструктуры LLVM MCJIT для выполнения на одно- или многоядерных CPU, а также на GPU с использованием OpenCL SPIR или CUDA. LibBeauty - инструментарий для декомпиляции и обратного инжиниринга, построенный с использованием дизассемблера LLVM и LLVM IR Builder. Приняв на входе объектный файл (.o) на выходе генерирует файл в промежуточном представлении LLVM (.bc или .ll); McSema - фреймворк для преобразования машинного кода в биткод LLVM; Swift - основанный на LLVM язык программирования, развиваемый компанией Apple; FTL (Fourth Tier LLVM) - JIT-компилятор для движка WebKit;
Просмотров: 274 | Добавил: muge | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *:
Форма входа
Поиск
Календарь
«  Февраль 2015  »
ПнВтСрЧтПтСбВс
      1
2345678
9101112131415
16171819202122
232425262728