12 Октября 2024, 11:24

Clang

Автор turbo, 07 Февраля 2010, 14:18

« предыдущая тема - следующая тема »

0 Пользователей и 1 Гость просматривают эту тему.

turbo

07 Февраля 2010, 14:18 Последнее редактирование: 15 Мая 2011, 01:32 от Zhek@Ch
[size="3"]Компилятор Clang преодолел барьер собственной пересборки[/size]

Разрабатываемый в рамках проекта LLVM компилятор Clang достиг новой стадии развития - им впервые удалось пересобрать собственную кодовую базу (550 тыс. строк кода на C++), иными словами собрать Clang используя только Clang. Полученный в результате такой сборки исполняемый файл прошел все разработанные в рамках LLVM тесты, направленные на выявление регрессивных изменений. Кроме синтетических тестов, был использован простой и надежный способ проверки: собранным при помощи Clang исполняемым файлом была осуществлена пересборка Clang по второму и третьему кругу.

Clang представляет собой LLVM фронтенд для языков C, С++ и Objective-C, который можно использовать вместо GCC. Исходные тексты Clang распространяются в рамках лицензии BSD, что делает этот компилятор интересным решением для замены GCC в BSD-подобных ОС. Например, близится к завершению проект адаптация данного компилятора для сборки базовой системы FreeBSD. В будущем во FreeBSD планируется использовать в качестве системного компилятора Clang, вместо GCC. В настоящий момент успешно собираются приложения базовой системы и ядра FreeBSD для архитектур i386 и amd64.

Из параллельно развивающихся с 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.

http://www.opennet.r...shtml?num=25305

Zhek@Ch

26 Октября 2010, 19:36 #1 Последнее редактирование: 29 Октября 2010, 23:53 от Zhek@Ch
[size="3"]Обеспечена возможность сборки Linux-ядра 2.6.36[/size]

Разрабатываемый в рамках проекта LLVM компилятор Clang преодолел значительный барьер - разработчикам удалось добиться сборки Linux-ядра 2.6.36. С учетом того, что ядро корректно собирается только ограниченным числом версий GCC, это значительный шаг в развитии Clang. В настоящий момент собранное при помощи Clang ядро способно загружаться на пятый уровень выполнения (runlevel 5, запуск графической и сетевой подсистемы), работать как в окружении QEMU, так и на реальном оборудовании (X-сервер удалось запустить на Macbook 5.1 (CPU Intel C2D), ведется подготовка тестовой системы на базе Intel Atom). В системе на базе собранного в Clang Linux-ядра успешно проведен эксперимент по пересборке и последующему запуску еще одной копии ядра (self-host).

К сожалению не все проблемы еще решены и для того чтобы добиться загрузки системы приходится использовать некоторые компоненты, собранные при помощи GCC. В частности, из-за возникновения внутренних ошибок компилятора и проблем c обработкой массивов переменной длины, пока не удается собрать код SELinux, Posix ACL, IPSec, eCrypt и других подсистем, использующих Crypto API. Разработчики Clang надеются, что код Crypto API не фундаментально завязан на специфичных GNU-расширениях GCC и решить возникшие проблемы удастся незначительными правками. Кроме того, незначительные проблемы наблюдаются при сборке кода, связанного с Xen, IPv6 и Netfilters/Router, не работает код загрузки модулей ядра.

Из успешно собранных подсистем можно отметить:

  • Базовый код ядра, файловые системы, интерфейс к шинам передачи данных, PCI, ACPI - стресс-тестирование пока не проводилось, но на первый взгляд все работает;
  • SMP, SMT, SysV, pthreads, POSIX IPC - проведено интенсивное тестирование с использованием пакетов tiobench и rt-tests, а также библиотек Boost.Process и the Boost.Thread;
  • NUMA, swap, mm, slab allocator - с целью тестирования подсистем управления памятью, ядро и связка LLVM + Clang были перекомпилированы несколько раз, используя для сборки текущей системы ядро и Clang, собранные на предыдущем этапе;
  • Сетевой стек - IPv4-стек работает без нареканий, за исключением IPSec и Netfilter;
  • Драйверы и прошивки - в общем виде драйверы собираются, если они не используют Crypto API. Из проверенных устройств отмечаются: клавиатура, DVD/CDROM, тачпад, USB-драверы, web-камера iSight, графика и звук (в системе нормально работает Flash-плагин и просмотр видео).
Clang представляет собой LLVM фронтенд для языков C, С++ и Objective-C, который можно использовать вместо GCC. Исходные тексты Clang распространяются в рамках лицензии BSD, что делает этот компилятор интересным решением для замены GCC в BSD-подобных ОС. В настоящее время активно развивается проект адаптации данного компилятора для сборки базовой системы и портов FreeBSD. В будущем Clang планируется использовать вместо GCC в качестве системного компилятора FreeBSD.



Zhek@Ch

30 Октября 2010, 00:19 #2 Последнее редактирование: 30 Октября 2010, 00:22 от Zhek@Ch
[size="3"]Библиотека Qt успешно собрана компилятором Clang [/size]

Разработчики компании Nokia сообщили о достижении успешной сборки последнего снапшота фреймворка Qt компилятором Clang на платформах MacOS X и Linux. Тестирование вариантов Qt, собранных в GCC и Clang, выявило, что Linux-сборка на основе Clang функционирует на 16% медленнее, но собирается на 23% быстрее и занимает на 5% меньше дискового пространства. Отмечается, что результаты оценки производительности не окончательны - после внесения определенных оптимизаций ситуация может измениться.




Zhek@Ch

12 Апреля 2011, 10:45 #3 Последнее редактирование: 12 Апреля 2011, 10:45 от Zhek@Ch
[size="3"]Прогресс в сборке Qt с использованием Clang [/size]

За пять месяцев, прошедших с момента первой успешной пересборки библиотеки Qt при помощи разрабатываемого в рамках проекта LLVM компилятора Clang, отмечается заметный прогресс в поддержке расширенных технологий Qt. Например, в настоящее время собирается не только штатное ядро Qt4 (ранее осуществлялась сборка специальной "clang"-ветки Qt), но и такие связанные с платформой составляющие, как компонент QtWebKit и среда разработки Qt Creator.

При оценке производительности демонстрационного браузера на основе Qt и QtWebKit, собранного при помощи Clang, на выполнение тестов SunSpider ушло 415.4мс, в то время как QtSDK/64bit в сборке Nokia выполняется за 360.0 мс (замедление на 13%).


Zhek@Ch

15 Мая 2011, 01:34 #4 Последнее редактирование: 15 Мая 2011, 01:35 от Zhek@Ch
[size="3"]Статус готовности CLang к сборке ядра Linux [/size]

В прошлом октябре был анонсирован проект по адаптации LLVM компилятора CLang к сборке ядра Linux. С тех пор прошло более полугода, и на днях разработчики опубликовали свой отчет о проделанной работе.

В целом:

  • Удалось получить работающую сборку ядер 2.6.37 и 2.6.38 (для некоторых конфигураций)
  • KVM и Xen использовать нельзя, причем последний пока даже не компилируется
  • Компилируются примерно 90% драйверов ядра, многие работают
  • Некоторые поставляемые сторонними вендорами драйвера (Broadcom, NVIDIA) работают отлично
  • Можно использовать многопроцессорные конфигурации (правда, только на x86), однако в некоторых случаях они требуют дополнительных усилий по доработке компилируемого кода
Что не работает:

  • Ассемблер для генерации кода реального режима (директивы code16gcc), поэтому, невозможно откомпилировать код начальной загрузки (для этой цели используется gas)
  • GCC-расширения языка C (некоторые работают, некоторые нет)
  • Опции генерации и оптимизации кода: -mregparm, -fcall-saved-reg, __arch_hweight*(), -pg, атрибут no_instrument_function, -fno-optimize-sibling-calls
Несмотря на возникающие трудности, разработчики полны энтузиазма. Свой проект они назвали LLL project, что расшифровывается как LLVM Linux project.

>>> Подробности


Zhek@Ch

26 Мая 2011, 01:16 #5 Последнее редактирование: 26 Мая 2011, 01:17 от Zhek@Ch
[size="3"]Компания Google подключилась к работе по улучшению поддержки C++ в Clang[/size]

В блоге инженеров Google появилась заметка, рассказывающая о заинтересованности компании в развитии разрабатываемого в рамках проекта LLVM компилятора Clang. В заметке рассказано о том, что уже около года Google использует Clang для анализа исходных текстов и выявления трудно поддающихся отладке ошибок в коде на языке C++. На базе Clang силами Google уже создано несколько отладочных инструментов и компания уже подключилась к разработке C++ компилятора на базе Clang.