Подтвердить что ты не робот

Преимущества стековых байт-кодов или бесконечных регистрационных машин

Компиляторы часто выбирают промежуточные представления (IR), которые являются либо стековыми, либо бесконечными. Каковы преимущества этих над деревьями выражений?

4b9b3361

Ответ 1

Деревья выражений работают для выражений, но не эффективны для моделирования всей программы. В частности, хорошее представление программы - это действительно график (операций и действий), связанных потоками управления и данных. Обычно люди говорят об использовании "троек", которые образуют именно такой график.

Код стековой машины легко создать, но сложнее для возможного процесса распределения регистра, необходимого для генерации реального кода, поскольку он имеет набор временных расположений ( "стек" ), которые не имеют ничего общего с целевой архитектуры и сделать процессы обработки данных неудобными для обработки. ( "какой код использует результат этого добавления?" ).

Регистровые машины немного сложнее сгенерировать код, но, как правило, сохраняют поток данных, используя эти бесконечные регистры как по существу проводники потока данных. Этот поток данных и возможность легко распределять его по реальным регистрам (там стандартное распределение регистров "по графике" ) позволяет легко генерировать хороший код.

Если вы решили создать код виртуальной машины непосредственно из них, вы получите разные характеристики производительности. По сути, стековые машины, как правило, получают меньше следов кода. Машины с бесконечным регистратором имеют тенденцию быстро выполнять интерпретацию. По этой причине Google Dalvik отличается от JVM. (Возможно, они не хотели получать иск от Sun/Oracle поверх форматов файлов классов).

Я предлагаю следующий документ: Дисплей виртуальной машины: стек против регистров. (PS: что-нибудь с Антоном Эртлом как автором, как правило, интересно читать).