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