[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 (http://www.opennet.ru/opennews/art.shtml?num=25305)
[size="3"]
Обеспечена возможность сборки Linux-ядра 2.6.36[/size]
Разрабатываемый в рамках проекта LLVM компилятор Clang преодолел (http://permalink.gmane.org/gmane.comp.compilers.clang.devel/11432) значительный барьер - разработчикам удалось добиться сборки 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.
# opennet.ru (http://www.opennet.ru/opennews/art.shtml?num=28418)
[size="3"]Библиотека Qt успешно собрана компилятором Clang [/size]Разработчики компании Nokia сообщили (http://labs.qt.nokia.com/2010/10/29/compiling-qt-with-clang/) о достижении успешной сборки последнего снапшота фреймворка Qt компилятором Clang на платформах MacOS X и Linux. Тестирование вариантов Qt, собранных в GCC и Clang, выявило, что Linux-сборка на основе Clang функционирует на 16% медленнее, но собирается на 23% быстрее и занимает на 5% меньше дискового пространства. Отмечается, что результаты оценки производительности не окончательны - после внесения определенных оптимизаций ситуация может измениться.
(http://pics.kz/s5/77/d5/28/77d5285b539c7f32ae7d6c81f0e5d201.jpg) (http://labs.qt.nokia.com/wp-content/uploads/2010/10/clang-vs-gcc-build-time.png)
# opennet.ru (http://www.opennet.ru/opennews/art.shtml?num=28461)
[size="3"]Прогресс в сборке Qt с использованием Clang [/size]За пять месяцев, прошедших с момента (http://linuxforum.kz/index.php?/topic/4317-clang/page__view__findpost__p__12965) первой успешной пересборки библиотеки Qt при помощи разрабатываемого в рамках проекта LLVM компилятора Clang, отмечается (http://elcuco2.blogspot.com/2011/04/qt-clang-it-compiles.html) заметный прогресс в поддержке расширенных технологий Qt. Например, в настоящее время собирается не только штатное ядро Qt4 (ранее осуществлялась сборка специальной "clang"-ветки Qt), но и такие связанные с платформой составляющие, как компонент QtWebKit и среда разработки Qt Creator.
При оценке производительности демонстрационного браузера на основе Qt и QtWebKit, собранного при помощи Clang, на выполнение тестов SunSpider ушло 415.4мс, в то время как QtSDK/64bit в сборке Nokia выполняется за 360.0 мс (замедление на 13%).
# opennet.ru (http://www.opennet.ru/opennews/art.shtml?num=30205)
[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. (https://github.com/lll-project)
>>> Подробности (http://lwn.net/Articles/441018/)
# linux.org.ru (http://www.linux.org.ru/news/kernel/6259782)
[size="3"]Компания Google подключилась к работе по улучшению поддержки C++ в Clang[/size]В блоге инженеров Google появилась (http://google-engtools.blogspot.com/2011/05/c-at-google-here-be-dragons.html) заметка, рассказывающая о заинтересованности компании в развитии разрабатываемого в рамках проекта LLVM компилятора Clang (http://clang.llvm.org/). В заметке рассказано о том, что уже около года Google использует Clang для анализа исходных текстов и выявления трудно поддающихся отладке ошибок в коде на языке C++. На базе Clang силами Google уже создано несколько отладочных инструментов и компания уже подключилась к разработке C++ компилятора на базе Clang.
# opennet.ru (http://www.opennet.ru/opennews/art.shtml?num=30661)