Moving Java Forward Faster
mreinhold.org
mreinhold.org
In general, I think too much stock is put into language features, perhaps because many developers are bored with the actual software they are writing/maintaining, and so new language features are relatively fun. As a mental experiment for those who know both Java and Kotlin, or both Java and Scala: Suppose you were asked to estimate the time required to implement a system in Java, and you arrived at an answer of 2 months. Now what would be your estimate for the same system, but written in Kotlin? How about Scala? Admit that it would be the same. (Well, probably a little longer for Scala, but just because it takes forever to compile, ha.)
Sure, it may take me two months to write that thing in Scala still, but I'll have more confidence it will work well, and it'll be nicer to read, maintain and work with moving forward.
Scala is an interesting example for this, because the language is a grab-bag of features that definitely can be abused by people who don't know better, it's definitely easy to write worse code in it.
The reality is there is an easy blueprint for Java, because C# is Java, but done better. It's moving at a good clip, but the features coming in are very useful and well thought out.
And great languages let you do both.
Language greatness is pretty subjective and task specific. There are some languages I will never declare great (i.e. PHP, JavaScript, Ruby), but others could be great for different tasks..
If greatness is subjective AND task specific, then the languages you will never declare great could be considered great by others for the tasks they perform. And by your own admission if they were great subjectively AND for a particular task, that would make those languages great. But, you still claim that you would never declare them great?
I highly recommend anyone with these very valid concerns to view it once.
Sorry, can't do that. If my estimate was 2 months in Scala, it would be 6 months in Java: 2 to write the software, and 4 to find and chase down all the NPEs, casting exceptions, and concurrency bugs, while building a test kit for things the scala compiler already verified the moment my scala code compiled.
If you're already there, great. I applaud your superior experience, and hope you really enjoy your C++ footguns. But don't tell me that the scala compiler doesn't have value to me just because you're a code god and don't need it. I actually benefit from languages that help me avoid stupid mistakes.
Perhaps the same, but the code is going to be much safer.
I think that is something you've missed we want features in Java that let us write more reliable code. Otherwise we will migrate.
I'm already starting the process of migrating to Kotlin for any Java work and I'm learning Haskell for side projects.
Of course, CL was designed with "extending CL" as a feature, and not locking the CL user into CL as it is "today." Shame so few other languages bother with this (Java and Clojure on the JVM come to mind immediately as hard to extend). Other languages have very active language evolution (Haskell/GHC comes to mind).
I like my languages to evolve. Preferably not the way Java did (I still hate the 1.5 type erasure hack).
I agree with the proposed plan, when I worked on the JVM, there was a mad dash to get features in by a certain date, otherwise you'd have to wait till the next release of Java to ship your changes.
From interacting with the service teams (L3 and above) customers prefer new features in a new version of Java, with the long release cycles, you have to ship new features in a service packs which made the service team queasy.
It also removes the stigma that Java and its ecosystem is slow compared to V8, .NET and the other platforms.
"After JDK 9 we'll open-source the commercial features in order to make the OpenJDK builds more attractive to developers and to reduce the differences between those builds " http://mail.openjdk.java.net/pipermail/discuss/2017-Septembe...
Java Flight Recorder will be open source.
Java Flight Recorder and Visual VM are great tools, only matched by .NET ones to monitor application performance.
* Accelerating the JDK release cadence http://mail.openjdk.java.net/pipermail/discuss/2017-Septembe...
* Faster and Easier Use and Redistribution of Java SE https://blogs.oracle.com/java-platform-group/faster-and-easi...
Oracle will also ship binary distributions of OpenJDK, and OpenJDK will become the canonical JDK distribution.
But I digress. Faster Java & JVM updates will help Kotlin out as well moving forward. :)
More likely faster updates will be to Java itself, while JVM enhancements will be limited to LTS.
Pattern matching and data classes, for example, will arrive far sooner in Java than value types in the JVM.
Of course, you have the inside word: when are value types coming to the JVM? Hopefully by Java 10.
We did this (at a much smaller scale) with Apache HBase (starting at 0.94, which I release-managed). We went to a monthly release cadence.
We saw the frantic last minute commits just before a release (and followed by multiple smaller releases just after the big release to stabilize the code base) essentially vanish. If the feature wasn't done, it simply got in a month later.
For us it required an "transitive compatibility" (i.e. one can go from version X to version X+3 without upgrading to X+1 and X+2 first), and stable functional tests, so that confidence in a release is automatic and does not need to be established manually.
I represent the London Java Community (LJC) on the Java Community Process (JCP) Executive Committee (EC), aka the Java standards body. I also help run the Adopt OpenJDK programme for OpenJDK outreach and onboarding new developers to work on Java itself.
Now that the acronyms are out of the way :-). We're working at the JCP with Oracle to streamline the standardisation process in order to facilitate these faster releases and provide other Java vendors the ability to run their reference implementations against an in flight Technical Compatibility Kit (TCK), which is what you need to pass in order to call yourself Java.
I'm really, really pleased that Oracle is increasing the cadence. Java 9 allows for incubation modules and so if something isn't ready, it can simply be put in there for early testing without it impacting the main release.
Some folks asked about alternative platforms. In terms of providing high quality releases of OpenJDK for alternative platforms we've created a portal at https://www.adoptopenjdk.net with the build farm run via https://ci.adoptopenjdk.net (code in various repos at https://www.github.com/AdoptOpenJDK). We've only just received the Java Test Compatibility Kit J(TCK) from Oracle and once we have the binaries tested against that then folks will be able to get the latest OpenJDK binaries for all of the esoteric platforms (ARM, z360, AMD variants, AIX, Solaris and so forth).
We'd love for folks with devops skills to come and join us (Docker, IaaS, Jenkins, make skills welcome).
If you have any specific questions please throw them my way!
Shouldn't those version numbers be 2018.3 and 2018.9? Have we learned nothing from the Y2K bug?
https://blog.codinghorror.com/sorting-for-humans-natural-sor...
No one benefits of fragmentation.
Search for Google.
http://openjdk.java.net/projects/mlvm/jvmlangsummit/agenda.h...
http://openjdk.java.net/projects/mlvm/summit2014/agenda.html
Incidentally, there's a project called OpenJDK Mobile[1] on the OpenJDK project site that aims to port the OpenJDK to popular mobile platforms. Not sure where they're at with it, but it seems to be a WIP.
Then there are quite a few embedded device OEMs that don't have the same problems than Google has supporting standard Java, some of them targeting real time embedded devices.
Maybe Google should ask them how they manage to do it.
BTW, here's a picture of your SavaJe phone. No wonder OEM's fled in horror.
https://www.engadget.com/2006/05/13/savaje-releases-jasper-s...
It is easy to fail when a competitor is giving away for free a stolen OS.
Of course OEMs will choose free.
If you think using 38 open source Java API declaration packages constitutes an OS then you clearly have no idea as to what an OS is.
>Of course OEMs will choose free.
Is that why they also chose Windows Phone?
The JVM is doing just fine controlling embedded devices in factories, printers and phones.
http://www.ricoh-developer.com/content/device-sdk-type-j-sdk...
https://developer.cisco.com/media/onePKGettingStarted-v1-1-0...
https://developer.gemalto.com/taxonomy/term/39/group/80?view...
https://www.ptc.com/en/developer-tools/perc
http://www-03.ibm.com/software/products/bg/real-time
I just got bored to post links, there are many more I can keep on posting.
All from companies that used to work with Sun, nowadays with Oracle, without doing the forking game Google has done.
Nothing to do with technical capabilities, rather money.
And lets not forget that also helped Oracle getting Sun.
If it was Microsoft, Apple, <whatever corp> everyone would have bashed them, but it is Google, so it is fine.
And in any case, market failure is not an excuse to steal someone's else work, by not licensing it like every other company was doing at the time, and still are.
Google is the only notable exception.
>I just got bored to post links, there are many more I can keep on posting.
Here's a link on what forking is.
Actually now that you mention it, maybe I should add "Sun support team lead and Sun legal fund contributor" to my profile.
Google should be penalized just like Microsoft was, but sadly it is the love child of Silicon Valley wannabe Google employees, so they get a free pass while Microsoft was bashed to death.
Google did nothing wrong with its use of 38 open source Java API header files. Neither did the juries that presided over the trials. What I do find troubling, however, is your improper use of the word "Fork", to describe what happened.
The venerable master Qc Na was walking with his student, Anton.
Hoping to prompt the master into a discussion, Anton said
"Master, I have heard that objects are a very good thing - is this true?"
Qc Na looked pityingly at his student and replied, "Foolish pupil -
objects are merely a poor man's closures."
Chastised, Anton took his leave from his master and returned to his
cell, intent on studying closures. He carefully read the entire
"Lambda: The Ultimate..." series of papers and its cousins, and
implemented a small Scheme interpreter with a closure-based object
system. He learned much, and looked forward to informing his master of
his progress.
On his next walk with Qc Na, Anton attempted to impress his master by
saying "Master, I have diligently studied the matter, and now understand
that objects are truly a poor man's closures." Qc Na responded by
hitting Anton with his stick, saying "When will you learn? Closures are a
poor man's object." At that moment, Anton became enlightened.
http://people.csail.mit.edu/gregs/ll1-discuss-archive-html/m... Thing changedThing = oldThing.change();
When you start writing code like this, Java can be quite pleasant.