Slashdot Mirror


Neal Gafter On Java Under Oracle

An anonymous reader writes "Microsoft's Neal Gafter, who was primary designer and implementer of the Java SE 4 and 5 language enhancements and now works for Microsoft on .NET platform languages, discusses the impact of Oracle's acquisition of Sun on Java, makes the case for adding segmented stacks and a meta-object protocol to Java, and offers some insights into how Java and C#/.NET compare." The first couple of answers meander a bit, but after that the interview picks up and is a pretty good read.

14 of 130 comments (clear)

  1. Shills by MightyMartian · · Score: 4, Insightful

    I gather he drank the kool-aid when he went through the door. I'm halfway through the interview and its basically ".NET is better than Java"

    --
    The world's burning. Moped Jesus spotted on I50. Details at 11.
    1. Re:Shills by John+Courtland · · Score: 2, Insightful

      At least he explains why. MS has way more resources than Sun ever could manage. It surprises me that Java even got out the door, honestly. Also recall that MS hired the best and brightest away from Borland a few years before the inception of .NET. And look, the best of them (Anders) architects C# now.

      --
      Slashdot is proof that Sturgeon's Law applies to mankind.
    2. Re:Shills by buchner.johannes · · Score: 3, Insightful

      At least he explains why. MS has way more resources than Sun ever could manage. It surprises me that Java even got out the door, honestly.

      Also recall that MS hired the best and brightest away from Borland a few years before the inception of .NET. And look, the best of them (Anders) architects C# now.

      It might also have something to do that when C# turned up, Java was already a mature language and approached the various problems. Of course, if you do something later, you learn from previous attempts, so it couldn't be worse just from that fact. Since C# never aimed to run on non-windows, it's also not a fair comparison of designs, because the goals were different.

      --
      NB: The message above might reflect my opinion right now, but not necessarily tomorrow or next year.
    3. Re:Shills by nmb3000 · · Score: 2

      Since C# never aimed to run on non-windows, it's also not a fair comparison of designs, because the goals were different.

      Plain wrong. C# is a platform-agnostic language with a standards-defined specification. The CLR and CIL specifications are also 100% platform independent.

      What is tied to Windows is Microsoft's implementation of their CLR and CIL compiler. This is what Mono implements for other platforms.

      --
      "What do you despise? By this are you truly known." --Princess Irulan, Manual of Muad'Dib
      /)
    4. Re:Shills by Billly+Gates · · Score: 2

      Sun had lots of capital in the 1990s and made billions in revenue when Java was in development. It was before NT slaughtered them and before the great recession and when Wall Street had faith to invest in Sun. I think Java was very well designed for its time in the early 1990s. Sun's obsession with making sure it had to be run on a VM with no executables killed it. Sun wanted software to run on Solaris more than having it mult-platform in a successful way, as many would write java programs but make sure they only ran on Windows because they didn't want to support anything else.

      If java did this it would become a standard and more Mac and Linux software would exist today.

      Java became conservative for compatibility and bogged down. C# had an unfair advantage of seeing where Java made mistakes and started fresh. ... or not depending on who you talk to in regards of having MSIL just calls for win32 functions with COM/DCOM.

    5. Re:Shills by Billly+Gates · · Score: 4, Insightful

      The MSIL output is loaded with calls to win32 and COM/DCOM. .NET was designed for Java initially. When talks with Sun failed C# was made to run only on Windows and use the .NET API instead.

      In essence it was made to quickly be a defacto .NET language tied with Visual Studio. Sure you can use Mono C# but what is the point of not using .NET? The reason why C# apps can't be recompiled on Linux are simply winforms by their very nature are abstraction layers of Com/DCOM. Add then threading and networking and it probably has more ties to things like NDIS and VMS/NT style threads and other nasties. You have to emulate Windows to get anything done.

      Sure the spec is free and I think Moto (can't remember exact name) was made for FreeBSD that was an acutal C# compiler but it did not create MSIL or use .NET.

      If free software advocates are serious they need to invent an alternative to .NET and some tools to make it competive before Mono can be taken seriously as a cross platform tool. Reinventing .NET and Winforms is a losing battle that will make many programmers switch to Windows and stay there for development costs.

    6. Re:Shills by SplashMyBandit · · Score: 2

      Kinda right, kinda wrong (I guess you might not be a developer or might not have been in the enterprise software field when Java and later .NET first emerged, which would explain why you don't understand the considerable limitations of .NET). What actually matters is the millions of lines of code in the libraries. The language and language implementation is meaningless in comparison. Basically the .NET libraries only work on Windows and Mono have essentially declared that some libraries will only ever work on Windows (basically, Mono don't intend on implementing some minor things like, oh, WPF). In this context Java totally beats C#/.NET hands down. Sure, C# has some language nice-ities but they pale in comparison to the fact you can run Java almost everywhere (except the places that have forbidden it due to [IMHO, shitty] business reasons, the XBox and iPad/iPhone].

    7. Re:Shills by peppepz · · Score: 3, Insightful
      The ECMA specification dates back to version 2.0 (in 2006, 5 years ago) and even back then, it didn't cover the whole standard library for C#, which is more important than the language itself. C#'s de facto standard library, .NET, is not standardized and has plenty of links to Windows.

      The current version of C# (4.0, from 2010), has no standard defining it, besides its Windows-only implementation.

    8. Re:Shills by fbjon · · Score: 2

      I do crossplatform stuff on Java every day, literally. And I'm not even making any effort to do so, in fact I have never experienced a situation where the OS made any difference. Which isn't saying that differences don't exist, just that they're tiny. It's also not saying that the software is necessarily cross-JVM compatible (different vendors), but that's hardly surprising.

      --
      True confidence comes not from realising you are as good as your peers, but that your peers are as bad as you are.
    9. Re:Shills by luis_a_espinal · · Score: 2

      At least he explains why. MS has way more resources than Sun ever could manage. It surprises me that Java even got out the door, honestly.

      Also recall that MS hired the best and brightest away from Borland a few years before the inception of .NET. And look, the best of them (Anders) architects C# now.

      It might also have something to do that when C# turned up, Java was already a mature language and approached the various problems. Of course, if you do something later, you learn from previous attempts, so it couldn't be worse just from that fact. Since C# never aimed to run on non-windows, it's also not a fair comparison of designs, because the goals were different.

      I've been a Java/EE developer for the last 12 years, and Java has given me a good way to put food on the table, but even I have to say that this is just not true, and that is not the case here. C# has become a superior language over Java because C# has been lead by more pragmatic PL designers than Gosling ever was. Not to take away from Gosling's genius, but his major contribution by now has become the VM, not the primary high-level language running on top of it (Java.)

      The design of C# has been more than willing to break things and deprecate stuff in order to get things done. Not so in Java. Example: generics via type erasure. We got those because of the JCP unwillingness to create a new collection library (introducing generics without type erasure would have broken the old collections.) Also, the insistence in retaining backward compatibility back to Java 1.x is just ridiculous. How about Vector and HashTable? Those two should have been deprecated long ago (in favor of List and HashMap).

      There are inconsistencies with the practical sense as well. The new for(type : Iterable) mechanism introduced in Java 1.5 works on... an object implementing Iterable. Iterable returns an Iterator.... but there is no equivalent for Enumerator.

      And guess what? The most common interable thing when building web applications are http parameters and attirbutes, which are returned as an Enumerator. So either the new for loop construct should have been made capable of working with Enumerators, or the Servlet API been enhanced with an ability to directly return an Iterator for parameters (instead of having to go through the convoluted dot (.) soup of invoking the iterator off the entry set off the map returned by getParameterMap.

      I mean, no language is perfect, but in this sense C#, as a language, offers better facilities than Java.

      The .NET CLR also provides a common run-time type system, which the JVM does not. And this is a big plus (not a perfect "plus" but a workable "plus) when it comes to language interoperability. The thing that shines in the Java camp is the JVM. Possibly only the Erlang VM is superior to the JVM when it comes to scalability and robustness. The CLR does not compare to the JVM in equal terms.

      To summarize, both Java and C# has been exposed to the same type of classes of problems. But Java's unwillingness to deprecate and replace things and the slow-turtle pace of the JCP is what has kept the language behind the times compared to C#. It is not as you claimed that C# had a chance to look at how problems were being solved on the other side. More importantly, that C#/.NET were never designed to be multiplatform has no bearing on the language design differences between the two languages. It does not follow.

  2. On Java, under Oracle by Anonymous Coward · · Score: 3, Funny

    ( Oracle )
    nealgafter
    ( J a v a )

  3. Re:But they are giving up on .NET and going back t by terjeber · · Score: 2

    At least, we keep being told that by MS people and blogs and Channel 9.

    Really? No. Not really.

  4. Technically correct, but not worth dignifying it.. by Dogtanian · · Score: 2

    Pedantry, but there was no Java SE 4. Confusingly it is Java2, version 1.4. Then they went to Java 5, 6, 7, but kept the internal version number as 1.5, 1.6, 1.7, and it's still "Java 2 platform, standard edition".

    Yeah, but with respect, while Slashdotters may be pedantic on occasion (and gratuitously so), you can normally argue that there *might* be a point.

    Whereas Java's stupidly inconsistent naming and numbering scheme over the years reflects nothing more than a succession of pointless changes made by stuffed shirts in marketing to justify their jobs, cosmetic changes for changes sake that did nothing but confuse things. (*) Actually worrying about the "correct" nomenclature when everyone knows what is meant seems like dignifying the worthless f*****g about of said marketing tossers, so with no offence intended to you personally, you'll excuse us if we don't give a flying fu... er, monkey! (^_^)

    (*) In a similar way to how they confused the "Java" branding by slapping it over many things that were barely related if at all, e.g. the "Java" Desktop System. Though to be fair, MS do similar things, or- the other way round- rebrand the same product/technology under multiple names (e.g. their multiple attempts to promote their Microsoft Passport unified sign-in under countless names over the years).

    --
    "Slashdot - News and Chat Sites Deviant". (Click "homepage" link above for details).
  5. Re:Still no way for overloading operators?? by firewrought · · Score: 2

    What Sun did was write down a list of things bad in C++ and make sure they were gone in Java.

    I feel operator overloading is one of those features that is mis-categorized as being fundamentally bad when in fact it was only temporarily bad. I suspect that a lot of people got giddy when the feature was popularized by C++ and wrote a lot of bad code as a result, but with time and maturity people have learned how to handle this feature sensibly. My evidence? C# supports operator overloading and I've never seen it abused, despite all the other bad C# I've seen.

    Operator overloading is like your word processor's font capabilities... when people first discovered that they could have multiple fonts in the same document, you'd see all sorts of crazy font/styling overuse. But nobody in the publishing world does this even more (not even Wired), and even your Aunt has figured out that you don't need to put 5 different typefaces in the same document.

    --
    -1, Too Many Layers Of Abstraction