5

В настоящее время я работаю на языке программирования домашних животных (для учебных целей) и прошел много исследований за последний год, и я думаю, что его время, наконец, началось моделируя понятия такого языка. Прежде всего, я хочу, чтобы он компилировался в какую-то промежуточную форму, такую ​​как JVM или .NET bytecode, цель которой была совместима с мультиплатформой/архитектурой. Во-вторых, я хочу, чтобы он был быстрым (у меня также есть много других вещей, но это не цель этой темы, чтобы обсудить их).Использование LLVM в качестве виртуальной машины - многоплатформенная и многоархитектурная кодировка

Лучшие варианты, которые пришли на мой взгляд, были: Compile для виртуальной машины Java байткод и использовать OpenJDK в качестве среды выполнения, компилировать .NET байткод и использовать Mono в качестве среды выполнения, компилировать в LLVM IR и использовать LLVM в качестве среды выполнения ,

Как вы могли себе представить, я выбрал LLVM. Зачем? потому что он быстро вспыхивает. Я сделал небольшой тест, используя код C++ N-Body, и достиг 7-го уровня в своей машине с lli jitted IR, в отличие от 27-х с встроенным компилятором clang (я знаю, что clang сначала делает IR, затем машинный код).

Итак, вот мой вопрос: есть ли какая-либо распространяемая версия базового набора инструментов LLVM (мне просто нужно lli), который я могу использовать? Или я должен скомпилировать свою собственную? Если последнее, можете ли вы дать мне какие-либо подсказки о том, как это сделать? Если я действительно должен это сделать, я думаю, что это кросс-компиляция их с моей машины (Intel Mac) и создание некоторых инсталляторов (например, .msi для windows, .rpm и .deb для популярных дистрибутивов linux и .pkg для Macs). Помните, мне нужно только минимальное подмножество LLVM, так что это подмножество способно действовать как виртуальная машина, используя «lli». Реальный вопрос здесь заключается в том, как использовать LLVM как типичную виртуальную машину.

+0

Проект LLVM имеет разрешительную лицензию; это звучит так, как вам просто нужно распространять ** Core Libraries **. –

+0

@RobertHarvey То, что я думал, купите, я понятия не имею, с чего начать. – Salvia

+0

Само собой разумеется, что вам все равно нужно будет прочитать документацию, а так как вы уже приняли решение ... Я очень рад работать с LLVM; увы, я еще не прочитал документацию. –

ответ

4

Во-первых, я думаю, что все 3 варианта - LLVM IR + LLVM, Java Bytecode + OpenJDK и .NET CIL + Mono - отличные варианты, и я согласен, что решение между ними непросто.

Если вы идете на LLVM, и вы просто хотите использовать lli, вы можете скомпилировать LLVM на свою целевую платформу и упаковать полученный в результате lli исполняемый файл с вашим дистрибутивом, он должен работать.

Другой способ написать JIT-компилятор через LLVM - использовать механизм выполнения - see the handy examples in the Kaleidoscope tutorial. Это означает, что вы пишете свою собственную программу, которая будет JIT-компилировать ваш собственный язык, скомпилировать его на любую платформу, которую вы хотите, статически связывая ее с LLVM, а затем распространять.

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

+0

Спасибо, статья, которую вы связали, была очень полезна, я могу использовать ее в качестве отправной точки. – Salvia

+0

Ссылка не удалена – rraallvv

+0

@rraallvv исправлено, спасибо! – Oak