Один из вопросов на практике - LLVM был гораздо более подвижной мишенью.
У GHC возникли проблемы с попыткой поддержки нескольких версий LLVM. В списке рассылки ghc-dev есть активный discussion.
Btw, в настоящий момент llvm backend в ghc после перевода Haskell на язык cmm (который, я считаю, в основном просто C - расширен с некоторыми регистрами на языке STG), и из-за вышеперечисленного -описанные трудности, выполняется избыточная оптимизация, которая замедляет компиляцию.
Также, исторически и в настоящее время AFAIK, проект LLVM не имеет приоритета в предоставлении переносной платформы, и некоторые разработчики сделали точку сочленения, что она is a compiler IR and not a form of portable assembly language.
LLVM IR, который вы пишете для одной цели, может вообще не использоваться для другой цели. Для сравнения, веб-сайт C-- на самом деле ссылается на него как на портативную сборку. «Вы были бы намного счастливее с одним переносным языком ассемблера, который мог бы быть ...» - это цитата из their website. На этом веб-сайте также упоминается интерфейс времени выполнения для облегчения переносимости реализации сбора мусора и обработки исключений.
Итак, вы можете подумать о C-- как о переносном заземлении для всех передних концов, который имеет немного больше общего с байтовым кодом CIL и Java и LLVM IR в качестве выразительного общего для всех ваших бэкендов что облегчает унификацию низкоуровневых оптимизаций, общих для нескольких целей. LLVM IR также предоставляет дополнительный бонус, который проект LLVM будет реализовывать многие из этих низкоуровневых оптимизаций. При этом, в некотором смысле, LLVM IR действительно может считаться более высоким уровнем, чем C--, например, LLVM IR имеет разные типы, где, как и в C, все просто битовые векторы.
необходимо создать блог –
Вам нужно использовать опцию цитаты для длинных котировок. – Unknown
Редактирование, похоже, показывает, что оно * было вставлено в блог. – ShreevatsaR