Between Java and c#. Python is too fast and loose with the typing for me. Call me anal retentive, but I require strong typing.
Java has obvious advantages, especially vendor support for multi-platform, which is a big one. But c# was designed to address problems with Java, Delphi and others, thus IMHO comes out a much cleaner language. I also think c# has better data types and has a better generics implementation. The standard framework also has a ton of toys.
But add a problem for c#, your users won’t necessarily have the framework version you need. Many older systems are stuck at 1.1, which, trust me, you don’t want to program in. You need to go at least 2.0, which will entail a framework update for some of your users. So you’re possibly stuck in the same place as Java on that front, although the newer frameworks will install through Windows Update.
Answer to the question on c#, it compiles to a “common intermediate language” which is then compiled to native code by the CLR. It can cache this native version to make later runs faster. Basically, just like Java.
Python has strong typing:
>>> a = 2 >>> b = "hello" >>> c = a + b Traceback (most recent call last): File "", line 1, in ? TypeError: unsupported operand types for +: 'int' and 'str'