The simplest type of emulator is called an interpreter, and it runs the foreign program one step at a time. This is the slowest type of emulator but it is easy to debug and port to new platforms. Another type is called the dynamic recompiler, and it takes foreign code a block at a time and recompiles (converts) it into native code. Foreign code that has already been converted is kept, so if the foreign program uses that code again, the emulator does not have to recompile it again. This type of emulator is much faster than the interpreter. Another type is the virtualizer, which only makes slight modifications to the foreign code, and runs it directly on the host processor. The virtualizer requires that the guest (foreign) and host systems use the same type of CPU.