Библиотека сайта rus-linux.net
LLVM
Глава 11 из книги "Архитектура приложений с открытым исходным кодом", том 1.
Оригинал: LLVM
Автор: Chris Lattner
Перевод: А.Панин
11.7. Взгляд в прошлое и направления развития в будущем
Модульная архитектура LLVM изначально разрабатывалась не для достижения целей, описанных в данной главе. Она выступала в качестве механизма самозащиты: очевидно, что мы не могли сделать все правильно с первой попытки. Конвейер фаз, например, существует для изоляции фаз с целью их исключения после замены на более удачные реализации8.
Другим важным аспектом (и дискуссионной темой для разработчиков клиентов библиотек) является развитие LLVM и наше желание переосмыслить принятые ранее решения, внеся большие изменения в API без заботы об обратной совместимости. Кардинальные изменения представления LLVM IR, например, требуют изменения алгоритмов всех фаз оптимизации и приводят к значительным изменениям в API С++. Мы выполнили эти действия в нескольких случаях и, хотя это и нарушило работу клиентов, это также было важно для последующей поддержки высокого темпа развития. Для упрощения разработки сторонних клиентов (и для создания биндингов для других языков) мы предоставляем обертки на языке C для многих популярных API (которые остаются полностью стабильными), а также планируем, что новые версии LLVM смогут использовать файлы с расширениями .ll
и .bc
, созданные с помощью устаревших версий.
Смотря в будущее, мы хотели бы продолжить работу над модульной архитектурой LLVM и упрощением использования ее частей. Например, генератор кода все еще монолитен: на данный момент невозможно использовать его отдельные функции вне LLVM. Например, если вам необходим JIT-компилятор, но не требуется встроенного ассемблера, обработки исключений или вывода отладочной информации, у вас должна быть возможность сборки генератора кода без связывания с кодом для поддержки данных возможностей. Мы также постоянно улучшаем качество кода, генерируемого оптимизатором и генератором кода, добавляя дополнительные возможности в промежуточное представление IR для лучшей поддержки новых языков программирования и конструкций целевых архитектур, а также улучшаем поддержку оптимизаций, специфичных для языков программирования высокого уровня, в LLVM.
Проект LLVM продолжает развиваться и улучшается различными путями. Действительно захватывающе наблюдать множество способов использования LLVM в сторонних проектах и появление его в таких неожиданных контекстах, о которых даже не могли подумать проектировщики. Новый отладчик LLDB является хорошим примером этого: он использует системы разбора кода C/C++/Objective-C из проекта Clang для разбора выражений, использует LLVM JIT для преобразования их в код для целевой архитектуры, использует дизассемблеры LLVM, а также использует описания целевых архитектур из состава LLVM для обработки соглашений о вызовах и других вещей. Возможность повторного использования существующего кода позволяет разработчикам отладчиков сфокусироваться на логике работы отладчика вместо повторной реализации еще одной (предельно корректной) системы разбора кода C++.
Несмотря на успех, многое еще предстоит сделать и при этом постоянно существует риск превращения со временем LLVM в медленно развивающийся проект. Хотя не существует волшебного решения данной проблемы, я надеюсь, что продолжающееся исследование новых областей применения, желание переосмысления принятых ранее решений и изменение архитектуры с удалением устаревшего кода помогут в этом. Наконец, я хотел бы подчеркнуть, что целью разработки является не создание превосходного программного продукта, а его постоянное улучшение.
Сноски
- Я всегда говорю, что подсистема в LLVM не является действительно качественно реализованной до того момента, пока не произведена ее повторная разработка хотя бы раз.