He escrito un emulador de gameboy en javascript y simulo macros para la emulación de la CPU de esta manera:
código de macro (la función devuelve una cadena con el código de macro):
function CPU_CP_A(R,C) { // this function simulates the CP instruction,
return ''+ // sets CPU flags and stores in CCC the number
'FZ=(RA=='+R+');'+ // of cpu cycles needed
'FN=1;'+
'FC=RA<'+R+';'+
'FH=(RA&0x0F)<('+R+'&0x0F);'+
'ICC='+C+';';
}
Utilizando el "macro", por lo que se genera el código "sobre la marcha" y que no necesitamos para hacer llamadas de función a ella o escribir un montón de código repetidos para cada istruction ...
OP[0xB8]=new Function(CPU_CP_A('RB',4)); // CP B
OP[0xB9]=new Function(CPU_CP_A('RC',4)); // CP C
OP[0xBA]=new Function(CPU_CP_A('RD',4)); // CP D
OP[0xBB]=new Function(CPU_CP_A('RE',4)); // CP E
OP[0xBC]=new Function('T1=HL>>8;'+CPU_CP_A('T1',4)); // CP H
OP[0xBD]=new Function('T1=HL&0xFF;'+CPU_CP_A('T1',4)); // CP L
OP[0xBE]=new Function('T1=MEM[HL];'+CPU_CP_A('T1',8)); // CP (HL)
OP[0xBF]=new Function(CPU_CP_A('RA',4)); // CP A
Ahora w e puede ejecutar código emulado así:
OP[MEM[PC]](); // MEM is an array of bytes and PC the program counter
creo que sirve ...
¡Mal! James, lea esta pregunta: http: //stackoverflow.com/questions/86513/why-is-using-javascript-eval-function-a-bad-idea#87260 y valide sus opiniones antes de hacer declaraciones engañosas. ¡La cadena que se pasa a un eval se debe analizar/interpretar cada vez que se llama a eval! – Ash
Sí, la cadena pasada a eval debe analizarse cada vez que se invoca eval, pero también lo debe hacer cualquier otra línea de javascript. así es como funcionan los intérpretes. En cuanto a la respuesta a la que se vinculó, nunca menciona la velocidad, solo "mucho más fácil de leer y menos con errores potenciales" –
Voy a conceder que posiblemente este haya sido el caso con Javascript en los navegadores que dicen alrededor de 2000, pero hoy en día se están aplicando optimizaciones serias al código Javascript simple (es decir, no evaluadas) y esto solo continuará. El código en una cadena en cualquier idioma tampoco se puede optimizar en ninguna parte. – Ash