Google App Engine Adds Java Support, Groovy Meta-Programming
Zarf writes "Yesterday Google announced that the Google App Engine now supports Java development, and fast on the heels of the Java announcement is an announcement for Groovy support! Groovy is a dynamic programming language for the JVM that is a near super-set of Java. Much Java syntax is valid Groovy syntax, however, Groovy adds powerful meta-programming features, and the new functionality will bring these meta-programming features to App Engine development. Groovy got special attention from the SpringSource Groovy team and the Google App Engine Java team, and it was this collaboration that helped create the changes that were the big secret in the recent Groovy release of 1.6.1."
This really opens the floodgates for cloud computing. I can't wait to port to this platform.
After a cursory glance around the Groovy site the syntax seems like python with brackets, yuck.
But Groovy is NEW! And new is better! Just ask any developer!
There's no -1 for "I don't get it."
I'm curious to know which api's they support.. Sounds like only servlets and mail.. I wonder if its a complete J2EE container, which is pure bloat. Also do they have any standard sql functionality in their hosting solution?
Uh, yeah, the actual support for Java, while non-Python language support had been discussed as a possibility for the future previously, is new.
Those are the same restrictions Java Applets have due to the Security Manager, and somehow programmers manage to develop useful applets.
my mistake
Running Ruby using Jruby on Google AppEngine.
http://blog.bigcurl.de/2009/04/running-sinatra-apps-on-google.html
Should get you started.
java is extremely efficient so I have no idea what you're talking about. It's far more efficient than python which is the original GAE platform. I know it's fashionable to bash java on /., but you should at least know what you're talking about. Or, are you suggesting that everyone write their web apps in C?
Really, do you think Google is going to deploy an inefficient design to make money on cycles? That seems incredibly short-sighted, far better to offer great performance and sign up more customers.
But that's why they're a company and you're posting anonymous snarky comments from the peanut gallery.
Ironically, the word ironically is often used incorrectly.
http://olabini.com/blog/tag/gae/
In fact, you should thank ThoughtWorks guys for several of the recent blog posts on GAE involving JRuby, Groovy and also Clojure.
Well it would be a great improvement over t
Segmentation Fault
I can't believe you don't know what a Hasemalphaginnojinglanaporphomism is.
Incorrect. The Servlet platform imposes those restrictions already, with the container handling all the messy details of threading and networking. It works just fine in 90%+ of the cases.
Javascript + Nintendo DSi = DSiCade
I'm not sure I fully understand the reason for Groovy? I've read a lot of the documentation, but it doesn't answer the fundamental question ... as a java developer, why would I learn this language when I can just use java? Is it just for the new language features? Can someone illuminate?
Java is my main language, but I definitely see the value in Groovy. For instance, how do you pass functions or other code blocks around in java? You either use very clumsy and verbose anonymous inner classes, or.. or nothing. Groovy handles this gracefully.
Basically Groovy is a scripting language that lets you use java classes. It's not really much different than Jython or JRuby, it's just more java-like in syntax.
While your two links are interesting, I think you have to do more work to make your point. Can you cite why those links prove the superiority of Python? And what specifically do you mean by 'rewrite the bible'?
Regarding efficiency, I give you this. The relevant sentence: "I decided to redo several of the tests with updated versions of Python (2.5) and the JDK (Java 6). And indeed, my suspicions were confirmed: Java has made huge speed improvements, and is now faster than Python in almost all cases."
[Ego]out
RTFA, its from meta-programming! How else would you write meta-programs to run on GAE in the cloud? Just kidding =).
Although I could be way off, I'd assume it allows end-users of your web-app to script additional functionality onto it.
Let me just say that you don't need to rewrite the bible every time you want to do any operation on python (or pretty much any other language)
Compare this http://code.google.com/appengine/docs/java/datastore/dataclasses.html
with this: http://code.google.com/appengine/docs/python/datastore/entitiesandmodels.html
Yes, because it's so hard to use the 2 click, automated IDE function to generate all those getters and setters. They aren't required by the language, btw, just for encapsulation. You know, that thing that's one of the selling points of OO.
You write exactly as much code as you do in Python, autogenerate convenience methods (getters, setters, toString, etc.), and end up with your beans. Besides, who cares how hard it is to write a bean class. This isn't exactly the core effort during app development, now is it? How many awesome libraries are there in Java for things like IOC, data access, web frameworks (MVC and otherwise)? There's piles and piles. Are some of them stinkers? Yes, but there's tons of robust, usable, and EFFICIENT frameworks out there. There's tons of free stuff, free app servers, free IDEs, free plugins, free libraries. Some of the best stuff in development was written in Java first (e.g. JUnit, Spring, etc.). This stuff is so good it's been ported to other platforms.
And to boot, the "slow and bloated" Java arguments are belied by the sheer volume of apps out there that are written in Java and you likely have no idea. Check out the networking portion of your favorite MMO game, it's likely written in Java, server side. Tons of banking software is written in Java once you get past the big iron portion. Tons of sites on the web are as well. Some of the biggest, custom forums in the world are Java (WOW forums are).
Yeah, the GP was right, you are ignorant, and don't seem to know what you're speaking about.
You completely missed the point. The person I replied to was stating the the jvm is slow and that google would make a fortune because they charge for processing time. Your comment has absolutely no relation to the issue at hand.
Surely there is a way to make Java even less readable than Groovy. Maybe make the entire language pure regular expressions or allow every character including the . to be an object.
One outcome of Sun's future liquidation is that no-one is around to promote the 1 Jesus language & Java ends up fragmenting into thousands of derivatives like Linux or Fortran.
To the extent Groovy is a "superset" of Java, it is a way to have a shell for doing things in Java without having to build; just type in commands at the prompt, or stick them in a file. One way to look at things might be to think of Java as a way to have compiled Groovy, sort of like Cython is a way to have compiled Python. Whether or not the extra non-Java features Groovy provides are worth using... that is debatable.
Larry
True that I suppose that if I had never written python applications and only knew java I may think it is the greatest
thing since sliced bread also. However since I have written large applications in both java and python I know better. I absolutely hate
crufty languages and when it comes to cruft java is the king.
Got Code?
*shrug* I'm not convinced that Java is all that more complicated or time-consuming for the developer. And since 1.6, with annotations and generics, I'm not sure that the complaint about inflexibility is really there.
Suffice to say, I don't think that Python is the crystal clear choice. On the other hand, I'm not sure the differences are significant - so it probably is up to your coding (team's?) preference and style.
[Ego]out
Sure, Java is more efficient than Python. But is it more efficient than native code? http://shootout.alioth.debian.org/ has statistics and comparisons for many languages. They wrote the best programs they could to perform different tasks in each language and compared the results.
Java compared to Python
Java compared to C
Java compared to C++
C++ is slightly faster on all the tests, but not by as much as I'd expect, and Java is faster than some of the C implementations. At best, C++ is 3x faster and at worst it's about the same. Java does have a 10 to 30x memory footprint, though.
So I hope GAE charges by the CPU hour and not the amount of memory used :)
"Save the whales, feed the hungry, free the mallocs" -- author unknown
I saw your original post, I don't disagree with you, even though the point is moot, efficiency in GAE has more to do with libraries and the code than anything else.
I don't dislike the JVM (ok, I dislike, but it's not the case here), I dislike the Java language
how long until
And since 1.6, with annotations and generics, I'm not sure that the complaint about inflexibility is really there.
Suffice to say, I don't think that Python is the crystal clear choice.
I guess what matters in the end is developer knowledge of the language. :)
I would say one of the biggest advantages of GAE using Java is support for all the JVM languages (like JRuby, Groovy, etc, you could try running Jython as well, just for laughs)
how long until
Or, are you suggesting that everyone write their web apps in C?
YES. And you'll like it too, dammit!
df -h
Then again, Groovy is very popular now, where as Scala is becoming (as per the twitter announcement yesterday).
df -h
For all you PHP folks out there, GAE + Java + Quercus means PHP is now on Google App Engine: http://weirdhenge.appspot.com/test.php ... once you have Java on a platform a whole world of tools just opens up!
Still funny.
Groovy is to Java as PERL is to C. Many similarities, plenty of points of comparison, some interactivity, arguably some interchangeability. It is not a "super set" or even an extension. It's a new language, written in another language. It's a scripting tool, written in Java, that optionally generates Java for execution not in a Groovy engine.
It doesn't give you "compiled Java" any more than Java gives you compiled Java, and other tools (like gjc) give you native executables from software written in Java.
It's got good. It's got bad. It's new. It leverages old. If you're going to use it, you've got to learn it.
No magic, just different.
End the FUD
Let me see if I understand. You read the original comment about cash cows and efficiency. You then read my reply about the jvm being efficient (in the processor time sense) and you decided to laugh at me because java as a language has poor libraries. Really? Please keep talking because your simply digging a deeper hole. Btw, there are many languages on the jvm. I happen to use jruby and would use that on GAE not java. I'm not a fan of java either, but the jvm is a great platform. This past week I wrote a threaded indexer in jruby using java's util.concurrent library. Try that with regular ruby and C then get back to me.
Yes, because it's so hard to use the 2 click, automated IDE function to generate all those getters and setters.
I don't depend on a smart IDE to write python code
You know, that thing that's one of the selling points of OO.
You write exactly as much code as you do in Python, autogenerate convenience methods (getters, setters, toString, etc.).
"Write exactly as much" NOT BY A LONG SHOT.(MyClass class1 = new MyClass() versus class1 = MyClass() just for a start) No need for getters and setters in python. Very rarely used, and you can do without (yes, you can write class1.x = 1 and that's calling a setter function)
How many awesome libraries are there in Java for things like IOC, data access, web frameworks (MVC and otherwise)?
Like Django? ORM and MVC for web. IOC? Try first-order functions.
Some of the best stuff in development was written in Java first (e.g. JUnit, Spring, etc.).
Agreed
Check out the networking portion of your favorite MMO game, it's likely written in Java, server side. Tons of banking software is written in Java once you get past the big iron portion. Tons of sites on the web are as well. Some of the biggest, custom forums in the world are Java (WOW forums are).
Well, so!? This site is Perl, twitter is Scala/Ruby, Pownce is (was) Django, etc, etc And yes, my bank uses Java, I know that.
Yeah, the GP was right, you are ignorant, and don't seem to know what you're speaking about.
Go learn about first-order functions and closures first.
how long until
Support for "for i in $array" syntax
Agreed with most of your points, but this one has at least been improved in Java (6?) with:
MyObject[] myObjectArray;
for ( MyObject o : myObjectArray ){
}
You can accomplish anything you set your mind to. The impossible just takes a little longer.
Does this Groovy implementation mean now the end of Jython? If Groovy is so "Pythony", is there a real need to further develop Jython?
What are the relative advantages/disadvantages of Groovy over Jython?
"Sum Ergo Cogito"
and you decided to laugh at me because java as a language has poor libraries. Really?
You didn't say JVM, you said Java. :) I'm sorry
Still, saying that the JVM is 'far more efficient' than Python is a little exaggeration.
Btw, there are many languages on the jvm. I happen to use jruby and would use that on GAE not java. I'm not a fan of java either, but the jvm is a great platform. This past week I wrote a threaded indexer in jruby using java's util.concurrent library. Try that with regular ruby and C then get back to me.
I couldn't agree more, and I believe that's THE reason Google picked Java, not for "Java" but for everything else on the JVM.
how long until
Servlets don't restrict network connections, and people do it all the time to talk to their database. I know you're not supposed to spawn threads with EJB (because transaction information is kept in thread local storage), but I don't recall anything about not spawning threads being in the servlet spec. I know of a lot of code that does it in various containers without problems.
Yes, apparently you can now use it on the Google App Engine!
What don't you agree about the stated fact that Java is one of the most efficient VMs out there? Python maybe extremely good, but long running applications JVM wins out.
Development speed could be better, but IDE's and other tools make it easier.
It's rather a different thing to compare speed and memory use for *algorithms*. Of course Java uses more memory for the same structures because of overhead, but the 10x to 30x that you see here are of course not something you see when running any reasonably sized application. And I presume they run only one VM per machine - Java applications may safely run in the same memory space, so the initial overhead just stays a couple of MB.
That said, for smaller applications that have to run on many processors, it may make sense to go for C/C++. This is a place where you may put a *lot* of effort to code a rather limited program. Then again, with C/C++ you have a higher risk messing things up, so you would have to use static code analyzers and unit tests before distributing your app over XXX processors (unless you are that superb C/C++ application programmer everybody keeps talking about).
Clearly in the context of processor efficiency. So now you're claiming that my use of java instead of jvm in the context of processor efficiency leads to a logical reply about poor java libraries?
I know most people that are reading at this point think I should drop this, but I'm endlessly fascinated at the lengths people will go to avoid admitting any form of mistake or oversight.
And the jvm is far more efficient than python. The stuff done with the jit is very impressive.
My beef is with the amount of code that has to be written, and the inflexibility of Java.
You just build a class on python, few includes, you're done. Not like Java. Also, no Expando in Java.
There's Expando in Groovy. And Groovy seeks to remove a lot of the syntactic clutter of Java. Read a Groovy book or intro and you'll see its benefits; it's got a lot (most) features of Python/Ruby, etc., while using and being completely compatible with Java.
It's open source and not half-assed open spec in a thinly veiled excuse to call itself cross-platform.
It's dynamically typed, which C# doesn't have, though C# 4.0 will have the static type "dynamic".
Other than that, I don't know. P.S., I don't really hate C#.
these micro benchmarks don't mean much of anything in all honesty. I'm not sure what you mean by "native code". Java uses a jit so it uses native code for many things. Also, the jvm can make optimizations at run time that no static compiler can.
I'm not a fan of java the language, but the jvm is an awesome piece of software. Sadly I think java the language has given the jvm a bad name.
From the spec:
You are right, though. I was thinking about the EJB spec, which explicitly disallows threading. With servlets, it's not forbidden but highly discouraged.
Interestingly, the current spec seems to have lightened up on network connections:
Back before the complete J2EE spec existed, I recall there being a prohibition on making network connections as part of the servlet itself. Generally, you were supposed to use a service of some sort to accomplish tasks that required networked resources. J2EE, of course, provided a number of the required services.
The proper way to do this in a J2EE environment is to configure the connection in the Directory Server, then do a lookup to obtain a reference to the connection pool. I don't have docs yet for how Google is doing DB connections (something about JDO is mentioned in the brochure), but I imagine it's similar.
Javascript + Nintendo DSi = DSiCade
There are plenty of situations where Java is more efficient and better to develop in than Python...
Java has the memory overhead and startup time of the JVM, but once it gets going it wipes the floor with Python - 5-10x faster for any intensive workload.
The Java API is better documented and thought out - and stays backwards compatible. Sure, Python's is more minimalistic, but that's only because it's a bit of a hack job. I like Python, but it's frustrating when they can't even get basic stuff right in the API like having a consistent interface for bzip2 and gzip compression...
It's generally easier, in my experience, to verify the correctness of Java - given that it's a static strongly typed - and the development tools are more mature.
Python's usually better for toy projects, and as a scripting language in the real world, but if you're actually engineering a system... Java (or C/C++, etc) has some serious advantages.
And since 1.6, with annotations and generics, I'm not sure that the complaint about inflexibility is really there.
Annotations and generics have been there since 1.5. However, yes, this is still quite inflexible - what about lambdas, for example (which Python has)?
as a java developer, why would I learn this language when I can just use java?
Dude, like, because it has a totally groovy name! ~
Seriously though, mostly because it has some nice language constructs and syntactic sugar for stuff that is painful in plain Java. If you've ever coded in Python and Ruby, you know what I mean. If you haven't, then you should probably give it a try - getting stuck with a single language, even if presently the most popular one, isn't good for career in long-term.
If the idea is that simple that it takes only two commands to fully specify what you need to do, why should those commands have to be to a separate program, rather than your language implementation? To me, the need for that kind of tooling support is a sign that the language is poorly designed for expressiveness. Essentially, your using a "language" that you read, but using a separate visual language (the IDE UI) to actually write it (or using a mix of that and the native language.)
Its better, all other things being equal, for the language you read to be the one you use to write.
Yes, there is plenty of great existing Java code. Which is why having language implementations that can interface with and leverage that code is a good thing. Of course, there are plenty of JVM-based languages that do that quite well -- JRuby, Scala, Groovy, Jython, etc. The existence of lots of useful existing Java code is definitely an argument for leveraging the Java platform, but that generally doesn't require using the Java language.
Well, there are lies, damn lies and statistics. We'll have to wait and see to find the truth.
I agree Java is very fast and efficient, any algorithm you implement in Java and Python, the Java will run rings around the Python one.
But that is not all there is to it. Modern Java apps tend to use memory and CPU cycle hogging frameworks like Spring and Hibernate.
Then there is the network layer. It is entirely possible to have a very fast server implementation in C running a slower dynamic language and have the sum of the parts outperform a J2EE server.
I am sure a lightweight JSP/Servlet/POJO only Java app on the App Engine can be just as a efficient as an equivalent Python one. But I fear many will use the heavy frameworks and will on average rack up higher utilization charges than those deciding to go with Python.
Let's wait and see...
If large swathes of your code are auto-generated, that's a clear sign that you're coding at the wrong level of abstraction. And unfortunately Java isn't powerful enough to allow code that is both idiomatic and terse.
Don't forget that most of the development workload is in maintenance, for which all the generated code *does* add significant overheads.
BTW, have you noticed that your auto-generated JavaDocs suck?
Dynamic languages are gaining popularity extremely fast for a whole host of reasons. If you haven't used a dynamic language then you probably won't understand why they are attractive very easily, but if you have it will probably seem obvious. They do have a lot of downsides and I think the jury is still out to some extent whether the reams of code now being written in them is going to be maintainable down the track.
Groovy is Java made into a dynamic language and with innumerable convenience features added. The best way to describe it is to imagine if java was turned into Ruby.
I suspect one reason Google has focused on it is because of Grails, which is java's main player in the RAD web-app development arena (more or less the equivalent of Django, which they also support for the Python app engine). It doesn't work on App Engine yet, but I strongly suspect that is where they are headed.
Clearly in the context of processor efficiency. So now you're claiming that my use of java instead of jvm in the context of processor efficiency leads to a logical reply about poor java libraries?
Well, efficiency is a broad word.
I'm endlessly fascinated at the lengths people will go to avoid admitting any form of mistake or oversight.
Well, don't need to go further, it was my mistake and I'm sorry.
And the jvm is far more efficient than python. The stuff done with the jit is very impressive.
Yes, jit is impressive.
how long until
This is ./. We don't want your cogent analogies and your evenhanded, unhypeful treatment here. If one half of your X technology vs. Y technology comparison isn't "users of X will burn in hell", then this is no place for you, and you'd better be moseying along, lest something unfortunate were to occur, you filthy centrist.
Anyone who loves or hates any language, platform, or manufacturer, doesn't know what they're talking about.
And since 1.6, with annotations and generics, I'm not sure that the complaint about inflexibility is really there.
Annotations and generics have been there since 1.5. However, yes, this is still quite inflexible - what about lambdas, for example (which Python has)?
I don't know much about these things but supposedly that's why Groovy Closures are a big deal.
from the link ...
Since Groovy doesn't provide a way to define a closed lambda function and a block of code might not be a closed lambda function at all (because it has free variables), we refer to both as closure - even as syntactic concept.
... which gives Java programmers the ability to use Lambdas or at least lambda like things conceptually ... albeit not in the same ways.
[signature]
For what it's worth, Ruby (and Rails) runs on it now, via JRuby.
But I'm not sure what you're suggesting -- would it be more fair if App Engine offered a C API? Are you wanting x86 (or x86_64) ASM?
Java is one of the more performant languages that isn't actually pre-compiled to binary. Every now and then, people find a benchmark of one little thing that Java actually does faster than C.
Don't thank God, thank a doctor!
I just took a quick look. It's not really a RDBMS but it's more just a persistent object store. It's schemaless and uses JDO to access objects.
This seems to be the type of databases that cloud application service providers are going to. Likely because it's easier to scale these than to scale a real RDBMS.
Dual Opteron < $600
Python's usually better for toy projects, and as a scripting language in the real world, but if you're actually engineering a system... Java (or C/C++, etc) has some serious advantages.
If you actually want to engineer a system then Eiffel or Ada have some serious advantages (certainly over C and C++; with Java you might use JML or similar to help).
Craft Beer Programming T-shirts
Yeah, it can by dynamically loaded into Java. So you can have this wonderful crazy java application that can modify its own behavior by creating a groovy file and then running it. Self modifying code is awesome. Or alternatively, its runtime behavior can be modified while its running, if you'd prefer. Fix the bug with out taking down the app! Not sure if this would be a good thing in most peoples assessment, but it is in my crazy world.
Well.. maybe. Or Maybe not. But Definitely not sort of.
That's pretty much what I saw as well. (Just got my account approved. Whoohoo!) It looks like the object store is flexible enough to pretend to be a database, so they wrapped it in JDO. Technically, it should be possible to create JDBC drivers for legacy apps as well. Personally, I'm somewhat interested in accessing the object store directly. The API is simple enough to where all the JDO stuff is just cruft when it comes to purpose-built applications. (Good for portability, though.)
Javascript + Nintendo DSi = DSiCade
Do people still use JDBC directly for webapps? I thought most people were using either JDO/JPA. Most of the JDBC stuff is boilerplate and takes a long time if you have a large database.
I have used this DAO Generator a few times and it really cut down development time when using postgresql databases.
Only free one I found that seems to follow the DAO pattern closely. It's a little rough but it works.
Using Google App Engine I guess is a little more like Hibernate, where it's and object relational store, except without the relational part. You need to handle the relations in your code.
Looks like it also supports JPA.
Dual Opteron < $600
If large swathes of your code are auto-generated, that's a clear sign that you're coding at the wrong level of abstraction.
Err, a human generated getter is the same as a machine generated getter. Abstract that...
BTW, have you noticed that your auto-generated JavaDocs suck?
If you need javadocs to understand machine generated getters and setters, then you are an idiot.
Sure, Java is more efficient than Python. But is it more efficient than native code? http://shootout.alioth.debian.org/ has statistics and comparisons for many languages. They wrote the best programs they could to perform different tasks in each language and compared the results.
Your claim that "[t]hey wrote the best programs they could to perform different tasks in each language and compared the results" is incorrect. That is not how the Language Shootout works, unfortunately.
From the FAQ (emphasis theirs):
We are trying to show the performance of various programming language implementations - so we ask that contributed programs not only give the correct result, but also use the same algorithm to calculate that result.
To me, at least, this makes the test results quite useless, unless you want to compare two languages that are very similar to begin with. Thus, comparing a functional language that is amazing at dealing with parallelism (e.g. Erlang) to a procedural one (e.g. C/C++), for instance, is likely very unfair if the same algorithm must be used.
The question, then, is whether Java and C/C++ are similar enough so a comparison like this one can be made. Given their close score (for time consumption, not memory usage) I would say yes, but that is also the only thing these tests show.
"Write exactly as much" NOT BY A LONG SHOT.(MyClass class1 = new MyClass() versus class1 = MyClass() just for a start)
Write new MyClass(), press Shift-Home, Shift-Alt-L, Enter produces MyClass myClass = new MyClass(); That's less key presses and the IDE will automatically create an unused name.
To me, the need for that kind of tooling support is a sign that the language is poorly designed for expressiveness.
You don't need to do it and how you use it tells something to the reader. An unencapsulated field says "this is a throwaway class, do not reuse". An encapsulated field with default getters and setters says "this class participates in a bean framework, renaming the field and its getters and setters may break code without compile-time errors". Customized getters and setters, with or without an associated field say something else.
In every case, IDE support for generating those getters and setters is something you either don't use, use as-is or use as a basis to build on. Which brings us to the age-old debate on whether the reduction in source code size is worth the reduction in IDE support.
There are tons of examples of roll-your-own O/R mapping tools out there. JDBC is the basis for all of them. So if you support JDBC, you know that you can support everything from raw access to JDO and everything in-between. :)
Javascript + Nintendo DSi = DSiCade
Those are the same restrictions Java Applets have due to the Security Manager, and somehow programmers manage to develop useful applets.
Applets can spawn threads and make network connections (as long as the follow the same origin policy).
Throw the bums out!
I'm just going to curl up now
... which gives Java programmers the ability to use Lambdas or at least lambda like things conceptually ... albeit not in the same ways.
But it doesn't. It only gives Groovy programmers the ability to use closures. And Scala does the same thing, too.
Anyway, the original point to which I was replying was, "since 1.6, with annotations and generics, I'm not sure that the complaint about inflexibility is really there."
I've been delving into Groovy... it's a paradigm shift and it's very hard not to be so verbose.
.. there are things you cannot do in it (yet) but lots of things you can.
:):
:P
It isn't, as the article suggests, a superset of Java
What I mainly thought when I saw it was "finally, Java has caught up with the rest of the programming world and has a scripting language at last".
When I used it, it became apparent that this was more than a perl to meet C's needs. It was like the cheeky bastard child of Java who can do what his dad can but faster... and you get properly compiled class files out of the compiler.
Anyway I wrote a mud engine that runs groovy scripts to teach myself. The main failing of the groovy package is the Groovy Script Engine. It promises so much and doesn't always deliver. Unfortunately my mud engine is based around the darned thing, so until they fix it properly I'm stuck with it being a bit clunky.
Check it out, and you can muck about with groovy too (please don't laugh at my programming
http://code.google.com/p/groovymud/
"So there he is, risen from the dead. Like that fella, E. T." - Father Ted Crilly
<joke>C'mon Stallman, get an account already!</joke>
I know tobacco is bad for you, so I smoke weed with crack.
No strings (no pun intended) attached, for instance.
I know tobacco is bad for you, so I smoke weed with crack.
I was insinuating something about their agreement with Novell.
Call me paranoid, but there is not much business sense behind such pure altruism. They are up to something.
I know tobacco is bad for you, so I smoke weed with crack.
I don't know dude, irrational decisions are characteristic of M$, and I'm just being healthily suspicious.
I know tobacco is bad for you, so I smoke weed with crack.
Run PHP on your google app engine. See details http://www.webdigi.co.uk/blog/2009/run-php-on-the-google-app-engine/