The OpenNET Project / Index page

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

Релиз набора компиляторов LLVM 9.0

20.09.2019 10:24

После шести месяцев разработки представлен релиз проекта LLVM 9.0 - GCC-совместимого инструментария (компиляторы, оптимизаторы и генераторы кода), компилирующего программы в промежуточный биткод RISC-подобных виртуальных инструкций (низкоуровневая виртуальная машина с многоуровневой системой оптимизаций). Сгенерированный псевдокод может быть преобразован при помощи JIT-компилятора в машинные инструкции непосредственно в момент выполнения программы.

Из новых возможностей LLVM 9.0 отмечается обеспечение снятия метки экспериментальной разработки с целевой платформы RISC-V, поддержка C++ для OpenCL, возможность разделения программы на динамически подгружаемые части в LLD и реализация конструкции "asm goto", используемой в коде ядра Linux. В libc++ добавлена поддержка WASI (WebAssembly System Interface), а в LLD появилась начальная поддержка динамического связывания WebAssembly.

Улучшения в Clang 9.0:

  • Добавлена реализация специфичного для GCC выражения "asm goto", которое позволяет выполнить переход из ассемблерного inline-блока к метке в коде на языке Си. Указанная возможность необходима для сборки ядра Linux в режиме "CONFIG_JUMP_LABEL=y" с использованием Clang на системах с архитектурой x86_64. С учётом добавленных в прошлых выпусках изменений, ядро Linux теперь может собираться в Clang и для архитектуры x86_64 (ранее поддерживалась только сборка для архитектур arm, aarch64, ppc32, ppc64le и mips). Более того, проекты Android и ChromeOS уже переведены на использование Clang для сборки ядра и Google тестирует Clang в качестве основной платформы для сборки ядер для своих рабочих Linux-систем. В дальнейшем в процессе сборки ядра можно будет использовать и другие компоненты LLVM, включая LLD, llvm-objcopy, llvm-ar, llvm-nm и llvm-objdump;
  • Добавлена экспериментальная поддержка использования C++17 в OpenCL. Из специфичных возможностей отмечается поддержка атрибутов адресного пространства, блокировка преобразования адресного пространства операторами приведения типов, предоставление векторных типов как в OpenCL для C, наличие специфичных OpenCL-типов для изображений, событий, каналов и т.п.
  • Добавлены новые флаги компилятора "-ftime-trace" и "-ftime-trace-granularity=N" для генерации отчета о времени выполнения различных стадий работы фронтэнда (парсинг, инициализация) и бэкенда (стадии оптимизации). Отчёт сохраняется в формате json, совместимом с chrome://tracing и speedscope.app;
  • Добавлена обработка спецификатора "__declspec(allocator)" и генерация сопутствующей отладочной информации, позволяющей отслеживать потребление памяти в среде Visual Studio;
  • Для языка Си добавлена поддержка макроса "__FILE_NAME__", напоминающего макрос "__FILE__", но включающий только имя файла без полного пути;
  • Для языка C++ расширена поддержка атрибутов адресного пространства, охватывающих различные возможности C++, включая шаблоны параметров и аргументов, ссылочные типы, вывод типа возвращаемого значения, объекты, автоматически генерируемые функции, встроенные операторы и т.п.
  • Расширены возможности, связанные с поддержкой OpenCL, OpenMP и CUDA. В том числе обеспечена начальная поддержка неявного включения встроенных функций OpenCL (добавлен флаг "-fdeclare-opencl-builtins"), реализовано расширение cl_arm_integer_dot_product и расширены средства диагностики;
  • Улучшена работа статического анализатора и добавлена документация по выполнению статического анализа. Добавлены флаги для отображения доступных модулей проверки и поддерживаемых опций ("-analyzer-checker[-option]-help", "-analyzer-checker[-option]-help-alpha" и "-analyzer-checker[-option]-help-developer"). Добавлен флаг "-analyzer-werror" для реагирования на предупреждения как на ошибки. Добавлены новые режимы проверки:
    • security.insecureAPI.DeprecatedOrUnsafeBufferHandling для выявления небезопасных приёмов работы с буферами;
    • osx.MIGChecker для поиска нарушений правил оформления вызовов MIG (Mach Interface Generator);
    • optin.osx.OSObjectCStyleCast для поиска некорректных преобразований объектов XNU libkern;
    • apiModeling.llvm с набором моделирующих функций проверки для выявления ошибок в кодовой базе LLVM;
    • Стабилизирован код для проверки неинициализированных объектов С++ (UninitializedObject в пакете optin.cplusplus);
  • В утилиту clang-format добавлена поддержка форматирования кода на языке C# и обеспечена поддержка применяемого в Microsoft стиля оформления кода;
  • В clang-cl, альтернативном интерфейсе командной строки, обеспечивающем совместимость на уровне опций с компилятором cl.exe из состава Visual Studio, добавлена эвристика для восприятия несуществующих файлов как опций командной строки с выводом соответствующего предупреждения (например, при запуске "clang-cl /diagnostic:caret /c test.cc");
  • В linter clang-tidy добавлена большая порция новых проверок, в том числе добавлены проверки, специфичные для API OpenMP;
  • Расширены возможности сервера clangd (Clang Server), в котором по умолчанию включен режим построения индекса в фоновом режиме, добавлена поддержка контекстных действий с кодом (извлечение переменной, раскрытие определений auto и макросов, преобразование экранированных строк в неэкранированные), появилась возможность вывода предупреждений от Clang-tidy, расширена диагностика ошибок в заголовочных файлах и добавлена возможность вывода информации об иерархии типов;

Основные новшества LLVM 9.0:

  • В компоновщик LLD добавлена экспериментальная возможность партицирования, позволяющая разделить одну программу на несколько частей, каждая из которых размещается в отдельном ELF-файле. Указанная возможность позволяет запускать основную часть программы, которая по мере необходимости в процессе работы будет подгружать остальные компоненты (например, можно выделить встроенный PDF-просмотрщик в отдельный файл, который будет загружаться только когда пользователь открыл PDF-файл).

    Компоновщик LLD доведён до состояния, пригодного для компоновки ядра Linux для архитектур arm32_7, arm64, ppc64le и x86_64. Предложены новые опции "-" (вывод в stdout), "--[no-]allow-shlib-undefined", "--undefined-glob", "-nmagic", "-omagic", "--dependent-library", "-z ifunc-noplt" и "-z common-page-size". Для архитектуры AArch64 добавлена поддержка инструкций BTI (Branch Target Indicator) и PAC (Pointer Authentication Code). Существенно улучшена поддержка платформ MIPS, RISC-V и PowerPC. Добавлена начальная поддержка динамического связывания для WebAssembly;

  • В libc++ реализованы функции ssize, std::is_constant_evaluated, std::midpoint и std::lerp, в std::span добавлены методы "front" и "back", добавлены признаки типов std::is_unbounded_array и std::is_bounded_array, расширены возможности std::atomic. Прекращена поддержка GCC 4.9 (возможно использование с GCC 5.1 и более новых выпусков). Добавлена поддержка WASI (WebAssembly System Interface, интерфейс для использования WebAssembly вне браузера);
  • Добавлены новые оптимизации. Обеспечено преобразование вызовов memcmp в bcmp в некоторых ситуациях. Реализован пропуск проверки диапазонов для таблиц переходов, в которых нижние блоки switch недостижимы или когда инструкции не используются, например, при вызове функций с типом void;
  • Стабилизирован бэкенд для архитектуры архитектуры RISC-V, который больше не позиционируется как экспериментальный и собирается по умолчанию. Обеспечена полная поддержка генерации кода для вариантов наборов инструкций RV32I и RV64I с расширениями MAFDC;
  • Внесены многочисленные улучшения в бэкенды для архитектур X86, AArch64, ARM, SystemZ, MIPS, AMDGPU и PowerPC. Например, для архитектуры AArch64 добавлена поддержка инструкций SVE2 (Scalable Vector Extension 2) и MTE (Memory Tagging Extensions), в бэкенде ARM добавлена поддержка архитектуры Armv8.1-M и расширения MVE (M-Profile Vector Extension). В бэкенд AMDGPU добавлена поддержка архитектуры GFX10 (Navi), по умолчанию включена возможности вызова функций и активирован комбинированный проход DPP (Data-Parallel Primitives).
  • В отладчике LLDB появилась цветная подсветка обратных трассировок, добавлена поддержка блоков DWARF4 debug_types и DWARF5 debug_info;
  • В утилиты llvm-objcopy и llvm-strip добавлена поддержка объектных и исполняемых файлов в формате COFF.


  1. Главная ссылка к новости (https://lists.llvm.org/piperma...)
  2. OpenNews: Разработчики из Google предложили разработать свою libc для LLVM
  3. OpenNews: Релиз набора компиляторов LLVM 8.0
  4. OpenNews: Выпуск Tinygo 0.7.0, компилятора языка Go на базе LLVM
  5. OpenNews: Проект LLVM ввёл в строй официальное Git-зеркало в ходе миграции с SVN
  6. OpenNews: Релиз набора компиляторов GCC 9
Лицензия: CC-BY
Тип: Программы
Ключевые слова: llvm, clang, compile
При перепечатке указание ссылки на opennet.ru обязательно
Обсуждение (101) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.3, Аноним (3), 10:56, 20/09/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    Как его на винду установить?
     
     
  • 2.4, 1 (??), 10:57, 20/09/2019 [^] [^^] [^^^] [ответить]  
  • +22 +/
    запускаешь setup.exe и все дела
     
  • 2.5, commiethebeastie (ok), 11:19, 20/09/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    https://devblogs.microsoft.com/cppblog/clang-llvm-support-in-visual-studio/
     
     
  • 3.10, Аноним (10), 12:14, 20/09/2019 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Как что-то скомпилировать без студии?
     
     
  • 4.12, commiethebeastie (ok), 12:19, 20/09/2019 [^] [^^] [^^^] [ответить]  
  • +2 +/
    https://releases.llvm.org/

    Бинарники под маздайку еще не собрали, а так 8.0.1 есть.

    А собирается что-либо через clang.exe

     
     
  • 5.19, Аноним (19), 12:53, 20/09/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Час ведь собираться будет ....
     
     
  • 6.28, Аноним (28), 13:47, 20/09/2019 [^] [^^] [^^^] [ответить]  
  • –4 +/
    Купи комп нормальный
     
  • 6.40, Аноним (40), 15:13, 20/09/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Даже больше... поверь старому гнентушнику. Часа два (если у тебя не 8-ядерный ксеон конеш)
     
  • 6.57, letsmac (ok), 00:47, 21/09/2019 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Когда у меня был первый пень - все говорили - о всего за час :-)
     

  • 1.6, Anonymoustus (ok), 11:58, 20/09/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    > Добавлена реализация специфичного для GCC выражения "asm goto", которое позволяет выполнить переход из ассемблерного inline-блока к метке в коде на языке Си.

    Вот это правильно! Даёшь ещё более запутанный код!

     
     
  • 2.9, Аноним (9), 12:09, 20/09/2019 [^] [^^] [^^^] [ответить]  
  • +7 +/
    В ассемблере нет ни while, ни for, если ты не в курсе. Только goto (jmp* в x86, b* в arm).
     
     
  • 3.37, Аноним (37), 14:50, 20/09/2019 [^] [^^] [^^^] [ответить]  
  • +/
    repn cmpsb ? :)
     
     
  • 4.43, Аноним84701 (ok), 16:00, 20/09/2019 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Пфф, слишком узкоспециализированно code FASM, assembly time macro showPos m... текст свёрнут, показать
     
  • 2.11, Аноним (10), 12:16, 20/09/2019 [^] [^^] [^^^] [ответить]  
  • +10 +/
    goto-фобам среди нормальных программистов делать нечего, это мощный инструмент, который имеет свое применение к примеру для выхода из вложенных циклов, при чем читаемость гораздо выше, чем при использовании разных флагов. Это мощный инструмент, но который надо использовать с умом
     
     
  • 3.13, commiethebeastie (ok), 12:20, 20/09/2019 [^] [^^] [^^^] [ответить]  
  • –5 +/
    Из вложенных циклов надо выходить выносом оных в отдельные функции, а не созданием говнолапши с goto и флагами.
     
     
  • 4.15, A.Stahl (ok), 12:40, 20/09/2019 [^] [^^] [^^^] [ответить]  
  • +21 +/
    А я-то думал что хорошим тоном является вынос в функции логически законченных блоков, а оказывается функции нужны для выхода из вложенных циклов. Век живи -- век учись...
     
     
  • 5.25, Аноним (25), 13:17, 20/09/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > является вынос в функции логически законченных блоков

    Как бы и да, и нет. Смотря что и где. Для повышения читаемости и поддерживаемости кода иногда лучше просто куски убрать в отдельные функции. А потом и станет очевидным, на какие логические блоки разделить можно. И вот в таком случае как пример вынос цикла или куска цикла в отдельную функцию - вполне ок, вместо лапши goto или каких-нибудь break. Если нет каких-то особых требований по стилю, производительности, чему-то ещё... Но, судя по вашим утверждениям выше, вы будете упираться и настаивать на своём. А ведь конкретных подход оч. сильно зависит от проекта.

     
     
  • 6.55, Sw00p aka Jerom (?), 22:54, 20/09/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >Для повышения читаемости и поддерживаемости кода иногда лучше просто куски убрать в отдельные функции.

    и срать в стек

    >А ведь конкретных подход оч. сильно зависит от проекта.

    бред, все должно сводиться к оптимальному набору инструкций.

     
     
  • 7.65, Аноним (65), 15:36, 21/09/2019 [^] [^^] [^^^] [ответить]  
  • +/
    >>Для повышения читаемости и поддерживаемости кода иногда лучше просто куски убрать в отдельные функции.
    > и срать в стек

    "Преждевременная оптимизация есть корень всех зол" (с)

    System V AMD64 ABI для первых 6-ти параметров использует регистры процессора. Это в случае, если не будет произведена подстановка (inline) функции.

    >>А ведь конкретных подход оч. сильно зависит от проекта.
    > бред, все должно сводиться к оптимальному набору инструкций.

     
     
  • 8.66, Sw00p aka Jerom (?), 15:51, 21/09/2019 [^] [^^] [^^^] [ответить]  
  • –2 +/
    что за ересь несете я посмотрел бы если бы с таким утверждением писали бы матем... текст свёрнут, показать
     
     
  • 9.68, Аноним84701 (ok), 21:11, 21/09/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Это c некий Knuth в каком-то Computer Programming as an Art Алгоритм Кнута ... текст свёрнут, показать
     
     
  • 10.69, Anonymoustus (ok), 21:26, 21/09/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Это уж точно ... текст свёрнут, показать
     
  • 10.75, Sw00p aka Jerom (?), 00:20, 22/09/2019 [^] [^^] [^^^] [ответить]  
  • –4 +/
    читайте внимательно, уделяют заботе об эффективности в неправильных местах и в ... текст свёрнут, показать
     
  • 10.76, Sw00p aka Jerom (?), 00:32, 22/09/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    попробуйте обосновать за него, что это значить как понимать неправильное место ... текст свёрнут, показать
     
     
  • 11.91, Аноним84701 (ok), 15:00, 22/09/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Зачем мне за него что-то обосновывать, если он сделал это сам http www... текст свёрнут, показать
     
     
  • 12.92, Sw00p aka Jerom (?), 20:09, 22/09/2019 [^] [^^] [^^^] [ответить]  
  • –2 +/
    ну конечно, что и требовалось доказать а собственных мыслей как нет так и не бу... текст свёрнут, показать
     
     
  • 13.94, Аноним84701 (ok), 21:22, 22/09/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Доказать что и кому Похоже, кто-то что-то себе придумал или взял из методички ... текст свёрнут, показать
     
     
  • 14.96, Sw00p aka Jerom (?), 21:33, 22/09/2019 [^] [^^] [^^^] [ответить]  
  • +/
    закрыли тему, удачи ... текст свёрнут, показать
     
  • 14.97, Sw00p aka Jerom (?), 21:38, 22/09/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    дополню, Колмогоров мечтал о профайлере ... текст свёрнут, показать
     
  • 9.87, Аноним (87), 11:29, 22/09/2019 [^] [^^] [^^^] [ответить]  
  • +/
    В самом деле, давайте, наконец, почитаем Цитату из System V AMD64 ABI приводить... текст свёрнут, показать
     
     
  • 10.90, Sw00p aka Jerom (?), 13:45, 22/09/2019 [^] [^^] [^^^] [ответить]  
  • –3 +/
    Грош цена тому студенту, который на слово верит учителю, и не осмеливается его п... текст свёрнут, показать
     
     
  • 11.101, Аноним (101), 13:02, 23/09/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ой, ой, полегче на поворотах с экзаменационный и индивидуальным подходом на публ... текст свёрнут, показать
     
     
  • 12.105, Sw00p aka Jerom (?), 23:50, 23/09/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    так, так , тут по поподробней, где тут моя ложная гипотеза про обсирание стека ... текст свёрнут, показать
     
     
  • 13.122, Аноним (101), 09:49, 24/09/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Выше Ищи сам Ctrl F и вперёд Пфф Размечтался Тебе был дан шанс признать, чт... текст свёрнут, показать
     
  • 6.70, Аноним (70), 21:50, 21/09/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Тем более, что теперь есть анонимные функции.
     
     
  • 7.78, Аноним (78), 03:24, 22/09/2019 [^] [^^] [^^^] [ответить]  
  • +/
    В Си или в Си++?
     
  • 4.22, НяшМяш (ok), 13:15, 20/09/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Лейблы даже в javascript есть для выхода из вложенных циклов. Это мощный инструмент, особенно когда ты не можешь сказать компилятору, что эта функция должна быть заинлайнена.
     
  • 4.123, КО (?), 10:04, 24/09/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Ага это сразу сделает все понятным. :)

    Ну даже в случае тривиальнейшего поиска элемента по n-мерной матрице.

     
  • 3.27, Аноним (27), 13:35, 20/09/2019 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Это мощный инструмент для убогих языков. В нормальных языках брейку можно сказать, куда именно выходить.
     
     
  • 4.31, llolik (ok), 14:02, 20/09/2019 [^] [^^] [^^^] [ответить]  
  • +2 +/
    И чем это принципиально отличается от goto кроме названия?
     
     
  • 5.32, None (??), 14:10, 20/09/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Тем, что break прикончит всё сам, а после goto нужно убирать.
     
     
  • 6.44, Аноним (44), 16:33, 20/09/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Кто на ком стоял ?
     
  • 6.79, Аноним (78), 03:26, 22/09/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Кто и что прикончит брейки и что нужно убрать после goto?
     
  • 5.34, Илья (??), 14:27, 20/09/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Давайте вы покажете, как вы используете своё гото на примере? Только, пожалуйста, больше контекста. Хотя бы строк 200
     
     
  • 6.46, Аноним (65), 17:03, 20/09/2019 [^] [^^] [^^^] [ответить]  
  • +/
    > Давайте вы покажете, как вы используете своё гото на примере? Только, пожалуйста,
    > больше контекста. Хотя бы строк 200

    Смотрите #26 и прекращайте выдумывать новые контексты.

     
     
  • 7.80, Аноним (78), 03:30, 22/09/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Example:

    '''
    struct some_t *some(const void *const args) {
        const int err;
        struct some_t *result;
        result = malloc(...);
        if (result == nullptr) {
            err = enomem;
            goto out;
        }
        for (iterator i = c.first(); i++; i != nullptr) {
            if (...) {
                err = 2;
                goto out;
            } else {
                result ...
            }
        }
        err = 0;
      out:
        if (err != 0) {
            some_free(result);
            rsult = nullptr;
        }
        return result;
    }
    '''

     
     
  • 8.88, Аноним (87), 11:31, 22/09/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Что за чушь приведена в качестве примера Где там asm goto из новости ... текст свёрнут, показать
     
  • 3.51, Anonymoustus (ok), 19:07, 20/09/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Угадай, на каком это языке:

    [CODE]
    10    IF ( ... ) THEN
            ...
          GO TO 10
          END IF

    [/CODE]

     
     
  • 4.77, Аноним (77), 00:39, 22/09/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Английский?
     
  • 4.98, Кочегар (ok), 03:31, 23/09/2019 [^] [^^] [^^^] [ответить]  
  • +/
    На FORTAN-77 похоже.
     
     
  • 5.99, Anonymoustus (ok), 08:20, 23/09/2019 [^] [^^] [^^^] [ответить]  
  • +/
    > На FORTAN-77 похоже.

    Он самый.

    Метка и GO TO используются для организации цикла.

    http://rosettacode.org/wiki/Flow-control_structures#Fortran

    Из полезного там ещё ссылаются на текст Кнута:

    http://www.kohala.com/start/papers.others/knuth.dec74.html

     
  • 3.53, Аноним (53), 19:54, 20/09/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Настоящие программисты используют продолжения, а на ваше гоуту смотрят как на детскую игрушку.
     
     
  • 4.64, Аноним (65), 15:34, 21/09/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Настоящие программисты используют продолжения, а на ваше гоуту смотрят как на детскую
    > игрушку.

    а кто-то понимает, что goto суть рекурсивный вызов.

     
  • 2.26, Аноним (65), 13:26, 20/09/2019 [^] [^^] [^^^] [ответить]  
  • –4 +/
    Упрощай Для тебя ведь код не запутан, не так ли code static __always_inline ... текст свёрнут, показать
     
     
  • 3.48, Anonymoustus (ok), 19:00, 20/09/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Переходи на FreeBASIC*, не страдай.


    * FreeBASIC is a free/open source (GPL), BASIC compiler for Microsoft Windows, DOS and Linux.

    https://www.freebasic.net/

     
     
  • 4.63, Аноним (65), 15:32, 21/09/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Скажи ещё, что это я жаловался на запутанность, которую якобы даст goto, а не ты. ;)
     
     
  • 5.67, Anonymoustus (ok), 17:48, 21/09/2019 [^] [^^] [^^^] [ответить]  
  • +/
    > Скажи ещё, что это я жаловался на запутанность, которую якобы даст goto,
    > а не ты. ;)

    Разве я жаловался? Наоборот же, анон, я горячо приветствую каждое прогрессивное начинание. Выпрыгивание из ассемблерной вставки куда-нибудь в сишечный код подальше очень и очень улучшит понятность и управляемость программы. Я ни секунды не сомневаюсь в этом. Я за прогресс!

     
     
  • 6.86, Аноним (87), 11:24, 22/09/2019 [^] [^^] [^^^] [ответить]  
  • –5 +/
    >> Скажи ещё, что это я жаловался на запутанность, которую якобы даст goto,
    >> а не ты. ;)
    > Разве я жаловался? Наоборот же, анон, я горячо приветствую каждое прогрессивное
    > начинание.

    То есть вообще не понимаешь, о чём в идёт речь новости. Объясняю. Код с таким goto существует давно. Добавили возможность трансляции имеющегося кода.

     

  • 1.7, Аноним (7), 12:02, 20/09/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    Интересно, когда Julia на него переедет....
     
  • 1.14, Аноним (14), 12:29, 20/09/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • –3 +/
    > Обеспечено преобразование вызовов memcmp в bcmp в некоторых ситуациях.

    Зачем?

    > функций с типом void

    Функция не может иметь тип void. Функция может возвращать void.

     
     
  • 2.56, Sw00p aka Jerom (?), 23:22, 20/09/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >Функция не может иметь тип void.

    как и вообще типы, ибо функция - не данные (получаемые, возвращаемые и т.д.), а набор инструкций. Про функции высшего порядка промолчу.

     

  • 1.16, Аноним (16), 12:45, 20/09/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    >В компоновщик LLD добавлена экспериментальная возможность партицирования, позволяющая разделить одну программу на несколько частей, каждая из которых размещается в отдельном ELF-файле. Указанная возможность позволяет запускать основную часть программы, которая по мере необходимости в процессе работы будет подгружать остальные компоненты

    DOS overlay?!
    Всё новое - хорошо забытое старое…

     
     
  • 2.41, Ordu (ok), 15:54, 20/09/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Почему же забытое? Ты мог это делать через dlopen/dlclose сколько угодно.
     
     
  • 3.81, Аноним (78), 03:33, 22/09/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Мог прилагать усилия, а теперь оно само но вопрос про оверлеи они были сами или их надо было деать
     

  • 1.17, Аноним (17), 12:45, 20/09/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    А что с поддержкой Intel HEX в llvm-objcopy, вроде добавляли её?
     
  • 1.18, Аноним (19), 12:52, 20/09/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Clang 10 отлично работает, хоть и nightly.
     
  • 1.20, кельвин (?), 12:54, 20/09/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    а чё там по сборке ядра?
     
     
  • 2.23, НяшМяш (ok), 13:16, 20/09/2019 [^] [^^] [^^^] [ответить]  
  • +6 +/
    а чё там по чтению текста новости?
     
     
  • 3.36, Аноним (36), 14:41, 20/09/2019 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Может еще смузи не пить? Читать новости давно не в тренде (чиатать надо только заголовки не более 140 символов).
     
     
  • 4.82, Аноним (78), 03:33, 22/09/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Читаете новости через SMS шлюз?
     

  • 1.24, Аноним (24), 13:17, 20/09/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Давно LLVM стал всего лишь «набором компиляторов»?
     
     
  • 2.29, Аноним (28), 13:49, 20/09/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    "The LLVM Project is a collection of modular and reusable compiler and toolchain technologies."

    Ну да, не совсем точный перевод

     

  • 1.30, anonymuous (?), 13:53, 20/09/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +4 +/
    Товарищь админ, не используйте пожалуйста расшифровку (Low Level Virtual Machine). На сегодняшний день это уже не так, и LLVM просто бренд, который никак ни расшифровывается:

    "The name "LLVM" was once an acronym, but is now just a brand for the umbrella project"

    цитата взята от: http://www.aosabook.org/en/llvm.html
    на эту книгу есть ссылка из официальной документации: http://llvm.org/docs/  (Intro to LLVM)

     
     
  • 2.35, Аноним (36), 14:40, 20/09/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    GNU - Gnu's Not Unix. LLVM - LLVM's Not Linux.
     

  • 1.33, Аноним (33), 14:15, 20/09/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Во FreeBSD 12 кое-что начало компилироваться с -flto=full. Но надо использовать егойный /usr/local/llvm90/bin/ld.lld. Firefox/Thunderbird у мну не получилось :(
     
     
  • 2.42, Ordu (ok), 15:57, 20/09/2019 [^] [^^] [^^^] [ответить]  
  • +/
    > Firefox/Thunderbird у мну не получилось

    Это, возможно, как-то связано с: http://blog.llvm.org/2019/09/closing-gap-cross-language-lto-between.html

    Линк-тайм оптимизации плохо заходят на границах между языками. Требуют специальной доводки.

     
     
  • 3.73, meantraitor (?), 22:24, 21/09/2019 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Во время линк-тайм оптимизаций нет никаких языков и границ между ними.
    Есть кривые руки авторов компилятора rust.
     
     
  • 4.74, Ordu (ok), 22:50, 21/09/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Теоретически Все такие заявления теоретичны по своей сути, и большинство попыто... текст свёрнут, показать
     
     
  • 5.103, meantraitor (?), 14:54, 23/09/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Я-то эту статью прочитал. И, в отличие от тебя, понял, что там написано.
    И как компиляторы работают я знаю получше тебя, так что не надо меня поучать.


     
     
  • 6.104, Ordu (ok), 18:44, 23/09/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Это видно, просто на лбу написано Что ж ты глупости такие говоришь тогда У мен... текст свёрнут, показать
     
     
  • 7.125, meantraitor (?), 16:04, 24/09/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Ну хорошо, допустим, я тупица, теоретик и не видел ни одного компилятора.
    Просвети же меня, о мудрейший, какие такие свойства раста мешали использованию Rust+C LTO?
    Я еще, видимо, и английский не понимаю. Может твои объяснения по-русски пойму?


     
     
  • 8.128, Ordu (ok), 17:02, 24/09/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Я где-то говорил, что свойства раста мешали использованию Rust C Ты продолжаешь... текст свёрнут, показать
     
     
  • 9.129, meantraitor (?), 17:40, 24/09/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Подожди-ка, мы начали с того, что я сказал, что во время LTO нет уже никаких язы... текст свёрнут, показать
     
     
  • 10.132, Ordu (ok), 18:02, 24/09/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Да, естественно, я начал возражать, заявив, буквально следующее Теоретически н... текст свёрнут, показать
     

  • 1.39, Аноним (39), 15:06, 20/09/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Всегда интересовался вопросом, что такое "релиз" а что такое "выпуск". Берем эту тему, тут "релиз". Берем соседнюю тему "https://www.opennet.ru/opennews/art.shtml?num=51522" в которой пишут что Выпуск Samba 4.11.0, но потом "Представлен релиз" Может кто внятно объяснить чем релиз лучше выпуска?
     
     
  • 2.45, neAnonim (?), 16:55, 20/09/2019 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Если зарелизили, то релиз. Если выпустили, выпуск. Если наваяли, ...
     
     
  • 3.47, Аноним (65), 17:05, 20/09/2019 [^] [^^] [^^^] [ответить]  
  • +/
    > Если зарелизили, то релиз. Если выпустили, выпуск. Если наваяли, ...

    Не, наоборот. Релизят выпуск, а выпускают релиз. Иначе тавтология получается :)

     
     
  • 4.62, Аноним (62), 15:25, 21/09/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Выпуск релиза нового обновления
     
  • 2.83, Аноним (78), 03:36, 22/09/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Есть спринты (майлстоны) их результат это выпуск,
    а есть функиональные требования от заказчика и их удовлетворяющий выпуск это релиз.
    А может и на оборот
     

  • 1.58, Аноним (58), 00:50, 21/09/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    В чём кайф если ядро клангом собрать?
     
     
  • 2.61, Аноним (58), 11:47, 21/09/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Кто-нибудь собирал ядро клангом на х86_64 и может объяснить какой-то практический профит? Быстрее компиляция или это как-то отразилось на работе системы?
     
     
  • 3.84, Аноним (78), 03:37, 22/09/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Варнингов больше будет - выше шанс найти ощибок выхода за границы  и тд
     
  • 2.71, Аноним (70), 22:09, 21/09/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Если соберётся. то, возможно, в панику впадать начнёт.
     
  • 2.136, Аноним (33), 16:31, 26/09/2019 [^] [^^] [^^^] [ответить]  
  • +/
    ни в чём. при компиляции сначала придётся включить игнор [не помню уже каких именно] ворнингов. а затем ловить корки ядра.
     

  • 1.59, Аноним (59), 08:44, 21/09/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    > компилирующего программы в промежуточный биткод RISC-подобных виртуальных инструкций (низкоуровневая виртуальная машина с многоуровневой системой оптимизаций). Сгенерированный псевдокод может быть преобразован при помощи JIT-компилятора в машинные инструкции непосредственно в момент выполнения программы.

    Зачем мне это? Компилятор во время я компиляции должен давать сразу бинарник заточенный под мой проц.

    Выполняют компиляцию один раз, во время установки с исходников, с максимальной заточькой под мой проц. Не хочу чтобы исполняемый код изменялся во время компиляции вирусной или каким-то JIT.

     
     
  • 2.60, Аноним (60), 09:49, 21/09/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Я хз зачем это в новости, LLVM _может_ использоваться так как описано, но в основном его используют как обычный компилятор под конкретную архитектуру (как GCC, он с ним почти полностью совместим).
    Вам может не надо, кому-то JIT надо =)
     

  • 1.72, JL2001 (ok), 22:14, 21/09/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > проекты Android и ChromeOS уже переведены на использование Clang для сборки ядра и Google тестирует Clang в качестве основной платформы для сборки ядер для своих рабочих Linux-систем

    в чём профит для гугла от этого?

     
     
  • 2.85, Аноним (78), 03:38, 22/09/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Лицензия у ГЦЦ требует лизать ботинки авторам а в кланге только писать что использовался шланг
     
  • 2.93, Ordu (ok), 21:16, 22/09/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Уменьшение зоопарка инструментария. gcc крайне сложно использовать для чего-либо, кроме компиляции. llvm можно использовать для подсветки синтаксиса, для написания статических анализаторов, и для любых других задач требующих парсера языка. При желании можно использовать не только фронтенд llvm, но и бекенд. С gcc тоже так можно, но теоретически, потому что практически проще использовать llvm: какой бы убогой не была его документация, у gcc всё ещё хуже.
     
  • 2.95, Аноним (95), 21:31, 22/09/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    клэнг - это изначально кросс-компилятор, по определению. Ставишь клэнг из пакетов - и нужна только sysroot. GCC же нужно компилировать свой для каждой платформы - в нём пути жёстко захардкожены. В результате можно будет не поставлять компиляторы в составе ndk.
     

  • 1.124, Андрей (??), 15:37, 24/09/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >В компоновщик LLD добавлена экспериментальная возможность партицирования, позволяющая разделить одну программу на несколько частей, каждая из которых размещается в отдельном ELF-файле. Указанная возможность позволяет запускать основную часть программы, которая по мере необходимости в процессе работы будет подгружать остальные компоненты (например, можно выделить встроенный PDF-просмотрщик в отдельный файл, который будет загружаться только когда пользователь открыл PDF-файл).

    Это уже было в TurboPascal ещё в 90е... :)

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Спонсоры:
    Слёрм
    Inferno Solutions
    Hosting by Ihor
    Хостинг:

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