New languages for the JVM are cool and all, but still no syntax fixes the problems inherent in the JVM. Mainly, the lack of generics.
Actually there are several improvements to the Gosu generics system that workaround JVM limitations.
In Java, when you use generics, the true type like MyClass is erased and it just becomes MyClass at run time. This called type erasure.
In Gosu, if you do the same thing, assuming MyClass is a Gosu type, the run time type is really MyClass. This is called reified generics.
(Note however that if the type is a Java type to start out with, like java.util.ArrayList, then the generic version ArrayList in Gosu follows the type erasure route as you'd imagine.)
But if you are playing in the Gosu world with Gosu types (for example, a Gosu class ), the language adds code that really does preserve generics even though the JVM doesn't natively think that way.