Friday, February 20, 2009

New Mailing List Joose Commits

To decrease the traffic on our main mailing list, we created a new list only for commits and issue changes:

Tuesday, February 17, 2009

A CPAN for JavaScript

While there have been attempts to create a CPAN (comprehensive module directory) for JavaScript it has failed just as this has failed for pretty much every language but Perl.

In the last days I've been thinking about a new approach to create such a repository while also solving the problem of high performance JavaScript loading at the same time:
  • Create a central site (such as an application hosted on Google AppEngine) that does the following things:
  • Host any JavaScript file published to it
  • Serve as a reverse proxy server for JS files hosted on other web servers
  • Provide a simple mechanism to associate dependency and versioning meta data with JS files
  • Make any combination of JS files downloadable through a simple URL that serve all data in a single request
This is, of course, only a very rough sketch. The central idea is that sources are never actually installed anywhere but always downloaded on demand when an application requests them. While creating its own set of trust-issues and security holes this would easily solve the installation problem by eliminating it :)

What do you think?

Next Steps for Joose

While Joose 2.0 is happily living in the wild here is a look out to what is up in the days ahead:
  • Nickolay has in a tremendous effort split up the inner workings of Joose into more accesible parts. The basic strategy was to identify those parts which are absolutely neccessary for bootstrapping Joose (make it self-hosting) and then adding features step-by-step in further bootstrapping steps. This will make it easier for other contributors to understand the Joose guts and make their own contribution. The Joose test suite is still passing all tests so their should be no user visible changes.
  • Nickolay then continued to improve the module system making is reentrant and stackable. Modules can now be put into one another, can also be classes and can be loaded asynchronously
  • Based on this work Nickolay then proceeded to create an asynchronous dependency loader for Joose components and now works on making something that might become a central repository for Joose modules.
As a summary: Big thanks to Nickolay :)

Meanwhile me and my team are happily hacking on a large public website that is using Joose to represent models, views and controllers on the client side and my colleagues are using Joose on the server side inside Demandware (which is in turn using Rhino) to build web shops.

Sunday, February 1, 2009

Joose 2.0 "death of parseInt" released

The Joose team is very proud to announce the release of Joose 2.0.

Joose is a self-hosting meta object system for JavaScript with support for classes, inheritance, mixins, traits, method modifiers and more.

Joose makes object-oriented programming with JavaScript easy, declarative and very productive. The Joose meta-object system is multi-paradigm. It supports class-based and prototype-based programming styles as well as class-based inheritance and role-based extention.

The Joose framework has been successfully used in multiple production systems for twelve months now and has been proven to be very stable. Joose is being tested using an automated unit-test suite that is being run in all major browsers (Firefox, IE, Safari, Opera and Chrome).

To get started with Joose we recommend to read the getting started guide.

Major News

Support for types and type coercions in attributes and method signatures
JavaScript purists might find this a little disturbing but Joose now supports type declaration. Joose types, however, are quite the opposite of static types, because they try very hard to convert everything you throw at them to the type you want. parseInt is dead!
Here is the documentation.


  • Builtin support for turning a class into a singleton
  • Support for Rhino without need for special configuration
  • The default namespace for types (which used to be experimental) is now Joose.Type
  • Experimental support for multi method dispatch. Examples.
  • Made integrating Joose with other class builders easier.
  • Fixed type checks for arrays (thanks Silvan).
  • Fixed an issue when overriding getters and setters defined in a super class.
  • Improved error messages when defining properties of classes, etc. but passing null to the property (happens easily when you have a typo in the last part of a name spaced identifier).
Other News
Joose has been carefully tested to play well with other JavaScript frameworks like jQuery, Prototype and YUI and with both browser based and stand-alone/server-sided JavaScript engines. See this page or a full list.

Have fun playing with Joose.