can be used to extend existing languages or to simplify compiler development by exploiting portable and well-optimized implementations of other languages (such as C). Many combinations of interpretation and compilation are possible, and many modern programming language implementations include elements of both. For example, the Smalltalk programming language is conventionally implemented by compilation into bytecode, which is then either interpreted or compiled by a virtual machine. Since Smalltalk bytecode is run on a virtual machine, it is portable across different hardware platforms. Multiple implementations Programming languages can have multiple implementations. Different implementations can be written in different languages and can use different methods to compile or interpret code. For example, implementations of Python include: CPython, the reference implementation of Python IronPython, an implementation targeting the .NET Framework (written in C#) Jython, an implementation targeting the Java virtual machine PyPy, an implementation designed for speed (written in RPython) References External links Implementation