Подтвердить что ты не робот

Загрузочный язык LLVM

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

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

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

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

4b9b3361

Ответ 1

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

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


Edit:

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

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

Ответ 3

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