Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

Some languages (mostly ones made in the last 2 decades or so) can now not only run (after some compilation step or directly) on several platforms, but also can be compiled to run on several virtual machines.

For example, take Scala. Pure Scala code can be either interpreted , compiled to run on the JVM (Java Virtual Machine) or can be compiled to run using the .NET Framework.

The benefits of platform-independence put aside, what exactly are the benefits of writing code that can compile on several virtual machines and runtimes?

share|improve this question
Technical correction: Scala code cannot (or has not, at any rate) be interpreted. Both REPL and scripting rely on compilation. – Daniel C. Sobral Dec 25 '11 at 13:55
@DanielC.Sobral source? – Mahmoud Hossam Dec 25 '11 at 19:04
Diversity. Not all virtual machines and runtimes are available on all platforms. – user1249 Dec 25 '11 at 19:36
@MahmoudHossam – Daniel C. Sobral Dec 25 '11 at 22:56
@DanielC.Sobral where does it say all code will be compiled? obviously I can't infer that from all this code. – Mahmoud Hossam Dec 26 '11 at 1:17
up vote 5 down vote accepted

It is simpler to write the intermediate compilers - one to the bytecode/IL (whatever) from your source, and one from bytecode/IL (whatever) to native code.

It also allows you to create new languages and target the bytecode or write new bytecode to a new processor and automatically have a new platform available.

See this blog post by Eric Lippert (one of the C# compiler and specification writers) on the subject.

share|improve this answer

In addition to what Oded said, it is a lot easier to write programs that dynamically produce code at runtime: all you have to do is emit bytecode, (or CIL, or "cross machine code", or whatever you call it,) which has a reduced, and at the same time relatively high-level, instruction set.

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.