В Mono реализована (http://tirania.org/blog/archive/2009/Jul-16.html) поддержка LLVM бэкенда, на лету транслирующего исходных код в машинные инструкции. При тестировании производительности пакетом SciMark новый код набрал 610 баллов, против 482 при использовании стандартного встроенного JIT-компилятора.URL: http://tirania.org/blog/archive/2009/Jul-16.html
Новость: http://www.opennet.me/opennews/art.shtml?num=22638
Во-во, ровно то, что я писал в новости про Unladen Swallow - все в итоге будет завязано на LLVM.
Ну так это хорошо. LLVM это по сути тот же gcc, просто более прозрачно разбитый на компоненты.
>Ну так это хорошо. LLVM это по сути тот же gcc, просто
>более прозрачно разбитый на компоненты.LLVM не имеет ничего общего с gcc, не порите такой кошмарной ерунды.
Пока они не компилят его в нативный код - нафиг не нужно. Пишут что и это, и swallow жрут памяти чуть ли не как java.
А в LLVM есть свой движек для интерпретарора?
Или делать надо?
Любой интерпретатор состоит из вызова функций, а вот их уже компилируем LLVM :)
Напишу как есть:1) Есть IR. Отличается от Phoenix (Jule 2008 CTP) в худшую сторону по гибкости (в фениксе, например, спокойно можно inline-assembler для произвольной архитектуры замутить), но интерфейс более обточенный и всякий кал попрятан в pimpl/private.
2) Есть ридеры\врайтеры собственного языка который есть текстовое отражение IR. закодил что-нить через АПИ - сдампил, посмотрел. У феникса нет языка, но есть конфигуриремый дамп.
3) Есть возможность сохранить IR в файло в виде байткода, в little endian. Скомпилил в байткод под вендой, преобразовал на маке в PowerPC ассемблер и запустил, не как с байткодом трешового LUA =) Байткода у феникса разумеется тоже нет.
4) Разумеется возможность скомпилить IR в асм. в оф сайте перечислено куча процов, но на большинстве - поддержка экспериментальная =))) также есть линкер и дизассемлер. Феникс умеет x84/x64 без поддержки alloca, не умеет создавать exe & dll, умеет только инструментировать (!!! ахтунг, глубоки ковыряния и Reflector дружно сообщили что такая возможность пока именно отсутствует)
5) Есть JIT. Как раз для моно, иказы и его компании. Правда эгзипшены сформированы как C++шные, изза этого есть проблемы с интеграцией.
6) Есть куча мемликов ( и зачем тогда на С++ пишут =) ), некоторые с 2007 года поправить не могут. Но феникс жрет больше памяти, инитится очень тормознуто, на лики не тестил.
7) Версия 2.6 будет поддерживать многопочную компиляцию. Немного страшно учитывая п.6. В фениксе тоже есть, но феникс не юзабелен до поры пока из MS Research не выползет, а то местные научные сотрудники не имеют представления как правильно под .NET писать.
Написано всё на кривом С++ ( точнее на С с классами =) ), без буста, но с СТЛ. т.е. кодить еще пока ребята не до конца научились, но мозг детектед. По-идее им надо было бы юзая C# накатать макет статического компилера, довести до продакшин качества на большинстве платформ.. затем почитать Саттера, Александреску, левелапнуцца, конвертнуть всё в С++0x, угрохали бы меньше времени на написание\поддержание\дебаг\многопоточность, оптимизаций былоб больше и круче.