With Microsoft finally settling with Sun, I thought it was time that I report on what Microsoft is (or is not) doing with Java. As you probably know, Microsoft built one of the fastest Java Virtual Machines (JVMs) for Microsoft operating systems. The problem that Sun had with Microsofts JVM was that the JVM did not support Suns Java Native Interface (JNI) and Remote Method Invocation (RMI). By not supporting these cross- platform Java APIs, Microsoft was violating its agreement with Sun. If you look at the Sun/Microsoft dispute from a pro-Redmond point of view, youd say that Microsoft was merely making Java run as fast as possible (on Microsoft systems), and Suns JNI and RMI APIs were far less efficient than Microsofts equivalents. If you look at the dispute from a cross-platform stance, then youd say Microsoft was making it too easy to create Java applications that only ran on Windows. Its very difficult to use Microsoft Visual J++ integrated development environment (IDE) to develop Java applications that run on other operating systems. That was in the past. What is Microsoft doing with Java now? Well, nothing. That is unless you look at Microsofts latest language: C#.
C# (pronounced C-sharp) is one of many languages that will work with Microsofts
.NET architecture. I wont go into detail about .NET. But I do want to mention that at the center of .NET is Common Language Runtime (CLR), a set of operating-system services that provides runtime support for .NET programs. CLR is similar to a JVM, except instead of Java bytecode, CLR executes Microsoft intermediate language (MSIL) programs. C#, as well as its sister .NET language, are compiled to MSIL. What are the other languages? How does a short list of Visual Basic, JScript, C++, RPG, COBOL, and Java sound? Thats right, I said RPG and Java. Its not that difficult for a system software company to create an MSIL compiler for its favorite language. ASNA has one for Visual RPG, and Rational Software is making one for Java. Suns strategy seemed to be to create a cross- platform development environment, while Microsofts strategy was to create a cross- language development environment.
Hello World, in English and American
Putting the other .NET languages aside, I will focus on C#. As it turns out, C# has many features similar to Java:
Its interesting to note that the chief architect for C# was the project leader for Microsofts Windows Foundation Classes for Java (the ill-fated competitor to Suns Java
Foundation Classes). In fact, if you look at the Hello World examples in Figure 1, youll see that C# and Java are very similar.
Many of the C# keywords are exactly the same as Javasmainly because those keywords come from the common ancestor of C++. Its curious to note, however, that where C# borrowed concepts from Java, the keywords were named differently. For instance, Javas super, import, package, synchronized, and final keywords translate in C# as base, using, namespace, lock, and sealed. Keyword names aside, C# and Java are still very similar languages.
C#-er than Java
I spent seven years coding in C++ before I evolved to Java, and while I prefer Java to C++, there are some features of C++ that I miss. C# added many of those features I missed, such as enums, assertions, operator overloading, and the ability to pass parameters by value or by reference. C# also added a few handy features such as a decimal data type, a foreach loop, and the ability to treat primitives like objects. C#s 128-bit decimal type is far more efficient that Javas BigDecimal object. The foreach loop is a handy alternative to Java-style loops. C# also allows you to directly store primitive valuesints, floats, and doublesinto aggregate structures, whereas, in Java, you have to laboriously convert primitives to objects.
The Sharpest Blade Soon Dulls
If I were asked tomorrow to create a C# application, I would gladly do it, since C# gives me all the features that Ive come to expect from Java with a few added goodies. But, I wonder, can I get a C# compiler for my Linux development environment? It would also be nice if I could then deploy that application to my AS/400. Will .NETs architecture allow me to do that? There is no direct answer to these two questions. The quick answer is No. Microsoft advocates, however, will tell you that Microsoft .NET is an open standard under the control of ECMA, so potentially, companies (initially, perhaps, Hewlett-Packard) can create Microsoft .NET environments, complete with C# compilers and IDEs, for any platform. Microsoft pundits will tell you that Microsoft is three years away from a good working version of Microsoft .NET and, in the mean time, they wont be developing it for any platforms but their own.