I never said Java should or would stop evolving. I'm explaining why  
Java must, of necessity, evolve slower than a brand new language.

With regards to lang interop and closures in JDK 7: here's my thoughts.

Think of JDK 7 as our Snow Leopard. It's not about sexy new features.  
It's about fixing long standing issues in the platform. The two most  
important features are modules and invokeDynamic. JDK 7 is about  
getting Java ready for the next 20 years. So that it *can* evolve.  
This is much needed work and I think reducing the scope of JDK 7 to  
just those (no closures, no swing app framework), is vital to the long  
term health of the platform.

- Josh

On Sep 17, 2009, at 5:46 PM, Reinier Zwitserloot wrote:

>
> To Josh, Bob, and all the other 'java is a fossil' arguers:
>
> Please, stop.
>
> Your argument fails almost immediately: Because the JVM has no notion
> of a closure, a 'duration' type, and a gazillion other things various
> new JVM languages are trying to add (as discussed in posse #278!),
> interop between them is much, much worse than dealing with java (the
> language)'s ideosyncracies. Fan even attempts to invent a completely
> new library to go along with it. Talk about a learning curve! (so does
> scala, for that matter. Will noop?). Interop between the new language
> and java is similarly useless. Again, refer to the posse episode,
> where the act of trying to interop javafx with java on anything but
> the highest level was strongly discouraged, and for good reason.
>
> Without that interop, your entire argument boils down to: Everyone is
> supposed to at some point either rewrite their project FROM SCRATCH
> into a new language, or migrate slowly by starting new projects in a
> new language, and continuing to maintain the older projects in java.
>
> This feels like a bad idea. Scratch that, a horrible idea. Even if we
> accept java as a fossil, it'll first have to evolve towards being more
> interop-compatible so we can all move away from java in an orderly
> fashion.
>
>
> I'm confused, too: You're all the kinds of geek that care about this
> sort of thing, so why is everyone just silently accepting the axioma
> you've posited here: ALL LANGUAGES DIE - that's what you're saying. At
> some point the userbase enforces strict backwards compatibility, and
> somehow we've gone from that to - language dies.
>
>
> Hold on. We're skipping way too many steps here. Says who? Why can't
> java evolve AND stay backwards compatible? We've got 3 things, all
> named java:
>
> - The JVM (lots of work, but it can and has been evolving, and nobody
> seems to be asking for it to stop)
> - The core libraries (lots of work. Evolving it is very hard, and
> backwards compatibility constraints are choking improvements)
> - The langtools project (Compared to the other two not even a drop in
> the water. evolving a little, but this is really the entire focus of
> coin, lombok, and other attempts to continue evolve the java
> _language_).
>
>
> As the JVM is already evolving, that problem already solved itself.
> Moving on to how to evolve the latter two without breaking old stuff:
>
> For the core libraries, it's hard, but handwaving java (the language)
> away as a fossil does not make this problem go away. For interop, we
> NEED to add closure types and other primitives to the core. To keep
> the core clean (unless everyone really feels fans and scala's approach
> of writing wrappers on top of everything is a solid plan - where does
> that stop? Will we have 8 layers of wrapper in 2020?) we need a way to
> evolve it without breaking old stuff. People have been solving this
> problem for YEARS though. That's why we have module systems,
> versioning, and even advanced ideas such as shipping an API mirror for
> version X that is actually interacting with an object of version Y, to
> let objects of that module cross the border between 2 modules with
> different version requirements for that module.
>
> Similarly, even if you do accept that rewriting/wrapping the core
> library is the only acceptable solution, how will you evolve THAT? If
> you don't solve this problem now, in 6 years we'll all be calling
> scala/fan/noop a fossil and moving on to the next shiny thing. I don't
> really feel like rewriting all my projects every decade just to stay
> with the times. I'm just not going to accept that. I hope the rest of
> you won't, either. We can fix this.
>
>
> Lastly, there's langtools. A mere trifle compared to the JVM and the
> library core. So, why not split it up? Right now maintainance/support
> of javac, java.exe (JVM), and runtime library (RT) is tightly bound:
> They all go out of support at the same time. Why is this? Decouple
> javac from the JVM and RT, completely. Give javac a name and don't let
> its version track the core libraries.
>
> You could then have the following situation:
>
> JVM/RT8 is released with a bunch of modern language primitives such as
> a closure type. DolphinJavac (what's now known as javac6) has been
> updated, bugfixed, and a few very minor backwards entirely compatible
> changes have been shipped with it. This v8 version of DolphinJavac may
> even require JVM/RT8 if you use all the features (just like javac5
> needs JVM/RT5 if you use annotations, or iterable syntax, etc). If
> you've got a project under active maintainance, you switch to JVM/RT8
> for it, and DolphinJavac8.
>
> A bit later, MahiMahiJavac is released, which contains loads of new
> features, including closures, traits, struct classes, pattern
> matching, lexically scoped monkey patching, and a bunch of other
> features. Old code (written for DolphinJavac) will generate a bunch of
> warnings and in some cases may even simply not work, but MahiMahiJavac
> is still very much javac - a few minor edits is all you need, and you
> should definitely go for it if you're working on an actively in-
> development project.
>
>
> As the early switchers to MahiMahi are clearly preferring updates to
> java-the-language, MahiMahi will continue to evolve fairly drastically
> for the JVM/RT9 timeframe, but at some point MahiMahi is in the same
> boat as dolphinjavac is in now, and it gets major-feature-freeze. A
> few months later, Seawolf is released.
>
> This process can be maintained essentially forever, and allows
> continues evolution of the language.
>
>
>
> On Sep 17, 6:34 pm, Joshua Marinacci <jos...@marinacci.org> wrote:
>> (warning, this is long).
>>
>> It's easier to invent a new language than improve the old one for the
>> same reason it's far faster and cheaper to build a brand new road  
>> then
>> to do minor repairs on an existing road that's *in use*.  This is  
>> just
>> the nature of software. Once something ships and is used by customers
>> it instantly becomes legacy. And the more people use it the harder it
>> becomes to change.  Over the last 30 years of software development
>> we've come up with lots of tricks to address this, but it's still a
>> very hard problem with no easy answers.
>>
>> Why don't we step back and look at the big picture here.  Java, the
>> language, is used by somewhere between 4 and 8 million developers
>> (depending on who's numbers you use). It's installed on nearly 1
>> billion desktop computers and even more servers and cellphones. In
>> short, one of the most widely deployed software platforms ever.  In
>> short, something very powerful and valuable, but also very difficult
>> to change.
>>
>> Every change you make to the core must consider the facts above, and
>> that makes change difficult. Not impossible, but difficult and
>> therefore cautious.  For every person who wants to add a new feature
>> there are 10 who want no new features (or at least different
>> features). For every developer who wants to break backwards
>> compatibility, there are 100 who don't. That's one of the reasons
>> Swing has been so hard to evolve.
>>
>> I don't mean to sound depressing or to say that Java will never
>> evolve. It will. But it will be slow. There will probably never be  
>> any
>> radical changes to the Java language again. Nothing on the level of
>> generics, at least.  But you know what: that's okay. In fact, it  
>> might
>> be a good thing!
>>
>> I was annoyed when I first came to this realization. I'm an uber- 
>> geek.
>> I love to learn new things, build new programs, and try new  
>> paradigms.
>> I'd love to see the Java language evolve with tons of new things.
>> But after thinking and talking to a lot of people I also realized the
>> value in the backward compatibility: stability.  Java is a general
>> purpose language that is becoming built into everything, and thanks  
>> to
>> the compatibility promises it's enables tremendous portability and
>> reliability. Libs from 10+ years ago will run flawlessly.  This is
>> incredibly valuable.
>>
>> It still sucks though. We have tension between evolving what we have
>> and keeping valuable compatibility.  Fortunately, we have an out: the
>> JVM. The JVM is separate from the language and can host new languages
>> which are compatible with it and with Java.  This is incredibly
>> useful.  If you want to keep on the forefront then you can use a
>> language with cool features like Scala or Groovy. If you need
>> compatibility you stick with Java. And you can mix and match them at
>> the class / jar level. This also frees the Java language to focus on
>> compatibility even more, while freeing the new languages to innovate
>> in new directions that wouldn't be possible with a mature general
>> purpose programming language. The best of both worlds.
>>
>> I've said this a few times, but perhaps not here.  Java, the  
>> platform,
>> will be around for a very long time thanks to the separation of the
>> JVM, the language, and the runtime.  JVM bytecode will be running
>> inside of our computers 40 years from now. Hopefully that bytecode
>> won't have come from a Java compiler, but the reality is that some of
>> it probably will be libraries we've been using for decades that still
>> run great. That's the power of compatibility. And that's why Java,  
>> the
>> language, must necessarily be slow to evolve.
>>
>> Now as for why JavaFX Script wasn't broader. It's mission has always
>> been very constrained: to be the best damn language and API for
>> building GUIs. No more and no less. Being focused results in higher
>> quality and faster time to market. If JavaFX was more general it  
>> would
>> be less good at being the best damn language for GUIs.
>>
>> - Josh
>>
>> On Sep 17, 2009, at 3:47 AM, Casper Bang wrote:
>>
>>
>>
>>
>>
>>> I agree with your analysis although I often think of this as a
>>> question. Why is it that it's ok to invent a totally new language  
>>> but
>>> shaping an existing one according to state-of-the art is not? It  
>>> seems
>>> like we are forced into making the hard choice between something
>>> radically new (Scala, JavaFX) or legacy (Java).
>>
>>> The only difference is that the radically new has no backwards
>>> compatibility to worry about (yet). So how come we don't just evolve
>>> the existing stuff and let go of some compatibility with the benefit
>>> that you are offering the existing community a gradual and painless
>>> transition (but forego backwards compatibility). It's not clear to  
>>> me
>>> why JavaFX was not made broader than it is, so it could effectively
>>> function as such as replacement.
>>
>>> /Casper
>>
>>> On 17 Sep., 12:23, hlovatt <howard.lov...@gmail.com> wrote:
>>>> You can see in this discussion group the tension between: "don't  
>>>> make
>>>> changes" (Bob) and "lets keep advancing Java" (Reinier). I am in
>>>> Reinier's camp, but think that both points of view can be satisfied
>>>> with a source statement. If there is no source statement then the
>>>> file
>>>> compiles as it does now, but if the file has source "Java7"; at the
>>>> start then you can use the new features and most importantly a file
>>>> with source "Java7"; at the start does not have to be source
>>>> compatible with current Java (though the two need to co-exist on  
>>>> the
>>>> JVM - just like JavaFX and Java do today).
>>
>>>> This way everyone gets what they want.
>>
>>>>  -- Howard.
>>
>>>> On Sep 17, 2:52 am, Bob Lee <crazybob...@gmail.com> wrote:
>>
>>>>> On Wed, Sep 16, 2009 at 12:59 PM, Reinier Zwitserloot
>>>>> <reini...@gmail.com>wrote:
>>
>>>>>> There were a few proposals that didn't make it that
>>>>>> nevertheless received some positive feedback and went through a
>>>>>> bunch
>>>>>> of iterations (case in point: Neal's exception handling  
>>>>>> proposal!),
>>>>>> that were nevertheless not shortlisted.
>>
>>>>> You keep pointing to Neal's proposal, but one example doesn't
>>>>> connote a
>>>>> trend. Let Neal champion his own proposal.
>>
>>>>> While having a preliminary process might save some people some
>>>>> time, it's
>>>>> not something I'd spend time on. I doubt anyone else would either.
>>>>> Frankly,
>>>>> I hope the Java programming language *doesn't* change much more. I
>>>>> certainly
>>>>> don't want to do anything to encourage more change. In 5 years,
>>>>> Java will
>>>>> look a lot like C++, and we'll look back and say that we should
>>>>> have just
>>>>> stopped 5 years ago.
>>
>>>>> Bob
> >


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "The 
Java Posse" group.
To post to this group, send email to javaposse@googlegroups.com
To unsubscribe from this group, send email to 
javaposse+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/javaposse?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to