Я работаю над решением проблемы Cult of the Bound Variable .
Часть проблемы заключается в том, что вы реализовали интерпретатор для «древней» Универсальной Машины. Я реализовал интерпретатор для машины, которую они описывают, и теперь я запускаю тестовую программу, которую университет предоставил для ее тестирования.
Моя C # реализация этого интерпретатора медленная !
Я запустил свою программу в профилировщике 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, которые значительно быстрее завершают весь тест.