The OpenNET Project / Index page

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

Новая версия набора компиляторов LLVM 2.7

27.04.2010 21:50

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

В новом релизе существенно улучшилось качество генерируемого кода, расширен состав генерируемой информации для отладчиков, а также сделано большое количестве изменений в инфраструктуре, самая важная из которых - это то, что Clang теперь может успешно компилировать свои собственные исходные тексты, что в случае разработки компиляторов является существенным достижением, тем более, при использовании конструкций C++.

Наиболее важные новшества LLVM версии 2.7:

  • Поддержка платформы MicroBlaze;
  • API дизассемблера (пока поддерживается архитектура X86);
  • Более эффективное с точки зрения потребления памяти и гибкое представление отладочной информации;
  • Расширяемая система метаданных для промежуточного представления генерируемого кода (Intermediate Representation, IR), что позволяет реализовать новые возможности для оптимизации языковых конструкций;
  • Прямой доступ к блокам IR, что может повышать производительность некоторых конструкций интерпретируемых языков программирования на более чем 20%;
  • Дальнейшее развитие проекта LLVM-MC (LLVM-дизассемблер);
  • Дальнейшее развитие поддержки C++ в Clang;
  • Поддержка non-temporal обращений к памяти (идентичных логике инструкции MOVNT архитектуры X86), что позволит эффективнее использовать кеш процессора;
  • Поддержка "коротких" чисел с плавающей точкой
  • Улучшенная генерация кода для часто используемых в языке Си так называемых "tail calls" (например, конструкция 'return strndup(buf, text_buffer_size);
  • Оптимизированный эвристический подход для использования inline-функций;
  • Возможность использования отладчика в JIT-компиляторе и другие нововведения.

Кроме улучшения программного кода, в мире LLVM произошли и другие перемены - представлен новый логотип проекта и новый официальный LLVM-блог, а также введен в строй более производительный сервер llvm.org, выдержавший 100 тыс. посещений в марте. Темп разработки LLVM, как и других проектов, основывающихся на LLVM, продолжает увеличиваться.

Из параллельно развивающихся проектов, основанных на LLVM , можно отметить:

  • llvm-gcc плагин DragonEgg, нацеленный на совместимость с GCC 4.5;
  • KLEE - символьный анализатор и генератор тестовых наборов;
  • Runtime-библиотека compiler-rt;
  • llvm-mc - автогенератор ассемблера, дизассемблера и других, связанных с машинным кодом компонентов, на основе описаний параметров LLVM-совместимых платформ.
  • VMKit - виртуальная машина для Java VM и .NET VM;
  • Реализация функционального языка программирования Pure;
  • LDC - компилятор для языка D;
  • Roadsend PHP - оптимизатор, статический и JIT компилятор для языка PHP;
  • Виртуальные машины для Ruby: Rubinius и MacRuby;
  • Unladen Swallow - реализация языка Python;
  • LLVM-Lua
  • FlashCCompiler - средство для компиляции кода на языке Си в вид пригодный для выполнения в виртуальной машине Adobe Flash.


  1. Главная ссылка к новости (http://lists.cs.uiuc.edu/piper...)
  2. OpenNews: Сравнение производительности компиляторов GCC, Clang и LLVM-GCC
  3. OpenNews: Тестирование варианта FreeBSD, переведенного на компилятор Clang
  4. OpenNews: GCC-плагин DragonEgg достиг возможности собственной пересборки
  5. OpenNews: Компилятор Clang преодолел барьер собственной пересборки
  6. OpenNews: Новая версия набора компиляторов LLVM Compiler 2.6
Автор новости: vr13
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/26404-LLVM
Ключевые слова: LLVM, gcc, compile, jit
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (29) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, iZEN (ok), 22:26, 27/04/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Есть с октября 2009 регулярно обновляемый порт LLVM 2.7 в FreeBSD: http://www.freshports.org/devel/llvm-devel/
     
     
  • 2.6, Толстый (ok), 23:54, 27/04/2010 [^] [^^] [^^^] [ответить]  
  • +/
    svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm
    В любой другой операционной системе.
     

  • 1.3, Толстый (ok), 23:03, 27/04/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Когда уже сделают поддержку исключений в Windows? Единственное, что мешает полноценному кросс-платформенному использованию.
     
     
  • 2.7, asl (?), 03:14, 28/04/2010 [^] [^^] [^^^] [ответить]  
  • +/
    Patches are welcome (c) :)
     
  • 2.13, Unixoid_потому_что_кривые_руки_писали_этот_модуль (ok), 09:04, 28/04/2010 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >Когда уже сделают поддержку исключений в Windows?

    Кому нужен этот кривой Windows, тот пускай и делает :-)

     
     
  • 3.21, Толстый (ok), 12:49, 28/04/2010 [^] [^^] [^^^] [ответить]  
  • +/
    Скажи это всем клиентам. Сними розовые очки.
     
     
  • 4.28, Andrey Mitrofanov (?), 14:25, 28/04/2010 [^] [^^] [^^^] [ответить]  
  • +/
    >Скажи это всем клиентам. Сними розовые очки.

    То есть _твоим клиентам надо, а сделать -- "пусть скорее уж" кто-нибудь другой, я правильно уловил твою мысль? Бизнес процветает, малацца! Вот это всё и расскажи этим самым "клиетам", выствляя счёт.

     
     
  • 5.32, Толстый (ok), 02:13, 29/04/2010 [^] [^^] [^^^] [ответить]  
  • +/
    Эта задача очень нетривиальна, я знаю пару человек которые начинали делать но особо не продвинулись(люди очень грамотные). Не сделают разработчики, буду пользоваться другим, что поделать. Я просто выразил мнение о фиче, которой лично мне не хватает в llvm. Вы сами много исправляли багов/реализовали фич в компиляторе которым пользуетесь(если пользуетесь), а также операционной системе и приложениях?
     
  • 5.33, Толстый (ok), 02:15, 29/04/2010 [^] [^^] [^^^] [ответить]  
  • +/
    Да и вообще речь шла о Windows. Он хоть и кривой, но люди для которых пишется ПО как ни странно сидять под виндой. Поэтому я изначально думаю над тем, чтобы софт был кросс-платформенный.
     
     
  • 6.34, ABorland (?), 01:23, 20/05/2010 [^] [^^] [^^^] [ответить]  
  • +/
    Ух какие качественные и тонкие Micro Тролли сегодня на опен нете
     

  • 1.8, IGX (?), 03:38, 28/04/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А можно в Clang компилировать код для Linux в Windows и наоборот? Т.е. возможна ли кросскомпиляция, в том числе для разных процессоров?
     
     
  • 2.12, Unixoid_потому_что_кривые_руки_писали_этот_модуль (ok), 09:02, 28/04/2010 [^] [^^] [^^^] [ответить]  
  • –1 +/
    А зачем ? :-)
     
  • 2.14, arcade (ok), 10:32, 28/04/2010 [^] [^^] [^^^] [ответить]  
  • +/
    >А можно в Clang компилировать код для Linux в Windows и наоборот?
    >Т.е. возможна ли кросскомпиляция, в том числе для разных процессоров?

    Да. Хотя надеюсь Вы понимаете отличия компиляции программы в код от линковки с динамическими/статичесикими библиотеками. Если первое - на ура, то второе - только в полном окружении пусть и на другой системе.

    PS: В этом смысле жгут NetBSD-шники. У них система собирается на любом другом юниксе и не требует наличие чего-либо - само всё бутстрапит из шелла.

     

  • 1.9, IGX (?), 03:41, 28/04/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Можно ли с помощью Clang в Windows скопилировать код для Linux Microblaze или просто двоичный код для некоторой функции, который потом динамически загрузить Microblaz'ом?
     
     
  • 2.15, arcade (ok), 10:34, 28/04/2010 [^] [^^] [^^^] [ответить]  
  • +/
    >Можно ли с помощью Clang в Windows скопилировать код для Linux Microblaze
    >или просто двоичный код для некоторой функции, который потом динамически загрузить
    >Microblaz'ом?

    Да. На самом clang умеет делать универсальные бинарники для нескольких архитектур сразу.

     
     
  • 3.19, Ariel (ok), 12:38, 28/04/2010 [^] [^^] [^^^] [ответить]  
  • +/
    Но вы учитывайте, что бинарный файл имеет определённый формат который обеспечивает существование нескольких файлов в универсальном архиве, и, например mach-o это умеет, а elf или pe - нет. И любой файл слинкован с динамическими либами, которых может не быть на целевой системе, например в linux вообще отсутствует понятие framework, и загрузчик не умеет с ними работать. Кросскомпиляция без проблем используется, если у вас одна система на нескольких разных машинах, как например Mac OS X. Хотя, если использовать кроссплатформенное окружение (OpenStep), то почему нет.
     
  • 2.25, IGX (?), 13:21, 28/04/2010 [^] [^^] [^^^] [ответить]  
  • +/
    1) Можно ли с помощью Clang скомпилировать машинный код для некоторой функции (без всяких обёрток в виде dll/so), который потом динамически загрузить?
     
  • 2.27, IGX (?), 13:54, 28/04/2010 [^] [^^] [^^^] [ответить]  
  • +/
    2) Можно ли с помощью Clang скомпилировать промежуточный байт-код для некоторой функции, который потом скомпилировать при загрузке в машинный код и использовать скомпилированную функцию в программе?
     
     
  • 3.29, Ariel (ok), 15:36, 28/04/2010 [^] [^^] [^^^] [ответить]  
  • +/
    1
    Насколько я знаю, компилируются единицы трансляции, т е файлы, из которых вы можете её экспортировать, если она с внешней линковкой, мне не ясен ваш вопрос,

    2
    о загрузке см. 1, скомпилировать в IR и затем исполнять на виртуальной машине llvm можно, это называется jit,

    clang file.c -c -emit-llvm -o file.bc
    lli file.bc

     
     
  • 4.30, IGX (?), 18:05, 28/04/2010 [^] [^^] [^^^] [ответить]  
  • +/
    >1
    >Насколько я знаю, компилируются единицы трансляции, т е файлы, из которых вы
    >можете её экспортировать, если она с внешней линковкой, мне не ясен
    >ваш вопрос,

    Например, llvm позволяет во время выполнения программы конструировать функцию в памяти в виде IR, потом компилировать IR в машинный код, а затем через указатель на блок памяти, содержащий этот машинный код, вызывать функцию, как любую другую функцию вашей программы. У меня вопрос: позволяет ли подобное делать Clang, т.е. компилировать функцию Си/С++ в IR (подобно ручному конструированию IR в llvm) в память во время выполнения программы? Если да, то как примерно это делается?


    >2
    >о загрузке см. 1, скомпилировать в IR и затем исполнять на виртуальной
    >машине llvm можно, это называется jit,
    >
    >clang file.c -c -emit-llvm -o file.bc
    >lli file.bc

    Спасибо за наводку, документацию на clang пока не читал.

     
     
  • 5.31, Ariel (ok), 22:01, 28/04/2010 [^] [^^] [^^^] [ответить]  
  • +/
    Не знаю, я не работал с IR, смотрите документацию в комплекте clang, или лучше спросите llvm mailing list.
     

  • 1.10, Zenitur (?), 06:47, 28/04/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А можно ли компилировать ядро?
    :-)
     
     
  • 2.16, arcade (ok), 10:37, 28/04/2010 [^] [^^] [^^^] [ответить]  
  • +/
    >А можно ли компилировать ядро?
    >:-)

    FreeBSD'шники уже всю систему компилируют. http://wiki.freebsd.org/BuildingFreeBSDWithClang

     

  • 1.11, anthonio (ok), 06:59, 28/04/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Логотип у них какой-то грозный... Всем бояться! :)
     
  • 1.17, аноним (?), 11:23, 28/04/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Логотип спонсировал Apple. Как и всё остальное.
     
  • 1.18, anonimus (?), 11:57, 28/04/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Как этой штукой компилить код, поддерживающий OpenCL? Есть какие-то плагины?
    Но нигде не нашел ни статьи ни примеров, как это делать...
     
     
  • 2.22, anonimus (?), 12:58, 28/04/2010 [^] [^^] [^^^] [ответить]  
  • +/
    ...есть только некоторые упоминания об этом...
     

  • 1.20, PereresusNeVlezaetBuggy (ok), 12:45, 28/04/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Спасибо, отличная новость во всех смыслах :)
     
  • 1.26, Аноним (-), 13:22, 28/04/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    жду не дождусь, пока оно станет в продакшн. вкусные плюхи однако там есть.
     

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



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

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