I cannot recommend strongly enough not to use Eclipse for Scala
development. Until the whole plugin mess (which has been ongoing as
long as I've been part of the Scala community) is cleaned up, Eclipse is
just plain a bad choice to do Scala development with.
Sorry.
Come to think of it, there isnt really any IDE support yet is there?
Im using compiler terminal and Textmate and it works spiffingly
Does anyone want to maintain a branch of lift that compiles with Scala
nightlies?
Advantages:
* You can write lift apps with the Eclipse plugin
* lift will be nearly automatically be ready for new Scala releases
Disadvantages:
* You'd have to periodically merge in changes from master, but git
should make that fairly painless
* Scala nightlies might not be the friendliest thing to work with
--j
Why does there need to be a branch?
You would want the trunk to keep
up with the compiler, so why not compile with Scala nightlies as part
of the regular build/test process? Code breaking Scala changes should
be too rare now for that to be a lot of work, and what work there is
will likely pay off in full when it comes to supporting the next
compiler release.
As a free byproduct, we would get lift nightlies for the adventurous
that are compatible with the Eclipse plugin.
--j
Eric, is it feasible to keep a branch of Specs tracking the Scala
nightlies? I'll volunteer to help maintain it.
--j
The rabbit hole goes pretty deep, it seems.
I got specs to compile with the Scala nightlies, but again, there are
binary dependencies on scalacheck (and maybe scalatest?), which has no
version compatible with the Scala nightlies, so it throws NoSuchMethod
errors when you try to test it.
I'm kind of pissed right now because I feel like I've wasted an
afternoon, so I'll re-assess the situation tomorrow.
--j
/davidB
Would a beer, a coffee or a hug help?*growl*
Given that, another solution is to make a Scala-nightly-compatible
lift available to people untested. They're already working with Scala
nightlies (unstable) and the new Eclipse plugin (very unstable), so
really, any further instability we add will probably be minimal...
Especially since the same lift code compiles and passes tests under
2.7.1. The odds of a test breaking between 2.7.1 and minimal, and are
equally likely to indicate a bug in the Scala nightlies as they are to
indicate a bug in lift.
</>
In the larger scheme of things, Scala binary compatibility will keep
biting us in the ass.
It generally hasn't been a problem for lift, as lift tends to keep up
with the latest Scala release, as do Specs and ScalaCheck. However,
this means that people -using- lift also have to always use the latest
release of Scala. If they use a previous version of lift, they need to
use the specific version of Scala that that particular lift release
was compiled with. They also need to use binary-compatible versions of
Specs and ScalaCheck.
This has been fine so far... but it becomes a problem as soon as
someone finds a reason to to stick to an old release of something.
Let's say there's a significant change in behavior between Scala 2.7
and Scala 2.8 that makes porting my lift app to Scala 2.8 a
non-trivial effort. It might mean I'm stuck using lift-0.10 (or
whatever the last lift compiled with Scala 2.7 was), even though
lift's latest release is lift-0.15 (or whatever). If I want lift-0.15
features, I have to port the rest of my app to Scala 2.8.
Or suppose there's some change between Scala 2.7 and Scala 2.8 that is
(god forbid) a show-stopper for lift. The rest of Scala-land evolves
to Scala 2.8 compatibility, but lift is stuck with Scala 2.7. Now lets
say there's a major bug found in Specs (also god forbid) fixed in the
latest (2.8 compatible) version of Specs. Unless Specs backports this
fix to their latest Scala 2.7 version, lift's Specs will forever be
buggy.
Now imagine you depend on some Scala library that is no longer being
maintained... If it's open source, you'd better start maintaining it
if you ever hope to upgrade Scala versions. If it's closed source,
you'd better not hope to ever upgrade Scala versions. And if those
libraries have dependencies on -other- Scala libraries and they are
all no longer maintained... Using Scala libraries means risking that
you'll have to maintain the transitive closure Scala libraries.
Scala code projects become hostages to their libraries. At some point
(unless Scala acquires binary compatibility), "well-behaved" libraries
will have to maintain releases for several Scala releases.
lift-0.9-sc2.7.1
lift-0.8-sc2.7.1
lift-0.8-sc2.7.0
lift-0.7-sc2.7.1
lift-0.7-sc2.7.0
lift-0.7-sc2.6.1
My headache grows as O(n^2)
--j