New language features take time to find their way into the Gosu IntelliJ plugin. To address this the Gosu team has an editor of their own for this kind of work aptly named, Gosu Lab. Please use this editor when experimenting with new Gosu features or if you just want a lighter weight editor. After you clone the repo you can load the Gosu project in Intellij then run the Gosu Lab editor from a new IJ configuration like this:

You only need to run the editor.RunMe class.

Or, if you aren’t using IntelliJ, you can simply launch Gosu Lab from the command line using the gosu command:

The Gosu team is happy to announce the official release of Gosu 1.13.
With this release we decided to rename the Gosu Editor to Gosu Lab, this way it is more obvious that this editor is mainly designed for quick experimentation with Gosu. For full application development the IntelliJ Gosu Plugin is the way to go.

Within the last few years JSON has become the wire protocol of choice and, more generally, the preferred structured data format over XML. For instance, most REST web service APIs speak JSON as the lingua franca between web servers and clients. Thus, as an API producer/consumer Gosu is motivated to provide top-notch JSON support. Here I’ll cover some exciting new JSON features in the up coming Gosu release. Hint: We made JSON statically typed. Shhhhhh.

As Gosu programmers we’ve been using functional programming now for several years. Finally Java 8 brings its own style of functional programming with a combination of new features: Lambda expressions and Functional interfaces. We introduced these concepts in What’s New with Gosu’s Java 8 Support. If you haven’t already read that article, it’s probably better to before continuing with this one; concepts and features explained there are assumed to be understood in this article. Here I’ll cover a little more on the subject, and focus more on the benefits of Gosu’s function types. Then I’ll show how a generic structure type can be more suitable in some situations than a function type. Finally I’ll introduce a cool new feature that adds extra type-safety to Gosu generics without compromising usability.

One of Gosu’s many advantages over other JVM languages is that sources are dynamically compiled to bytecode at runtime - no need to run javac, make/rebuild the project or waste time troubleshooting why sources and class files were somehow out of sync.

Our current platform is moving to the brave new world of Java 8, which is the Java a lot of us have been waiting for. Of course all the excitement over this release is focused on the long awaited Lambda Expression; most of the other new language features serve Java 8’s more general goal of supporting functional-style programming via lambdas. As avid Gosu programmers we’re all preconditioned to these “new” concepts. Here we compare lambdas with blocks and cover Gosu’s support of Java 8’s new language features. Please note we don’t intend to provide a tutorial for Java 8 language features here, please read What’s New in JDK 8 for comprehensive coverage of Java 8 features if you aren’t already familiar with them.

Type parameters defined on Gosu generic types are reified, meaning their types are fully recoverable at runtime like other first-class types. Since the JVM does not support this feature, Gosu’s compiler is forced to implement it indirectly. This poses a performance problem I’ll address here along with a recent solution we’re currently experimenting with.

Static typing is the lifeblood of Gosu. But in rare situations it gets in the way or just isn’t appropriate for the problem at hand. For those rare circumstances dynamic typing may be more desirable. To that end we introduced rich dynamic typing features in Gosu.

Gosu is a statically typed language employing a Nominal type system, which generally means type assignability is based on declared type names. For instance, in Gosu a type is assignable to interface, Foo, only if it declares Foo in its hierarchy. Another form of static typing, called Structural Typing, determines assignability based on declared type features. Roughly a type is structurally assignable to Foo if compatible versions of all Foo’s methods and properties exist in the type – the type doesn’t have to formally declare that it implements Foo. While this method of type comparison is more involved and carries with it performance penalties, it is much less rigid than nominal typing because it measures a type based on its capability, not its name. Several newer languages acknowledge this flexibility and now incorporate structural typing into their type systems, among them are Go, Scala, and TypeScript. The Gosu team is inspired by their efforts and is motivated by recent demand to integrate structural typing into the language.

Alrighty! Time for a relaunch! We have ported the Gosu web infrastructure over to the wonderful web hosting
provided by Github, and plan to have a lot more content and programming goodness available to the Gosu hordes
in the coming months.

The Gosu team is happy to announce the official release of Gosu 0.10.3 and Gosu Plugin 3.3 for IntelliJ 12.
IntelliJ 13 support is not complete yet but we wanted to make a new release to have early feedback on the new rich features of the language.
In the next release we will improve those features based on your comments and provide proper documentation