Разработчики проекта LLVM о новом достижении - GCC-плагин достиг состояния, позволяющего пересобрать самого себя. 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, из основанных на проектов, можно отметить:
- виртуальная машина для Java VM и .NET VM;
Реализация функционального языка программирования ;
- компилятор для языка D;
- оптимизатор, статический и JIT компилятор для языка PHP;
и - виртуальные машины для Ruby;
- реализация языка Python;
;
- средство для компиляции кода на языке Си в вид пригодный для выполнения в виртуальной машине Adobe Flash.