The OpenNET Project / Index page

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

GCC-плагин DragonEgg достиг возможности собственной пересборки

24.02.2010 14:28

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

Одним из самых надежных тестов работоспособности компиляторов является пересборка собственной кодовой базы. DragonEgg на днях успешно перешагнул этот барьер: вначале с использованием DragonEgg были пересобраны исходные тексты GCC-4.5, LLVM и dragonegg, а затем эксперимент по был повторен с задействованием для пересборки свежескомпилированного бинарного файла. В настоящий момент до достаточно высокого уровня доведена работоспособность DragonEgg для языков Си и Си++, частично реализована поддержка Fortran и Ada, хуже обстоят дела с поддержкой Obj-C и Obj-C++, много работы предстоит проделать для поддержки Java. На текущей стадии развития DragonEgg поддерживает архитектуры x86-32 и x86-64, может работать в Linux и Darwin.

Несколько недель назад стадии возможности самопересборки достиг Clang, LLVM фронтенд для языков C, С++ и Objective-C.

Кроме CLang, из основанных на LLVM проектов, можно отметить:

  • VMKit - виртуальная машина для Java VM и .NET VM;
  • Реализация функционального языка программирования Pure;
  • LDC - компилятор для языка D;
  • Roadsend PHP - оптимизатор, статический и JIT компилятор для языка PHP;
  • Rubinius и MacRuby - виртуальные машины для Ruby;
  • Unladen Swallow - реализация языка Python;
  • LLVM-Lua;
  • FlashCCompiler - средство для компиляции кода на языке Си в вид пригодный для выполнения в виртуальной машине Adobe Flash.


  1. Главная ссылка к новости (http://blog.llvm.org/2010/02/d...)
  2. OpenNews: Компилятор Clang преодолел барьер собственной пересборки
  3. OpenNews: Планы подготовки GCC 4.5
  4. OpenNews: Новая версия набора компиляторов LLVM Compiler 2.5
Лицензия: CC-BY
Тип: К сведению
Короткая ссылка: https://opennet.ru/25551-llvm
Ключевые слова: llvm, gcc, compile, jit
При перепечатке указание ссылки на opennet.ru обязательно
Обсуждение (33) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (-), 15:13, 24/02/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    Ну и развлечения у ребят(о списке внизу)

    А по сабжу интересно - это всё кто-то собирается использовать? Без сарказма.

     
     
  • 2.2, аноним (?), 15:22, 24/02/2010 [^] [^^] [^^^] [ответить]  
  • +3 +/
    >это всё кто-то собирается использовать?

    да. apple

     
  • 2.5, arcade (?), 16:13, 24/02/2010 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Да, FreeBSD. Подозреваю что Juniper Networks будут очень рады, у них уже были тёрки с GNU из-за gcc.

    Да, Google. Собственно они и разрабатывают Unlanden Swallow под собственные нужды, говорят значительно снизит нагрузку на сервера.

    Да, я. PHP ненавижу уже очень давно и стараюсь искоренять где только возможно за извечную глючность и бажность. Возможность выполнять/компилировать эту хрень нормальным компилятором - это большой плюс.

     
     
  • 3.12, Unixoid_потому_что_кривые_руки_писали_этот_модуль (ok), 17:13, 24/02/2010 [^] [^^] [^^^] [ответить]  
  • +/
    ...возможность транслировать баги PHP на уровено машинного кода ? :-))
     
     
  • 4.13, arcade (?), 17:22, 24/02/2010 [^] [^^] [^^^] [ответить]  
  • +/
    Ну или на худой конец не падать в корку в случае неправильного порядка подгрузки модулей.
     
     
  • 5.14, Dvorkin (ok), 19:37, 24/02/2010 [^] [^^] [^^^] [ответить]  
  • –5 +/
    за 10 лет юзания впервые читаю об этом. прям фрибизиди какой-то! %-|
    возьмите нормальный линукс, поставьте оптимизатор и громко смейтесь и показывайте пальцем на тех, у кого скрипты работают дольше 0.06 секунды в присутсвии начальства.
    поразитесь, насколько эффективно
     
     
  • 6.18, arcade (?), 10:18, 25/02/2010 [^] [^^] [^^^] [ответить]  
  • +/
    Нет вот за линукс большое спасибо. Вечно ископамая весрия пыха да ещё собраная с чем попало, тогда как именно вот этих двух модулей нету - это я уже не раз проходил. В результате на линуксе приходилось пых собирать вручную.

    Кстати по поводу оптимизатора. Никогда не пытались подружить ZendOptimizer с pecl-imagemagick? Я плюнул. Пока пытался много нового узнал про пых, нашёл даже какие-то скрипты дебианщиков для автоматической сортировки модулей чтобы при загрузке модули друг друга в кору не роняли.

    Или Вас не смущает наличие сайтов типа hardened-php.net? Насколько должен быть дыряв продукт, чтобы под него отдельные конторы выпускали свои наборы патчей?

     
     
  • 7.21, Dvorkin (ok), 12:24, 25/02/2010 [^] [^^] [^^^] [ответить]  
  • +/
    ха-ха 3 раза линуксов море китайское я для себя выбрал наполовину платную редх... большой текст свёрнут, показать
     
     
  • 8.23, arcade (ok), 13:01, 25/02/2010 [^] [^^] [^^^] [ответить]  
  • +/
    У мну на фре всё собирается с теми опциями которые я хочу в 100 случаев При эт... большой текст свёрнут, показать
     
     
  • 9.25, anonimus (?), 13:13, 25/02/2010 [^] [^^] [^^^] [ответить]  
  • +/
    Не заливайте ... текст свёрнут, показать
     
     
  • 10.27, arcade (ok), 16:09, 25/02/2010 [^] [^^] [^^^] [ответить]  
  • +/
    Ну уж сорри Я действительно всё собираю из портов ... текст свёрнут, показать
     
     
  • 11.28, anonimus (?), 16:14, 25/02/2010 [^] [^^] [^^^] [ответить]  
  • +/
    Вот об этом У мну на фре всё собирается с теми опциями которые я хочу в 100 сл... текст свёрнут, показать
     
     
  • 12.30, arcade (ok), 16:50, 25/02/2010 [^] [^^] [^^^] [ответить]  
  • +/
    Это как в задаче про Ахиллеса и черепаху Вы понимаете 100 с пессимистической т... текст свёрнут, показать
     
  • 9.26, Dvorkin (ok), 13:48, 25/02/2010 [^] [^^] [^^^] [ответить]  
  • +/
    этого не може быть по теории вероятности гон системный майлер всегда выбираю... текст свёрнут, показать
     
     
  • 10.29, arcade (ok), 16:27, 25/02/2010 [^] [^^] [^^^] [ответить]  
  • +/
    По которой Софт либо собирается с теми опциями которые мне нужны либо нет У ме... большой текст свёрнут, показать
     
     
  • 11.31, Dvorkin (ok), 16:52, 25/02/2010 [^] [^^] [^^^] [ответить]  
  • +/
    поскипано N строк опций сборки круто сам писал только к чему это только пос... большой текст свёрнут, показать
     
     
  • 12.32, arcade (ok), 17:27, 25/02/2010 [^] [^^] [^^^] [ответить]  
  • +/
    Мммм Я ярый противник софта который тягает за собой собственный boost, собствен... большой текст свёрнут, показать
     
     
  • 13.33, Dvorkin (ok), 17:35, 25/02/2010 [^] [^^] [^^^] [ответить]  
  • +/
    а я считаю, не стоит экстремальничать пусть будет как собрано, у меня есть чем ... текст свёрнут, показать
     

  • 1.3, dq0s4y71 (??), 15:39, 24/02/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Интересно, а LLVM используется больше как переходная стадия для компиляции в native code, или он юзабелен и как виртуальная машина? Могу я, например, прикрутить ее к своему приложению для выполнения пользовательских скриптов?
     
     
  • 2.7, arcade (?), 16:17, 24/02/2010 [^] [^^] [^^^] [ответить]  
  • +/
    Да, вполне юзабелен. По отчётам юзеров в нём намного легче разобраться чем в том же самом GCC. И за соблюдением качества сорцов там тоже очень пристально следят.

    Был недавно случай, один товарищ подметил что в некотором куске кода один указатель всегда виртуален и отдельная проверка этого указателя в сущности не нужна. Патч приняли только когда он проверку заменил assert'ом.

     

  • 1.4, Аноним (-), 15:46, 24/02/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Кто-нибудь скажите пожалуйста, нативные бинарные ELFы на нем собираются? Или только байт-код?
     
     
  • 2.8, arcade (?), 16:31, 24/02/2010 [^] [^^] [^^^] [ответить]  
  • +/
    >Кто-нибудь скажите пожалуйста, нативные бинарные ELFы на нем собираются? Или только байт-код?

    Да, собираются.

     

  • 1.6, ELF (?), 16:13, 24/02/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    ээээм, можно будет заюзать сишные и джавские либы из любого языка, поддерживаемго llvm?
     
     
  • 2.9, arcade (?), 16:41, 24/02/2010 [^] [^^] [^^^] [ответить]  
  • +/
    >ээээм, можно будет заюзать сишные и джавские либы из любого языка, поддерживаемго
    >llvm?

    Нет, Вы многое путаете. Сам по себе llvm поддерживает только минимум языков. Остальное - надстройки, позволяющие использовать llvm как компилятор для определённого языка.

    А поддержка всего сразу как в .NET требует не компилятора а заранее обусловленного и тщательно продуманного API, который обязаны использовать все поддерживаемые языки. Почему в .NET C# появился? Потому что обычный С в ядро не всегда синтегрируешь.

    Для того чтобы 'эти' либы подошли 'туда' всё равно нужно писать прослойку которая будет заниматься типами, правилами вызова и прочим барахлом.

    PS: IMHO. Могу гнать.

     
     
  • 3.15, ZOtt (?), 20:24, 24/02/2010 [^] [^^] [^^^] [ответить]  
  • +/
    понятно, работаем дельше по-старинке, но в чем тогда профит llvm? развлекаться с оптимизцией?
     
     
  • 4.17, XoRe (ok), 01:10, 25/02/2010 [^] [^^] [^^^] [ответить]  
  • +3 +/
    >понятно, работаем дельше по-старинке, но в чем тогда профит llvm? развлекаться с
    >оптимизцией?

    BSD лицензия.
    Помимо технических моментов.

     

  • 1.10, devlink (?), 16:44, 24/02/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    То есть вроде как достойный конкурент GCC???
     
     
  • 2.11, arcade (?), 16:54, 24/02/2010 [^] [^^] [^^^] [ответить]  
  • +5 +/
    Ну оно и создавалось из-за того что при комплияции темплэйтов и больших хэдеров GCC жрёт до икса памяти при чём дико тормозит. Это конечно пофиксили в 4.5, но мой опыт общения с GCC далеко не радужен, я помню как GCC с болта решил что мой процессор умеет SSE2 и в таком виде начал генерить код. Или оптимизация коротких ветвлений, когда одна строчка после if() просто игнорировалась, но стоило дописать рядом вторую - программа начинала работать.

    Создатели говорят что сам по себе GCC слишком изнавыворочен. Для того чтобы начать его оптимизировать или писать под него код его нужно долго учить - внутри он далеко он прочт и не предсказуем. А уж если ты и начал чего-нить писать - будь готов что-нибудь сломать и долго потом чинить пока не заработает. Уже до маразма дошло - есть программы которые компилятся под GCC4.2, но не под GCC4.4 и наоборот. Такое впечатление что сейчас программы пишутся не по стандартам C и C++ а всё больше для совместимости с вычурными фишками GCC.

     
     
  • 3.16, Интересующийся (??), 21:57, 24/02/2010 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Примеры в студию !! пример когда не работает короткое ветвление, версию gcc, описание платформы, исходники больших теплейтов и хедеров. Или ссылки на это.
    Пример программы компилящейся под 4.2, но не под 4.4. Примеры программ компилящихся в MSVS 6.0,но не собирающихся в MS 2008 (с версиями могу врать).
    В общем нужны доказательства того, что это проблемы gcc.
     
     
  • 4.19, arcade (?), 11:29, 25/02/2010 [^] [^^] [^^^] [ответить]  
  • +2 +/
    >В общем нужны доказательства того, что это проблемы gcc.

    Мне лень сюда это всё постить. Если Вы действительно занимаетесь всеръёз писанием кода Вы и так должны знать о чём я говорю или на худой конец должны уметь использовать Гугл для поиска ответов на свои вопросы.

    Но поскольку я сегодня с утра добрый я Вам даже это всё дам:
    - http://clang.llvm.org/features.html#performance - показывает насколько может быть оптимальнее clang на крупных файлах; используется Carbon.h - хороший хедер для MacOS который сам подтягивает 12М кода.
    - баг gcc 19530: для процессоров поддерживающих MMX автоматически генерились SSE инструкции (при чём хоть бага и кажется простой товарищам пришлось расковыривать всё вплоть до аллокатора регистров);
    - баг gcc 38961: содержимое if() - True, а код всё равно не выполняется;
    - http://gcc.gnu.org/ml/gcc-bugs/2009-05/msg00024.html - чтобы далеко не ходить взял с офф форума, пост старый, никто не удостоил вниманием.

    Да, насчёт MSVC я пас, этого зверя я никогда на зуб не пробовал.

     
     
  • 5.20, dq0s4y71 (??), 12:16, 25/02/2010 [^] [^^] [^^^] [ответить]  
  • –1 +/
    И как это доказывает, что GCC "прочт и не предсказуем. А уж если ты и начал чего-нить писать - будь готов что-нибудь сломать и долго потом чинить пока не заработает"?
     
     
  • 6.24, arcade (ok), 13:12, 25/02/2010 [^] [^^] [^^^] [ответить]  
  • +/
    >И как это доказывает, что GCC "прочт и не предсказуем. А уж

    Сорри, очепятался. Хотел написать "не прост и не предвсказуем".

    >если ты и начал чего-нить писать - будь готов что-нибудь сломать
    >и долго потом чинить пока не заработает"?

    Ошибки смотрели? Почитайте, очень интересное чтиво. Сюда могу пересказать только сжато - в первой использование неправильной инструкции на самом деле форсировалось аллокатором регистров. Вторую вообще чинить не захотели мотивируя тем что "в доке про это ничего не написано, и мы сделали вот такой хак, который это обходит ... да он ломает -Wuninitialized ну и что, -Wuninitialized всё равно никогда правильно не пахал".

     
  • 4.22, аноним (?), 12:36, 25/02/2010 [^] [^^] [^^^] [ответить]  
  • +/
    Еще не хватало тут этого. Ищите все у них в багтрекере.
     
     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Спонсоры:
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

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