Всем привет.
Потребовалось мне тут имплементировать на c/c++, java, actionscript маленькую виртуальную машинку. Итак, есть некая табличка, из которой скриптом генерится код на указанных языках. Код очень тупой, а посему должен работать без изменений во всех языках. Типа вот:
switch (opcode) { case 0xC0FE: { do_1(); do_2(); do_3(); break; } case 0xC0DE: { do_1(); do_2(); break; } default: { nop(); break; } }
Кейсов в свитче порядка 4000. И, значит, gcc это кушает без проблем, а вот в java лезет «code too large». (Честно говоря, когда это увидел и прочитал о размере методе в 64k, был в шоке - думал, это осталось в x86 real mode и на пальмах). А в actionscript и вовсе ограничение на размер модуля в 32k. Что вгоняет в печаль. Итого - как быть? Выносить это в виде данных, а не кода, предлагать пока не стоит. Сегментировать, сегменты по модулям разносить? Какое-то более изящное решение?