Thanks for a nice sane post!
I was despairing of seeing any on this thread.
On 2/27/2014 8:31 PM, Reinier Zwitserloot wrote:
Perhaps you don't see a peep in this channel is because any discussion
will instantly devolve into a scala fanboy fest? This post turned into
one halfway throughout clay's 1st post!
I'm guessing there's not much happening because:
* Testing lambda features is still a ways out, but the IDEs are just
now coming online. I believe IntelliJ has beta support. Netbeans
definitely does, and you can now chuck a plugin into Eclipse Kepler
and have fun with it. Still, it is _very_ early. More to the point,
perhaps, those who really want to play around with this stuff have
been able to do so for a long time, and for them nothing is changing.
* The exciting bits about lambda are split between "What is it? Let's
talk about how to bring closures to the java platform!" and "How does
it make my day-to-day programming java different / easier?". We're in
the limbo in between. We can't use it yet in 'real' code (certainly
not until JDK8 is released officially, and then still slowly as
libraries need to come online, you first need to convince the dev
team, you have to test your stuff on JRE8, yadayada), but the
feature-set and design is completely frozen and has been for a long
time now. Essentially, there isn't much to talk about. Did you see the
insane traffic about it on this mailing list and elsewhere around the
time the syntax discussions were going on? The rank-and-file that
haven't looked at it yet (A) don't hang out here, and (B) still
haven't looked yet. They will in a few more months. But they'll mostly
just adopt it, anybody that really was itching to discuss it would
have done so a long time ago.
* We haven't had a podcast to start the discussion in quite a while.
As far as your downsides:
* Java's lambda approach is unique. It is more concise than scala's
(due to not needing to mention the types of the variables), and the
type system does not involve monstrosities such as Function22<A, B, C,
... all the way through W>. As far as I know, no language, certainly
no popular/mainstream one, has gone with the novel concept of
requiring the closure to have context such that its nominal type can
always be strictly determined. All other languages either have
functional types and will optionally auto-box into a nominal type if
the context dictates that this is necessary (scala), or, don't have
any nominal typing in the first place, and treat a function just as 'a
function', without caring about types in the first place (javascript,
python, ruby, etc). This alone already shows that calling java 'way
behind' is misleading. Java is an apple, and scala is a pear.
* Scala is not 'basically java 8 + syntax cleanup + pattern matching'.
For starters, scala has operator overloading and 'implicit', and more
pragmatically speaking, if you look at generic random java code, it
looks completely, utterly different from generic random scala code.
The communities are totally different. The mindset? Totally different.
The preferred models and API approaches? totally different.
* If we're going to bash adoption rates, scala still isn't even close
to upgrading so that its closures can interop better with java's,
mostly because scala doesn't want to end up in a situation where the
class files it produces can't run on JRE6, last time I talked with
Odersky & team. That's fair, but it goes to show that the
compatibility dance is something that takes a while everywhere.
* Busying terms like 'philistines' and 'pathetic', while we're
probably all guilty of doing that from time to time, mostly just makes
you sound like Ranty McRantersons. If the aim is to engender some
discussion, I'm guessing that isn't the best of ways to get it going
into a fruitful direction.
On Thursday, 13 February 2014 21:46:16 UTC+1, clay wrote:
I'm disappointed there is not a peep about JDK 8 in this forum.
IMO, the main features are:
- Cleaner lambda expression syntax than the anonymous inner class
route from Java 1.1
- Functional collections in the standard JDK as opposed to relying
on somewhat obscure add-on libraries like FunctionalJava or Clojure.
- Standard Optional type which actually includes map and flatMap
unlike the philistines from Guava. OptionalInt doesn't include
these for some odd reason.
- Lots of VM improvements. No permgen! Some of my microbenchmarks
saw 10% speedups on old code, which is completely unexpected.
- New date/time library. Successor to Joda as a standard library.
If you have to deal with calendar date/times and can afford JDK8+
runtime requirement, this is a super elegant library.
Downsides:
- Still way, way behind Scala. Scala is basically Java 8 + a ton
of syntax clean up and fixing legacy problems inherited from its C
origins + pattern matching system + for comprehensions designed
for flatMap-able types (Monads) + better designed library.
Typesafe's ecosystem is also really attractive with
SBT,Akka,Slick,Play. Most of those support Java, but Scala is
clearly preferred.
- My employer will likely not approve any JDK 8 work for three
years or so. If there is a shred of a possibility we will have to
ship code to someone who expects JDK7 compatibility, we can't upgrade.
- Major features are mostly catch up with everyone else. There are
more exciting new developments elsewhere.
- Android has pinned much of the Java programming community to
legacy JDK 6. Even new Android 4.4 has this pathetic support for
the trivial syntax additions, but doesn't support the major JDK7
features like InvokeDynamic byte code and the NIO.2 library.
--
You received this message because you are subscribed to the Google
Groups "Java Posse" group.
To unsubscribe from this group and stop receiving emails from it, send
an email to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/javaposse.
For more options, visit https://groups.google.com/groups/opt_out.
--
You received this message because you are subscribed to the Google Groups "Java
Posse" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/javaposse.
For more options, visit https://groups.google.com/groups/opt_out.