A software program that executes instructions written in a high level language. There are two ways to run programs written in a high level language. The most common is to compile the program; the other method is to pass the program through an interpreter. The interpreted action runs a program on top of itself. An interpreter translates high level instructions into an intermediate form, which it then executes on the fly. In contrast, a compiler translates high level instructions directly into machine language in a two step process, minimum. Compiled programs generally run faster than interpreted programs. The advantage of an interpreter, however, is that it does not need to go through the compilation stage during which machine instructions are generated. This process can be time consuming if the program is long. The interpreter, on the other hand, can immediately execute high level programs. For this reason, interpreters are sometimes used during the development of a program, when a programmer wants to add small sections at a time and test them quickly. In addition, interpreters are often used in education because they allow students to program interactively. Both interpreters and compilers are available for most high level languages. However, BASIC, Perl and LISP are especially designed to be executed by an interpreter. In addition, page description languages, such as PostScript, use an interpreter. Every PostScript printer, for example, has a built in interpreter that executes PostScript instructions.