Scala folks and Groovy folks: you're not big enough yet. For something as big as my game, I want a proven mainstream language. I picked Rhino as a complicated multidimensional compromise; the actual reasons are a full blog post. But the short answer is "you're not big enough." Sorry. A slightly different answer for Scala, OCaml, Haskell and other static languages: my game is a dynamic system. I was astonished to find, circa 1999, that I had effectively implemented JavaScript's prototype system in Java (with no syntax). For dynamic systems you need dynamic languages. If I were writing a compiler, I'd use an H-M language (probably Scala). This game is a different beast; it's one of the most "living" systems in the world (notwithstanding its 1-year hibernation). You could do it in an H-M system, but it would be nearly as big as the Java system. Folks wondering if dynamic typing can work in "big" systems: the answer is that they don't get all that big, because of the dynamic typing. Unit testing becomes crucial, but you should do that anyway, regardless of language. Some good discussion of the reasons for dynamic languages being so compressible can be found in http://www.amazon.com/o/asin/0262220695 Folks who wonder about how I could (re)write such a giant system without any "static" type annotations: http://tinyurl.com/26n2zq