Comments 7
Интерпретатор со специализатором не прокатит за компилятор (Futamura projections)?
Если есть p в коде то как мне кажется специализатор не сможет отработать (если речь о выполнении специализатора при компиляции, JIT подход конечно сработает). Если есть p то мне кажется единственное решение — генерировать шитый код, если p нет то можно сразу сгенерировать бинарник.
Вообще, put может транслироваться в вызов фрагмента компиляции (и в этом нет ничего зазорного — если мы самомодифицируемся, то мы же и самодокомпилируемся). Вот как "встроить" докомпиляцию в существующий бинарь — это интересно.
Кстати, вообще, в продакшене есть системы life patching (в ядре), которые позволяют ядру выполнять некий аналог put'а (замену куска себя в рантайме). Проблемы, которые там решали, классом выше, чем просто "заменить себя" (например, надо сохранять старые структуры данных для активных вызовов).
В целом, мне кажется, для неоптимизирующего компилятора, put может вполне выполняться. Я даже знаю один простой метод:
compile(p);
memcpy(old, new);
patch(new, p);
switch_code(new);
Пардон, но вы написали интерпретатор, а вовсе не компилятор.
На выходе компилятора ожидается набор машинных кодов или текст на ассемблере.
На выходе компилятора ожидается набор машинных кодов или текст на ассемблере.
Sign up to leave a comment.
Компилятор Befunge на Python