(excerpts from emails I sent my co-workers at Northwestern University)
Did some reading on Scala, Groovy, and JRuby. I'm interested in adding another language to the devel team's repertoire, a JVM-based language that interoperates smoothly with Java code so we could write new code in the new language without being forced to change existing code. I'm particularly interested in having a more powerful language than Java to use for compiler/code generator work.
All of these languages are a lot higher level, more dynamic, more functional (in the functional-programming sense), and look more fun to code in and more hacker-friendly than Java is. So far Scala seems the most appealing.
JRuby seems like a probable loser given that the Ruby language wasn't designed from the beginning for the JVM, the way Scala and Groovy were. My concerns about Scala include overall maturity/reliability (it's pretty new, there isn't even a book out yet).
I've gotten so interested in Scala that I've set Python aside temporarily.
I finished reading the short Scala by Example book, and I spent a lot of the week reading the much longer and more detailed Programming in Scala book -- I'm about 350 pages into it now. I'm going breadth-first, doing lots of reading and almost no coding so far, so my reading knowledge of the language is way ahead of my writing knowledge. I like to start by getting a rough feel for everything that's available in the language, then I'll circle back to the start and learn more details on writing my own code.
I got scala-mode set up in Emacs and experimentally tried converting a few of our minor Java classes to Scala. This required updating the Makefile to deal with the mixing of the two languages. Success! It works fine, and I got my feet wet writing code. Very exciting. At least for now, I'm doing this just on a branch. Currently the Makefile changes are kludgy, but I can fix that if this mixing-Scala-and-Java thing becomes something real.
I've been at least scanning, if not "reading", everything on scala, scala-user, and scala-debate, just to get acclimated.
I like that the interoperability with Java is so smooth, but I'm alarmed when it seems to me (with my current, limited understanding of all the tradeoffs) like that interoperability was put before the simplicity and consistency of pure Scala. I want to mostly be writing Scala code in a pure-Scala mindset, not encounter freakiness, and only hit potential freakiness when the time comes to talk to Java.
Subject: Scala now required on trunk
I'm about to check some Scala code on in the trunk. Building NetLogo will now require having Scala installed in your machine, in /usr/local/scala.
There are now 2170 lines of Scala in the NetLogo source tree.
The language is awesome. I occasionally want to slap the type inferencer, but it's no big deal. I mean the language is awesome for me; I feel like an adult again, as a former Common Lisp programmer subjected to roughly ten years of enforced backwardness in C++ and Java. I wanted to get interested in computer science again and so far it's working.
I have some doubts about how others who will work on the code will cope with it, if they never learned Lisp or Haskell, or otherwise lack a strong CS background, but oh well.
The Emacs mode often doesn't indent code properly, which is frustrating, but I just mentally balance that against the stimulation of getting involved pretty near the ground floor of something, in terms of mainstream awareness.
The docs for the standard library are often poor, but almost every time I'm forced to consult the source code instead I end up learning something interesting.