Я работаю над решением проблемы Cult of the Bound Variable.
В части проблемы вы внедряете интерпретатор для "древней" универсальной машины. Я внедрил intrereter для машины, которую они описывают, и теперь я запускаю тестовую программу, которую университет предоставил для ее тестирования.
My С# реализация этого интерпретатора медленно!
Я активировал свою программу в профилировщике ANTS, чтобы увидеть, где происходит замедление, и я вижу, что более 96% моего времени занято операцией "Загрузить программу".
спецификация этого оператора выглядит следующим образом:
#12. Load Program.
The array identified by the B register is duplicated
and the duplicate shall replace the '0' array,
regardless of size. The execution finger is placed
to indicate the platter of this array that is
described by the offset given in C, where the value
0 denotes the first platter, 1 the second, et
cetera.
The '0' array shall be the most sublime choice for
loading, and shall be handled with the utmost
velocity.
Вот мой код для этого оператора:
case 12: // Load Program
_platters[0] = (UInt32[])_platters[(int)_registers[B]].Clone();
_finger = _registers[C];
break;
Исходный код для всего моего интерпретатора "Универсальная машина" здесь.
Что я могу сделать, чтобы сделать это быстрее? Существуют и другие реализации этого интерпретатора, написанного на языке C, которые значительно ускоряют весь эталон.