Есть такая вещь в fpc? Может библиотеки есть специальные?
Добавлено спустя 2 минуты 22 секунды:
Меня интересует конструирование незамысловатых функций во время исполнения.
Добавлено спустя 5 минут 52 секунды:
Вроде этого: С++ JIT
JIT компиляция
Модератор: Модераторы
Azazaz писал(а):Есть такая вещь в fpc? Может библиотеки есть специальные?
Добавлено спустя 2 минуты 22 секунды:
Меня интересует конструирование незамысловатых функций во время исполнения.
Добавлено спустя 5 минут 52 секунды:
Вроде этого: С++ JIT
Нету и маловероятно что будет. Можешь воспользоваться Lua(тема ниже) паскальскрипт
Предложу либо самому формировать и компилировать код для LLVM (сам не пробовал, по готовому AST должно быть несложно), либо генерировать функции на паскале, вызывать компилятор извне и загружать результат как библиотеку.
Видимо понадобиться колупать asm. Может кто-нибудь знает библиотеку дизассемблера которая может распарсить переданный бинарный код на ассемблерные мнемоники?
Можно при помощи внешнего fpc компилировать всё в дин. библиотеку и его подгружать.
Можно пытаться компилировать модуль в объектник и пытаться своими силами с ним слинковаться, см. тему
viewtopic.php?f=1&t=3961
там shade выкладывал свои наработки по этой теме.
Можно пытаться компилировать модуль в объектник и пытаться своими силами с ним слинковаться, см. тему
viewtopic.php?f=1&t=3961
там shade выкладывал свои наработки по этой теме.
у DWScript - написано что jit умеет делать.
- *Rik*
- постоялец
- Сообщения: 453
- Зарегистрирован: 19.04.2011 12:18:51
- Откуда: Урал
- Контактная информация:
Azazaz писал(а):Есть такая вещь в fpc? Может библиотеки есть специальные?
Добавлено спустя 2 минуты 22 секунды:
Меня интересует конструирование незамысловатых функций во время исполнения.
Добавлено спустя 5 минут 52 секунды:
Вроде этого: С++ JIT
В составе Lazarus идет Pascal Script. Можете мою поделку использовать, у меня не только функции, приложения масштаба предприятия на скриптовом движке строятся.
В общем в Lazarus x32 есть пакет lazarus\components\fpdebug\fpdebug.lpk. В пакете модуль fpdbgdisasx86, в модуле процедура:
Передайте в нее адрес какой-нибудь процедуры или функции, или используйте это:
Соответственно с адресом процедуры.
Код: Выделить всё
procedure Disassemble(var AAddress: Pointer; const A64Bit: Boolean; out ACodeBytes: String; out ACode: String);Передайте в нее адрес какой-нибудь процедуры или функции, или используйте это:
Код: Выделить всё
procedure GoRET(Proc: Pointer);
var CB, C: String;
begin
repeat
Disassemble(Proc, false, CB, C);
Writeln(CB:25, ' ', C);
until CB = 'C3';
end;Соответственно с адресом процедуры.
