Just to add a bit more info on this. The .Net langauges are based on the CLI (Common Language Infrastructure (or Interface)) that MS developed as the back-end for Windows.
That's not true, the CLI describes the runtime (the
Common Language Runtime) and the bytecode that it runs (
Common Intermediate Language). This is the core of .NET. .NET is not at the core of Windows, it runs on top.
The CLR is an interpreter which only runs one language, CIL. However it will also compile the CIL to native code as it is executed, giving you the best of an interpreter and a compiler. This is known as just in time compilation. Java does exactly the same. It's runtime is the
Java Virtual Machine and it's language is
Java Bytecode. Although I believe you can also compile ahead of time straight to native code with .NET, you can't with Java.
All of the .Net languages are actually frontends to the CLI so there isn't a whole lot of difference between the different languages. If you look at C# and VB.Net you will see quite similar syntax.
Partly not true. Yes C#, VB.NET, IronRuby, IronPython, F# and all the others all target the same language. The bit that's not true is that this means all those languages are the same, they aren't. C# and VB.NET might have similarities but F#, C# and Forth are all quite different. There is nothing to stop you writing your own language for .NET, or porting some exotic languages to it.
The reason they all target CIL rather then x86 is because this allows them to all share the same optimizing compiler for the platform. i.e. It avoids each language needing to build their own x86 compiler. This is more useful for Java because it supports more processors. So any language that compiles to Java bytecode can run on SPARC, PowerPC, x86, ARM, Itanium and more.
Another reason is because CIL is essentially a simple assembly language. This means it is quick and simple for the runtime to parse and convert to native code.
Many native compilers also do the same, like
GCC (the Gnu Compiler Collection). It's a collection of front-end compilers that all compile to the same intermediate language. These are then parsed compiled to native code for the platform it's compiling for. Some languages also use another language as their intermediate language. For example the
Glasgow Haskell Compiler compiles to
C--, an alternate form of C.