The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Релиз набора компиляторов LLVM 5.0"
Отправлено opennews, 08-Сен-17 11:04 
После шести месяцев разработки представлен (http://lists.llvm.org/pipermail/llvm-announce/2017-September... релиз проекта LLVM 5.0 (http://llvm.org/) (Low Level Virtual Machine) - GCC-совместимого инструментария (компиляторы, оптимизаторы и генераторы кода), компилирующего программы в промежуточный биткод RISC-подобных виртуальных инструкций (низкоуровневая виртуальная машина с многоуровневой системой оптимизации). Сгенерированный псевдокод может быть преобразован при помощи JIT-компилятора в машинные инструкции непосредственно в момент выполнения программы.

Напомним, что в соответствии с  новой нумерацией версий (https://www.opennet.ru/opennews/art.shtml?num=45690) осуществлён уход от разделения значительных и функциональных выпусков. В каждом функциональном обновлении теперь меняется первая цифра (например, весной следующего года состоится релиз LLVM 6.0.0). Для обеспечения совместимости с существующими системами разбора номеров версий LLVM корректирующие обновления, как и раньше приводят к увеличению третьей цифры (5.0.1, 5.0.2, 5.0.3).

Из новых возможностей LLVM 5.0 отмечается полная реализация стандарта C++17 (https://www.opennet.ru/opennews/art.shtml?num=47153), поддержка сопрограмм в C++, реализация GNU-расширения для неявного скалярного преобразования в вектор, новые оптимизации и средства диагностики ошибок.


Улучшения (http://releases.llvm.org/5.0.0/tools/clang/docs/ReleaseNotes... в Clang 5.0:


-  Поддержка расширения (http://open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4680.pdf) для использования сопрограмм (http://releases.llvm.org/5.0.0/docs/Coroutines.html) в коде на C++ (пример кода (https://wandbox.org/permlink/Dth1IO5q8Oe31ew2)). Для включения следует использовать опции "-fcoroutines-ts -stdlib=libc++";

-  Обеспечена полная поддержка стандарта C++17. Для активации режима  C++17 следует использовать флаг "-std=c++17" ("-std=c++1z" оставлен для обеспечения совместимости);


-  Новые возможности для диагностики:


-  "-Wcast-qual" для проверки корректности приведения типов в Си-стиле для C++;
-  "-Wunused-lambda-capture" для выявления переменных, захваченных лямбда-выражением, но не используемых в теле лямбда-выражения;
-  "-Wstrict-prototypes" для выявления не-прототипных функций, определений блоков и типов в Си и Objective-C;

-  "-Wunguarded-availability"  для информирования об использовании новых API, которые были представлены в системе, версия которой новее версии системы, заданной в качестве целевой. Также добавлен сокращённый вариант "-Wunguarded-availability-new", который охватывает проверку версий API, выпущенных после macOS 10.13, iOS 11, tvOS 11 и watchOS 4;

-  "-Wdocumentation" - позволяет использовать в комментариях директивы
\param и \returns для задания типа указателя для блока или функции;


-  Добавлен новый флаг компилятора "--autocomplete" для вывода списка флагов и  их аргументов для применения в системах автодополнения ввода;
-  Объявлены устаревшими и игнорируются флаги "-fslp-vectorize-aggressive" (заменён нормальным векторизатором SLP) и
"-fno-slp-vectorize-aggressive" (данное поведение теперь всегда используется по умолчанию);

-  Добавлена новая pragma attribute для применения атрибута к нескольким декларациям;


-  Для языков Си++ и Си реализовано GNU-расширение для неявного скалярного преобразования в вектор. Пример преобразования скалярного значения в вектор (ко всем элементам вектора "a" будет прибавлено 5):

   typedef unsigned v4i32 __attribute__((vector_size(16)));
   v4i32 foo(v4i32 a) {
      return a + 5;
   }

-   Clang 5 станет последним выпуском, в котором по умолчанию используется режим "-std=gnu++98" при использовании совместимого с GCC драйвера clang++. Начиная со следующего выпуска будет применяться режим "-std=gnu++14" для совместимости с поведением новых выпусков GCC. Пользователям рекомендуется добавить в файлы сборки опции для явного определения используемой версии стандарта;

-  Устранена порция ошибок в реализации OpenCL, расширен тестовый набор для OpenCL, расширена диагностика, в руководство добавлена документация по  OpenCL. Обеспечена поддержка расширения cl_khr_subgroups и атрибута intel_reqd_sub_group_size. В CIndex добавлены типы OpenCL;

-  В clang-format добавлена опция BreakBeforeInheritanceComma для подстановки разрывов после ":" и "," при определении класса. Опция включена по умолчанию при выборе стиля оформления кода Mozilla. Обеспечено выравнивание комментариев. Обеспечена автоматическая подстановка комменария с именем пространства имён в конце его определения;


   class MyClass
       : public X
       , public Y {
   };

   /* line 1
    * line 2
    */

   namespace A {
      int i;
      int j;
   } // namespace A

-  В Libclang обеспечена поддержка автодополнения кода для следующих конструкций C++: static_assert, alignas, constexpr, final, noexcept, override и thread_local. Добавлено автодополнения для членов зависимых классов;

-  В linter clang-tidy добавлена большая порция (http://releases.llvm.org/5.0.0/tools/clang/tools/extra/docs/... новых проверок, реализованы новые модули  bugpron и hicpp;


-  В статическом анализаторе добавлена поддержка автоматического доказателя теорем Z3 (https://github.com/Z3Prover/z3), созданного в  Microsoft Research для верификации кода своих продуктов. По сравнению с предлагаемым по умолчанию доказателем теорем Z3 работает примерно в 15 раз медленнее, но позволяет обрабатывать более сложные запросы. Для включения Z3 требуется сборка с опцией "CLANG_ANALYZER_BUILD_Z3=ON" и указание флагов "-Xanalyzer -analyzer-constraints=z3";

-  Расширены возможности компонента UBSan (Undefined Behavior Sanitizer) с реализацией детектора неопределенного поведения (http://ru.wikipedia.org/wiki/%D0%9D%D0%B... выявляющего во время выполнения программы ситуации, когда поведение программы становится неопределенным:


-  Добавлены и включены по умолчанию новые средства для проверки переполнения указателей (-fsanitize=pointer-overflow).
-  Реализованы проверки для определения нарушения аннотаций о значениях NULL (-fsanitize=nullability) в аргументах функций, операциях присвоения и значениях return.
-  Обеспечено определение некорректной загрузки из битовых полей (bitfields) и булевых наборов ObjC.

-  В биндингах для языка Python обеспечена поддержка обеих веток - Python 2 и Python 3.


Основные новшества (http://llvm.org/releases/5.0.0/docs/ReleaseNotes.html) LLVM 5.0:


-  В компоновщике LLD решены (http://releases.llvm.org/5.0.0/tools/lld/docs/ReleaseNotes.h... многие проблемы с совместимостью, реализован более читаемый формат сообщений об ошибках, добавлена опция "-Map" для вывода схемы с сопоставлением входных файлов с результирующим файлом, значительно ускорена работа опции "--gdb-index ", добавлена поддержка нестандартных перестановок  R_X86_64_8 и R_X86_64_16, по умолчанию обеспечено заполнение добавочных блоков в текстовых сегментах инструкцией INT3 вместо нулевых байтов. Добавлены новые опции: -compress-debug-sections, -emit-relocs, -error-unresolved-symbols, -exclude-libs, -filter, -no-dynamic-linker, -no-export-dynamic, -no-fatal-warnings, -print-map, -warn-unresolved-symbols, -z nocopyreloc, -z notext, -z rodynamic;
-  В оптимизаторе циклов Polly, поддерживающем несколько техник оптимизации циклов и позволяющем организовать автоматическое распараллеливание кода с задействованием OpenMP, обеспечена (http://releases.llvm.org/5.0.0/tools/polly/docs/ReleaseNotes... поддержка компиляции всех компонентов платформы Android и пакета  FFMPEG;


-  Представлена новая библиотека BinaryFormat, в которую перемещены определения структуры file_magic и функций identify_magic, а также структур и определений для форматов DWARF, ELF, COFF, WASM и MachO;
-  Утилита  llvm-pdbdump...

URL: http://lists.llvm.org/pipermail/llvm-announce/2017-September...
Новость: http://www.opennet.ru/opennews/art.shtml?num=47154

 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру