In the post, I said, "Python is still my muse, but Groovy is my Winston Wolf."
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 :)
 Scene from Pulp Fiction introducing Winston Wolf http://www.youtube.com/watch?v=ANPsHKpti48
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:
The 10 minute ratio stat lets me know how much time was spent doing garbage collection within the last 10 minutes.
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.
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.
Note the test drive feature isn't working yet. I'm hoping to have this working in a couple of days. The try it now feature should be working and for that I create a 512MB digital ocean VPS instance for each trial request.
It's important to note my software doesn't use any web framework ... other than what I have built myself. This is probably one of the reasons why my program has a smaller memory requirement.
Everything is pretty much one layer above the servlet/rest layer. And the only time my program becomes memory hungry is when I do the initial indexing but once that's done, 512MB is more than enough to keep it happy.
If you know Java, I would personally use it for your side project since python will be unable to match it performance wise.
I also forgot to mention that my product uses 3 JVMs. One for the webserver, one for my worker process, and one for the indexer.
And, "code fashionista"?
Hah, give me a break.
Python actually predates Java. I can't tell you how many times in the period 2005-2009 people derided me for using a "scripting" language for real work. All the "real programmers" used C++ or Java, of course!
Then, in 2009-2013, everyone suddenly realizes, oh, perhaps we don't need 200 classes per 1,000 lines of code and perhaps we don't need an IDE to that vomits boilerplate all day long and perhaps static types aren't such an important thing and perhaps generics are overrated and perhaps programmer time truly is much more expensive than machine time, ...
and, now I'm a "code fashionista" for still using Python for production projects, 6 years later? The "scripting" language that's so non-serious that it's used by thousands of production large-scale systems and scientists the world over?
Yes, that one -- the "fashionable" language. The one that isn't fussy and just gets work done.
Also, "everyone" is just most people in web startups, which are a very small minority of software developers with very specific needs. They usually work in small teams, so languages designed to help with large project management are not a requirement, but a very fast turnaround is. So, sure, Python is better suited than Java if those are your requirements. This is still just a tangent to the JVM discussion.
I find that Java and the JVM is just something that you don't talk about, which is why it's never going to be fashionable. Useful yes. Fashionable, I'm not sure.
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... which is seems to be more of a nice collection of libraries, rather than a box you in framework.
People that like static languages use Java, Scala, etc.
People that like dynamic languages use Python, Ruby (JRuby), etc.
Who's left over to use Groovy?
The people that like Grails and Gradle. Which is fine, but the popularity of the whole language is resting on these two frameworks, IMO, which seems precarious.
It's original thesis, a scripting language for the JVM, was interesting when it first started, but since then the JVM implementations of traditional scripting languages has gotten really good.
Personally, I believe that if they'd pivoted to static typing around Groovy 1.0, they would have been the Java next by now. They would have won.
They were years ahead of Scala. And it's always sounded like a great, working man's language/compiler, e.g. powerful AST/meta-programming/etc.
There were people in the Groovy camp who wanted to do this (the @Typed annotations that they have now), but it took too long, AFAICT, because the core committers had spent so much time convincing everyone that a dynamic language on the JVM was worthwhile that they didn't realize a static one would have taken their adoption to the next level.
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.
http://stackoverflow.com/questions/425294/sql-database-views... 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... - and more importantly, @Validatable. http://grails.org/doc/latest/guide/validation.html#validatio...
(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 is there if you want to bolt GORM on to legacy classes.
It is trivial to remove the GORM/Hibernate dependencies from Grails.
If you can use No-Sql databases that offer a REST API, all you will need is an additional dependency on Httplib so you can make the calls.
Its fine when it works, but expect inscrutable session flushing errors when you try and flex it too hard.
Sql sql = new Sql(dataSource)
List results = sql.rows('SELECT * FROM mytable WHERE type_id = :type_id', [type_id: id])
vert.x - http://vertx.io
Spring Boot - http://projects.spring.io/spring-boot/
It's possible to wire up a micro webframework example with only a couple lines of code in Groovy.
Remember that Groovy, Grails, and Spring Boot are run by the same company, there might be some synergy between the latter two at some point.
It's because Groovy and its apps like Grails are part of the same company that many developers are afraid of creating anything web-related for Groovy that's not a Grails plugin.
Grails head Graeme Rocher was evn 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.
Grails head Graeme Rocher was one of the 5 Groovy despots  until a few months ago. He joined the despotry 4 yrs ago, which could have been what prompted the Play! 2 framework to purge itself of all its Groovy code. Groovy really needs its managers to be divorced from those developing the apps that use it, so others will join the ecosystem without being suspicious of what might happen in the future.
Btw, I don't work for any company with a vested interest against Groovy, but am reimplementing Groovy as a side project.
Sounds pretty cool. Looking forward to seeing what you come up with!
here's a short video demoing coding in Groovy and other jvm languages:
We use JSR-223 to support the various languages
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.
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.
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.
> 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.
> 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.
They're incompatible, both syntax and semantics.
- 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.
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.
Perhaps that should be "most Groovy people are excited for Kotlin". The reason "Groovers" look at Kotlin before Ceylon could be because Groovy creator James Strachan and Groovy++ creator Alex Tkachman jumped over to Kotlin.