Mitch Pronschinske is a Senior Content Analyst at DZone. That means he writes and searches for the finest developer content in the land so that you don't have to. He often eats peanut butter and bananas, likes to make his own ringtones, enjoys card and board games, and is married to an underwear model. Mitch is a DZone Zone Leader and has posted 2573 posts at DZone. You can read more from them at their website. View Full User Profile

A Call for 'Fresh Scala'

05.25.2010
| 10279 views |
  • submit to reddit
With the GA release of Scala 2.8 getting very close, David Pollak, the creator of the Scala-based web framework: Lift, has announced a Scala community initiative that  will have an equally large impact on Scala developers.  The Fresh Scala Initiative aims to address the issue of version fragility in the ecosystem.  You may have heard that Scala 2.8 is not binary compatible with the 2.7 branch.  Therefore, some community members have banded together to maintain a repository and provide nightly builds of popular Scala library collections to build against Scala 2.8.  

Pollak clearly explained the reasoning behind this new initiative:

"As traits change, the classes that depend on those traits "break" unless they are recompiled.  This means that as Scala grows and evolves, all the libraries that sit on top of Scala must be recompiled against the latest version of Scala.  This has presented a significant challenge as Scala 2.8 has evolved.  Each of the layers necessary to compile libraries (e.g., Scala -> ScalaCheck -> ScalaTest -> Specs -> Lift) must be compiled against the same version of Scala.  Because of this issue, it's been challenging to keep the growing number of Scala libraries up to date with Scala 2.8."

Here are some points on how the Fresh Scala initiative works:

  • Paul Phillips maintains the "Fresh Scala" branch of Scala in his GitHub repository.  He will merge stable trunk changes into the Fresh Scala branch.
  • The Scala Tools build system will pull changes from this repository and build "Fresh" versions of Scala as Paul applies patches to this branch.
  • The following libraries will be built against the Fresh version of Scala: Akka, Lift, ScalaCheck, Scala Modules, ScalaTest, ScalaZ, Simple Build Tool, and Specs.
  • If any of the dependent libraries fail to compile and/or pass tests, the library maintainers will make reasonable efforts to fix their code within 24 hours.
  • Every Sunday night (Pacific Time), a Fresh Milestone will be released of Scala and the above packages.
  • The snapshot and milestone releases will be available via Maven, Ivy, SBT, etc. in the scala-tools.org maven repository.

The benefits to the Scala community will be three-fold:

  • Scala will be continuously tested against popular libraries.
  • There will be better feedback into the EPFL about the status of the Scala language.
  • The weekly stream of fresh milestones will allow bleeding-edge applications to be in sync with Scala 2.8 (and other pre-release versions).  More extensive testing of frameworks, libraries, and apps will be the result.

By coincidence, DZone asked Pollak many weeks before the announcement about his hopes and dreams for the future of Scala and its ecosystem:

"I think 2.8 has just scratched the surface of what can be done with higher kinded types and implicits.  I think that there are a number of places that Scala can grow to give library authors more flexibility to deliver libraries that look and feel more like dynamic language libraries.

In terms of the ecosystem, the biggest thing I see is Scala consultancies popping up and some of the larger consulting shops starting to practice Scala.  Ultimately, no language can reach mainstream until you can find an arbitrary number of coders, otherwise the risk of using the language is too great."



Pollak says you can keep track of the initiative on the Google group page.  Over the next few weeks the Fresh Scala contributors will build out the infrastructure and start releasing builds.  An announcement will go out when everyone can start using the builds.