Как С-- по сравнению с LLVM? - PullRequest
55 голосов
/ 08 октября 2010

Изучив немного, как работает LLVM, я по-настоящему взволнован тем, как можно генерировать переносимый низкоуровневый код и как модульно создается эта «вещь».

Но сегодня я обнаружил существование C- кажется, что это разделяет некоторые концепции с LLVM.

Так что я ищу информацию, которая поможет мне понять основные различия между этими двумя проектами ... и почему оба они существуют.

ДляМне кажется, что LLVM немного похож на лучший швейцарский армейский нож для инфраструктуры компиляторов, а C-- выглядит гораздо менее продвинутым.

1 Ответ

52 голосов
/ 08 октября 2010

Они отличаются по выразительности низкоуровневой системы типов машин.

Машина LLVM довольно выразительна. С другой стороны, машина C - возлагает большую ответственность на языковой интерфейс. Цитируя из C-- FAQ : "просто, C - не имеет высокоуровневых типов - он даже не различает переменные с плавающей точкой от целочисленных переменных . Эта модель дает интерфейсу полный контроль над системой представления и типа "

Также визуально они выглядят совсем по-другому. C - очень похоже на C, LLVM очень похоже на ассемблер.

Прагматично, у LLVM сейчас намного больше импульса. У него есть JIT-компилятор, Apple использует его для 3D конвейерных вещей , и люди используют его для подключения к GCC и всевозможных странных и замечательные вещи. Кто-то назвал это « почти нелепо легко работать с ».

С другой стороны, C - на намного меньше и, вероятно, легче для полного понимания. (Я думаю, что нормальный человек с некоторой преданностью может полностью понять все аспекты этого.)

...