
Groovy 2.2 released - michschar
http://groovy.codehaus.org/Groovy+2.2+release+notes
======
pixelmonkey
I wrote a post awhile back, called "Groovy, the Python of Java"[1], which
praised Groovy as a great language for Python/Ruby developers who are forced
to work with the JVM and associated libraries.

In the post, I said, "Python is still my muse, but Groovy is my Winston
Wolf."[2]

As for Scala and Clojure, these are wonderful JVM languages, but they force
you into a new programming model. You go from Java's "object-orient all the
things" to Scala/Clojure's "function-orient all the things". Groovy, like
Python, strikes a balance by being dynamic and multi-paradigm. A true clean-up
man.

Its only downside, IMO -- the JVM :)

[1] [http://www.pixelmonkey.org/2011/04/09/groovy-the-python-
of-j...](http://www.pixelmonkey.org/2011/04/09/groovy-the-python-of-java)

[2] Scene from Pulp Fiction introducing Winston Wolf
[http://www.youtube.com/watch?v=ANPsHKpti48](http://www.youtube.com/watch?v=ANPsHKpti48)

~~~
pron
I can understand why in some circumstances the JVM is not the most appropriate
choice, but to me, the sentence "Its only downside... the JVM", sounds like
"The car's only downside... it's a Ferarri". I've worked with so many runtimes
in my career but have yet to see one fit to kiss the JVM's feet. It's far from
being the simplest, but in terms of sheer power (runtime instrumentation,
runtime linking, performance monitoring, hardware/OS support and more) nothing
else comes even remotely close.

~~~
sdesol
I can't emphasize how easy it is to extract JVM runtime information and how
useful that information is for performance tuning. Sure the JVM uses a bigger
initial footprint when compared to a natively compiled application, but the
ability to see how it's working is invaluable.

My program is RAM hungry...ish, but with its easily accessible garbage
collection (GC) information, I can really get the most out of a 512MB VPS.
Just have the GC logs written to RAM disk and have it rotate and you'll be
amazed at what kind of useful stats you can generate.

You can see how I'm using it here:

[http://screenshots.gitsense.com/jvm-
monitoring.html](http://screenshots.gitsense.com/jvm-monitoring.html)

The 10 minute ratio stat lets me know how much time was spent doing garbage
collection within the last 10 minutes.

~~~
pron
... and VisualVM, and Flight Recorder + Java Mission Control, and
BTrace/Byteman... the list goes on and on. If you need to, you can print out
the assembly code generated by the JIT at runtime, modify your code on the
fly, and see how the assembly changes. Erlang's BEAM VM has some of these
capabilities, but not the JVM's performance. Other runtimes are decades
behind.

~~~
pjmlp
> Other runtimes are decades behind.

To be fair, .NET also offers a similar level of support.

The only difference is that you have to pay for it, by getting Visual Studio
Premium or third party tooling like dotTrace which plug into the CLR
monitoring API.

For many people, the fact that they get such tools without paying a dime is a
selling point for the JVM vs .NET.

~~~
pron
Yes, .NET is excellent, too. But it's Windows only.

~~~
pjmlp
Many of us don't have a problem with it. :)

On my type of work, the tools are chosen by the customers, not me. So usually
.NET in Windows only shops, JVM languages in heterogeneous shops, and a little
sprinkle of C++ via JNI/Interop if really required.

------
netcraft
I really like groovy, it seems to be a good sweet spot between the power of
java and syntactic sugar. I just wish there were more framework options, like
something between ratpack and grails. I dont want to use ORM or a heavy duty
framework, but something a bit more structured than ratpack. Grails seems nice
for what it is, but it just isn't what I need.

~~~
babs474
Groovy doesn't get enough love as a post java jvm language IMO.

I agree that grails is a bit heavyweight. The people at my former place did
some work on using groovy with dropwizard:
[https://speakerdeck.com/kyleboon/webservices-with-
dropwizard...](https://speakerdeck.com/kyleboon/webservices-with-dropwizard-
and-groovy) which is seems to be more of a nice collection of libraries,
rather than a box you in framework.

~~~
netcraft
My biggest complaint with Grails is its reliance on GORM - You can do sql, but
it doesn't make it easy and the whole framework is really geared towards the
ORM functionality and the opinionated view of the database and naming
conventions. I need to be able to integrate with legacy data sets, and need
more control over the database in general. Grails works well if your database
is just a simple store for your application data.

~~~
ebiester
I've used it with legacy applications with good success. If you really want,
you can completely ignore GORM. Leave the domain directory blank, use command
objects for your DAOs and DTOs. You can add your validation straight to
command objects.

On top of that, you can write your own hibernate xml on which your domain
objects depend. If you get too fancy, you'll lose some of your GORM syntactic
sugar, but you do have options.

~~~
netcraft
This is interesting - do you know of any examples out there of the structure
you're talking about?

~~~
ebiester
I've personally used it in a few hairy situations, but I haven't had to in a
long time.

[http://stackoverflow.com/questions/425294/sql-database-
views...](http://stackoverflow.com/questions/425294/sql-database-views-in-
grails) is how you would do direct SQL without GORM, which you would use if
you wanted to avoid hibernate entirely. The rest is just command objects -
[http://grails.org/doc/latest/guide/theWebLayer.html#commandO...](http://grails.org/doc/latest/guide/theWebLayer.html#commandObjects)
\- and more importantly, @Validatable.
[http://grails.org/doc/latest/guide/validation.html#validatio...](http://grails.org/doc/latest/guide/validation.html#validationNonDomainAndCommandObjectClasses)

(Technically, command objects are a specific function within the controller,
but what we're really looking to do is leverage the validation framework.)

It's extra work, but no less so than avoiding an ORM in any framework. But if
you can do it in Hibernate, you probably don't need to bother with this most
of the time. (When I had to do it, it was to interface with stored
procedures.)

[http://grails.org/doc/latest/guide/hibernate.html](http://grails.org/doc/latest/guide/hibernate.html)
is there if you want to bolt GORM on to legacy classes.

------
Edmond
For anyone interested in using Groovy for web development, checkout our
product (www.crudzilla.com)

here's a short video demoing coding in Groovy and other jvm languages:

[http://www.youtube.com/watch?v=AqeOS2hqtMg](http://www.youtube.com/watch?v=AqeOS2hqtMg)

We use JSR-223 to support the various languages

~~~
rufugee
I'd like to learn more, but your website is very scant on details. All I can
tell is that it allows me to code in the browser and has quite a few
screenshots, but how about a technology overview?

------
adamors
Our company inherited a Grails project, and I had to help the developer out
occasionally.

Frankly, Grails seems horrible, especially since it mixes the nice language
that is Groovy with just craptastic JVM stuff.

Is there any other mature framework for the language? I have a feeling Groovy
is wasted for Grails.

~~~
vorg
> Is there any other mature framework for the language?

No. It's because Groovy and Grails are part of the same company that many
developers are afraid of creating another web framework using Groovy.

Grails dictator Graeme Rocher was even one of the 5 Groovy despots for 4 yrs,
and didn't leave until a few months ago. This could have been what prompted
the Play! 2 framework to purge itself of all its Groovy code.

Unfortunately, Groovy project manager Guillaume Laforge uses "and Grails
initiator" in this title, perhaps not realizing the message that sends to
people thinking about using Groovy for something web-related but not part of
Grails.

~~~
mcv
You keep repeating the same thing all over this discussion, are you?

------
mindcrime
I love Groovy, and am excited about this release. Pretty much our entire app
stack is based on Groovy + Grails, and that's one decision that I basically
could not be happier with. Switching from Java +
(Struts|Wicket|Tapestry|Spring MVC|whatever) to Grails & Groovy has worked out
amazingly well for us.

Not to say Groovy is perfect, as it's not... the performance could still stand
to get better, for one thing. But it's "good enough" for what we're doing, and
I do expect the situation to improve over time.

------
vorg
Where did the traits go? The wording seems rather definite in this
announcement and rather lengthy mailing discussion [1] in June this year:

> We're looking forward to implementing an often requested feature: traits!
> Our existing @Mixin transformation isn't ideal as it's bug-ridden and hard
> to properly fix, and has the drawback that Java frameworks don't "see" the
> mixed-in methods -- like the recent thread related to Spring MVC showed. So
> having an AST transformation that would be "static" would help in such
> situations.

The feature list in 2.2 is fairly sparse for a point release, and still no
traits and the mixins are still buggy and unable to see mixed-in methods.

[1] [http://groovy.329449.n5.nabble.com/Adding-Trait-to-Groovy-
td...](http://groovy.329449.n5.nabble.com/Adding-Trait-to-Groovy-
td5715831.html)

------
vorg
Groovy rose from below #50 to #18 in a mere 6 months (May to Oct) on the
infamous Tiobe index, then dropped back down a month later. According to [1]:

> Groovy, which turned up in the [Tiobe] 18th spot last month, slid back down
> to a number 32 ranking. "After a long discussion with one of the Tiobe index
> readers, it turned out that the data that is produced by one of the Chinese
> sites that we track is interpreted incorrectly by our algorithms. So this
> was a bug," Janssen said. "After we had fixed this bug, Groovy lost much of
> its ratings." The ratings slip takes Groovy from a 0.658 percent rating last
> month to 0.393 percent this month.

I suspect someone at Pivotal, Inc has been gaming one of the search engines
used by the Tiobe Index to promote Groovy in preparation for this release, and
didn't expect to be caught out for at least another month. This has happened
before. In April 2011, Groovy fell from #25 to #65 in a single month when
something similar occurred. In December 2010, Groovy tech lead Jochen
Theodorou had "volunteered" his services to Tiobe to help them improve their
algorithms, after which Groovy began its short-lived rise.

Groovy really should focus more on features that help developers rather than
search engine optimization.

[1] [http://www.infoworld.com/t/application-
development/c-pulls-a...](http://www.infoworld.com/t/application-
development/c-pulls-away-java-among-top-programming-languages-230603)

~~~
sigzero
You are full of conspiracies...please stop posting.

------
vorg
I'm wondering how easily Groovy will retrofit Java 8 lambdas when they come
out. Groovy uses syntax

    
    
        {a,b-> a++;a+b}
    

for closures, whereas Java 8 uses syntax

    
    
        (a,b)->{a++;a+b}
    

Also Groovy uses delegates to make its closures dynamically scoped, whereas
Java 8 uses lazy evaluation for its lambdas.

They're incompatible, both syntax and semantics.

~~~
blktiger
According to the Roadmap, they are planning on retrofitting Java 8 syntax in
Groovy 3.

------
jareds
I use Groovy quite a bit and like it a lot. I wish there was an easy way to
use it with Android, I'd really like the groovy JSON or XML parsing libraries
even if it meant I had to run my program on a device with Android 4.3 and at
least a gig of ram.

~~~
laureny
I would use Kotlin for Android over Groovy, because it is

\- Much more lightweight and faster than Groovy

\- Statically typed

\- Offers about the same level of expressivity as Groovy (closures, etc...)

\- Much, much faster than Groovy

The only downside is that it's still in beta, but already working great and,
obviously, with awesome IDEA support.

~~~
axelf
It seems like most people are excited for kotlin, but no one is really talking
about ceylon which recently 1.0. Im curious why that is, have you looked at
ceylon?

~~~
laureny
I have, it's definitely an interesting language, more ambitious than Kotlin
and more bold too (lot of new keywords, disjointed types, etc...).

I prefer the most conservative, slightly incremental Kotlin myself, but it's
purely personal and certainly not a knock on Ceylon, which was implemented by
people I have a lot of respect for.

