Я создаю небольшой компилятор только для того, чтобы изучить некоторые основы «мира компиляторов». На данный момент все вполне ок. Я создал интерфейс, который генерирует анализируемые узлы AST, и серверную часть, которая генерирует LLVM IR, объектный файл и исполняемый файл. Я использую язык
C# и привязки LLVM C#. Меня беспокоит размер маршалируемой динамической библиотеки LLVM. Размер составляет около 123 МБ, что слишком много (на мой взгляд) для всего лишь
.dll, и тогда мой компилятор занял бы слишком много места на пользовательском компьютере.
Я Я проверил папки bin
rustlang, который также использует LLVM для своей серверной части, и не смог найти никаких библиотек LLVM (кроме unwind и lld).
Итак, мои первые вопросы: как
rustlang связывается с LLVM? Ничего ли, что библиотека, с которой связывается
C#, такая большая? Есть ли другой способ привязки к LLVM из
C#?
И еще несколько вопросов

Когда я создавал объектные файлы, я думал о том, как связать их между собой и ссылка на внешние библиотеки. Первым решением было сохранить компоновщик
lld рядом с исполняемым файлом компилятора и вызвать его. Но он также был довольно большим (около 70 МБ). Поэтому я решил (пока только для Windows. В Linux планируется использовать
clang) просто найти компоновщик Visual Studio и использовать его. Я знаю, что
Crystal делает то же самое. Но теперь, когда я проверил папки bin
rustlang, я увидел, что он использует собственный компоновщик под названием
rust-lld, который довольно тяжелый.
Итак, второй вопрос. - Что лучше - иметь собственный компоновщик, такой как
rustlang, или использовать встроенную систему, как это делает
Crystal?
Подробнее здесь:
https://stackoverflow.com/questions/790 ... m-bindings