groovy-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Winnebeck, Jason" <>
Subject RE: Is it possible to enable CompileStatic for an entire project
Date Mon, 27 Jun 2016 01:44:10 GMT
Don't discard the traction gained by the fact Kotlin only just recently reached 1.0 stable
release, and Groovy has existed for many years. I use Groovy as mostly a static language,
but also use it for its dynamic purposes when interfacing with other systems, in unit and
integration testing and scripting where I have found no other JVM language that can compare
to Groovy. I started using Groovy in projects when 1.8 came out (I remember because the command
chain DSL was just coming out) when Kotlin wasn't even a conception yet (as far as I know).
So, due to age there exists a set of developers out there knowing Groovy as well. For the
static side, Kotlin is a very interesting language compared to Groovy looking at total new
projects and teams not strongly trained in either, although even in that case my intuition
tells me that Groovy would be easier to learn as it is more like Java -- none of the developers
on my team have has issues picking up Groovy especially since essentially most Java syntax
compiles directly as Groovy. Even as a static language, Kotlin seems a lot more strict in
that it wants to also enforce nullability in types, while Groovy follows Java's semantics.
In my mind Kotlin tries to "double down" on compile-time analysis even compared to Java.

But, if you have a project with dynamic and static requirements -- as far as I know Kotlin
has no dynamic capabilities for example to do things like gpath on XML files -- now you have
a dilemma if you have dynamic languages in your toolbelt. In my mind, Kotlin can't do everything
Groovy can do although both are worthy additions to Java, even if Kotlin is a little smoother
on the static side. Now the problem is, if I can't discard dynamic -- would I have a project
mixing dynamic Groovy with static Kotlin and legacy Java? Is such a thing even possible? If
it was a hard-sell to "train a team" in two languages (Java and Groovy), I doubt most organizations
would go for Java + Groovy + Kotlin. So now I have both existing project that could never
(rationally) displace Groovy, and even if I was starting a new project, I can't say Kotlin
can do everything I'd want to do in Groovy but I can say the opposite (except for the unfortunate
occasional static compiler bugs and occasional IDE limitations) -- that Groovy can do static
and it can do dynamic and it can do Java++ while Kotlin only does 2 of those.

So for any team that has embraced the value of a dynamic programming tool in their belt, I
can't see any room for Kotlin. Having static abilities in Groovy then handles the "Java++"
component and prevents the case of saying Groovy is useful for only a small part of an app,
because you can still get static benefits of refactoring and compile-time checking if you


-----Original Message-----
From: Russel Winder [] 
Sent: Sunday, June 26, 2016 12:39 PM
Subject: Re: Is it possible to enable CompileStatic for an entire project

On Wed, 2016-06-22 at 14:30 +0200, Mr Andersson wrote:
> I do think that's the biggest problem. Groovy was the second largest 
> JVM language in 2010, but it is not really that big anymore, mostly of 
> competition by static languages such as Scala and Kotlin.

Groovy has no serious traction in the static world. Even with the marketing push given by
many people, including myself, Groovy has the label "dynamic" firmly stuck to it; it is seen
in the same grouping as Clojure (and JRuby and Jython). When people are no discussing refactoring
of codebases then if the base language is Java then the choice of language is Kotlin.

> People want to be able to refactor without risking of the code 
> eventually breaking totally, and that's the problem with Groovy.
> Code
> will eventually become stale and stop working if it is put on layway 
> for a while. No compile time checks is a problem for anyone interested 
> in code quality.

This sounds like lazy staff misusing a dynamic language. People using Groovy (and Clojure)
as dynamic languages tend not to have this problem.


Dr Russel Winder      t: +44 20 7585 2200   voip:
41 Buckmaster Road    m: +44 7770 465 077   xmpp:
London SW11 1EN, UK   w:  skype: russel_winder

This email message and any attachments are for the sole use of the intended recipient(s).
Any unauthorized review, use, disclosure or distribution is prohibited. If you are not the
intended recipient, please contact the sender by reply email and destroy all copies of the
original message and any attachments.
View raw message