Вверх ↑
Ответов: 2059
Рейтинг: 131
#1: 2022-09-05 14:05:32 ЛС | профиль | цитата
Причиной написания этого поста послужил этот пост:
https://forum.hiasm.com/post/312229
Начал ковырять глубже и экспериментировать.
Наткнулся на такую статью-опровержение:
https://erikmcclure.com/blog/a-rant-on-terra/
Честно говоря автор лукавит и не разобрался с ключами для своей ручной сборки.
Дело в том, что интерфейс Clang меняется от версии к версии LLVM и есть уже готовые бинарные сборки. Мало того, есть бинарные сборки с опционально подключаемым Jit и FFI. (о Jit компиляции будет сказано отдельно.) https://luapower.com/terra2
Для справки https://luajit.org/ так как темы плотно соприкасаются.
(Всё это легко интегрируется в HiAsm.)

Теперь самое главное:
Темой кроссплатформенной компиляции и мультиязычности приложений я занимаюсь давно с переменным успехом. Не буду рассказывать что и как делал, на чём делал и что получилось, а что ещё в процессе.
В силу специфики моих увлечений (процедурная генерация сюжетов, текстовых рассказов и 2D\3D игрушек по ним в реальном времени), мне нужна была компиляция, как в исполняемые файлы, так и в веб приложения одной и той-же программы. Получилось что то типа этого https://defold.com/ (Если интересно, то могу описать, как я тыркаля в JS и как языки встраивал в него- можно! - негодный язык! Какое недоразумение electron, app и другие этого плана - сплошной обман. Т.е. работает, но всё бутафория). Сейчас поветрие такое...
Сделал иначе.
Конечно получилось не тоже самое, а то что мне нужно было. Это в качестве примера чтоб понять принцип. (если читать только заголовок сайта, то ничего понятно не будет.)
Теперь про Hiasm.
"Ближе к телу!", как говорил Гидя Мопассан.
Что нужно?
Нужно тоже самое:
1. Одна и та-же схема должна компилироваться на разные платформы включая веб приложения.
2. Включение скриптовых языков (здесь проблем нет и быть не может).
3. IC должен поддерживать не только скриптовые языки, но и компилируемые.
Как же это сделать?
(Всё уже украдено до нас! Всё уже придумано до нас!)
Занимаясь своей задачей, пришлось изучить LLVM.
Не буду описывать что это такое, просто приведу несколько ссылок.
https://habr.com/ru/company/huawei/blog/511854/
https://llvm.org/
https://academy.hpc-russia.ru/files/msu-llvm-lecture.pdf
То есть это инструмент для написания компиляторов. (но нам туда не надо! но это нам не надо!)
Важно то, что там есть уже готовые компиляторы(утилиты для фронтенд и бэкенд компиляции ) практически под все языки включая Delphi и FPC, как например clang для C++. https://ru.wikipedia.org/wiki/LLVM
И важно то, что LLVM спроектирован так, чтобы эту технологию можно было легко внедрить в уже готовые проекты и IDE!

Как это работает?
Скрипт написанный на каком либо языке транслируется в промежуточный байт-код(Jit компиляция)- фронтенд.
Этот код одинаков для любого языка и "понятен" для любой платформы.
Потом из этого байт-кода можно собрать исполняемый бинарник для какой либо платформы - бэкенд (всё имеется в наличии).

Кубики можно и желательно делать на языке LLVM IR.
Чтобы не париться, для этого есть утилиты переводящие скрипт исходного языка в язык LLVM IR. То есть можно переводить как в байт код, так и в специализированный язык.
Для IC, например на C++, применяем утилиту clang.

В нюансы я специально не вдаюсь, чтобы не загромождать мысль.
Главное есть понимание как это делается и проводил опыты с Hiasm в плане Jit компиляции IC в память и исполнении этого кода.
Конечно сборку Hiasm надо будет переписывать...
И вообще дело не на пол года.
Боюсь, что сам этим не буду заниматься в силу того, что старый стал - сегодня день рождения, и жалко тратить последние годы жизни не доведя до ума тему процедурного написания рассказов и сценариев(сюжетов). - а это на всю оставшуюся жизнь. Но помогу и приму участие если что!
Пойду возьму бутылку чтоля.
карма: 6

2
Голосовали:tig-rrr, ric
Редактировалось 8 раз(а), последний 2022-09-05 16:38:53