Начальная загрузка языка на LLVM - PullRequest
24 голосов
/ 05 января 2010

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

Поскольку компилятор самокомпилируется, все функции C, которые я использую, мне придется реализовать. Так что это постоянный баланс: если я использую слишком много функций, мне придется реализовать больше, чем я хочу, но если я не реализую достаточно функций, будет сложно написать код.

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

У меня возникли некоторые трудности, поэтому я ищу альтернативные решения. Есть идеи?

Ответы [ 3 ]

10 голосов
/ 06 января 2010

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

Другая альтернатива - выписать язык ассемблера LLVM (текстовый файл) и использовать llvm-as, чтобы превратить его в битовый код.


Изменить:

Я перечитал твой вопрос, я думаю, ты уже понимаешь, что такое llvm-as против связывания.

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

5 голосов
/ 27 октября 2010
1 голос
/ 06 января 2010

В какой-то момент вы, вероятно, захотите предоставить API для упаковки библиотек C в качестве модулей расширения. LLVM может уже поддерживать это (я знаю, что попугай vm поддерживает). Почему бы не использовать систему расширения, которую вы используете, чтобы обернуть собственный API LLVM? Возможно, они уже поддерживают это. :)

...