I was wondering whether every interpreted language can be compiled?  And can every compiled language be interpreted?
Can every language be compiled? And can every language be interpreted?
compiler;interpreters
Every language possible must support both compilation and interpretation by definitionThe trick is in the underlying meanings of the idea of compilation and interpretation.Interpretation is take this program written in language X, and create a process which applies the rules of language X to the program.  It's a fancy way of saying interpretation is running the program.Compiling is take this program written in language X, and write a new program in language Y which, if interpreted, would create the same results as interpreting the program in X directly.  It is a mapping operation from one language to another.  It's a fancy way of saying take some time to make a program that, at a later time, would do what I wrote, but faster.Every language can be mapped to another language.  If not, then the language cannot really run on computers.  Thus every language can technically be compiled.  And, since any compiled program can be written in the form interpret the act of compiling the program, then interpret the result, every program can be interpreted as well.The line is even fuzzy with assembly.  One assumes that x86 code is interpreted, because the job of a CPU is to interpret your instructions.  However, in reality, x86 is too slow if interpreted literally.  Instead, every modern CPU will compile x86 into its own native microcode.  This means that literally every interpreted language gets compiled at some point.Some languages are hard to compile or interpretSome languages do not lend themselves well to compiling or interpreting.  One expectation of a good language is speed.  Slow languages tend to be less desirable than fast languages.  C++ has rules which take advantage of the fact that it is traditionally compiled rather than interpreting.  It has very slow rules (such as function overloading resolution) which compilers can bake down into very fast assembly (with simple fast rules).  A naiive C++ interpreter would spend a great deal of time repeatedly doing these slow rules.Likewise, some languages do not lend themselves well to compiling.  Python, for instance, relies on duck-typing for everything.  These rules are much faster than C++'s compiling rules, but slower than assembly's rules.  Compiling Python wouldn't buy you much because you couldn't map Python into anything much simpler.... or could you?If you look at PyPy, Psyco, or IronPython, there is an effort to compile Python.  They do techniques known as Just in Time Compiling (JIT) to find bits of Python which do reward compiling.  They compile those parts, while interpreting parts which are hard to compile.  In many commonly-occuring cases, the result of using IronPython to JIT compile Python code is as fast or faster than C++ or C#!This shows just how blurry the line between compiled and interpreted actually is.