Что такое LLVM?

Согласно Википедии, «Проект инфраструктуры компилятора LLVM представляет собой набор технологий компилятора и инструментальной цепочки, которые можно использовать для разработки внешнего интерфейса для любого языка программирования и внутреннего интерфейса для любой архитектуры набора команд».

LLVM был разработан в Университете Иллинойса Викрамом Адве и Крисом Латтнером. Первоначально он был разработан как исследовательская инфраструктура для исследования методов динамической компиляции для статических и динамических языков программирования. Тогда LLVM был аббревиатурой от низкоуровневой виртуальной машины, но, поскольку проект значительно расширился, аббревиатура была удалена в пользу самого названия LLVM.

Сегодня существует множество инструментальных средств разработчика / компилятора под эгидой проекта LLVM, теперь проект LLVM состоит из отладчика, оптимизатора, внутреннего представления (IR) и многого другого.

Прежде чем узнать о важности проекта LLVM, давайте рассмотрим монолитную структуру технологии компиляции. Предположим, я хотел разработать язык под названием X, мне нужно было бы написать свой собственный, сканер / лексер, синтаксический анализатор, промежуточное представление, оптимизатор и набор целевых инструкций для всех микросхем, на которых должен работать мой язык X. Вы уже можете видеть, что при разработке языка программирования это было большой проблемой. Чтобы обойти это; такие языки, как Python и Ruby, выбирают целевой язык как C, чтобы им не приходилось писать N компиляторов для N наборов архитектуры, которые они хотели бы поддерживать.

Основная идея проекта LLVM заключалась в том, чтобы упростить этот процесс, скорее нацелившись на какой-то другой язык программирования, разработчик языка в настоящее время может ориентироваться на LLVM IR, где LLVM IR затем передается в LLVM IR Optimizer, а затем в целевой машинный код. Поскольку LLVM создается сообществом умных разработчиков по всему миру и существует уже некоторое время, он поддерживает различные компьютерные архитектуры, и было сделано много оптимизаций для этого проекта, что сделало его одним из лучших инструментальных средств компилятора. в мире.

Значит, остаются большие вопросы? Почему кто-то хочет написать еще один новый язык?

Сценарий первый:

Вы решаете проблему, зависящую от предметной области, вы ищете облегченный язык для работы на специально разработанном оборудовании. Вы можете написать новый язык поверх инфраструктуры LLVM, что даст полный контроль над аппаратным и программным аспектом проекта.

Сценарий второй:

У вас очень старая система, написанная на очень старом языке программирования. Переписать эту систему на современном языке программирования требует много времени, денег и ресурсов. Что вы могли бы сделать, так это написать оптимизированный компилятор для языка, на котором работает старая система, сделав его быстрее и способным работать на новом оборудовании. Существует агентство под названием Strumenta, которое помогает предприятиям создавать подобные предметно-ориентированные языки.

Итак, вы видели примеры использования языкового дизайна, и я мог бы убедить вас, что вам не нужно создавать следующий большой язык, который в конечном итоге захватит мир. Я также хочу, чтобы вы, ребята, поняли, что языковой дизайн - это тоже выбор профессии, и для людей, интересующихся этой областью информатики, есть много возможностей.

Прежде чем я откажусь от таких языков, как C / C ++ (компилятор clang), Rust, Swift, Julia и многие другие, работающие на инфраструктуре компилятора LLVM, в этом сообщении в блоге была предпринята попытка дать представление о том, что такое проект LLVM, а в следующем блоге мы попытаемся кое-что рассказать. светится LLVM IR следите за обновлениями. Пока-пока.

Использованная литература:

Логотип проекта LLVM взят с веб-страницы проекта LLVM (http://llvm.org)

Образ архитектуры компилятора LLVM Frontend-Backend был взят из (https://medium.com/@JMangia/swift-c-llvm-compiler-optimization-842012568bb7)