Задумал я тут сделать интерпретатор своей виртуальной машины и подумалось мне, что делать одну гигантскую функцию с большим свичом, интерпретирующим байткод - это скушно. Поначалу я хотел завести массив функций-обработчиков разных инструкций, но потом меня осенило - вместо этого надо сделать ШИТЫЙ КОД!
То есть идея такая - программа на JavaScript подтягивает массив кодов и перед запуском интерпретатора делает его предварительную обработку - а имеено строит такой же массив, но в ячейках массива сидят не числовые коды, а указатели на функции, которые СГЕНЕРИРОВАНЫ программно и "скомпилены" через eval
В результате интерпретатор упрощается до невозможности:
Всё
P.S. Аналогичный подход может быть применён для эмуляторов процессоров, например того же 8080, но при условии, что эмулируемый код не будет самомодифицирующимся (хотя и это решаемо).
P.P.S. Провёл небольшой эксперимент - похоже вызов функций из массива действительно несколько быстрее большого свича...