So I've been playing around with Scala lately, which is a
java-compatible language that can be roughly described as "Java, but
not sucking (as much)".
Anyway, I thought I'd give their web framework a try. Lift (neé Scala
with Sails) is the usual MVC-like deal we've come to expect.
With Perl, Catalyst is the leading web framework, and people do tend
to complain that it installs half of CPAN to run.
I was interested to see what approach Lift took.. would be an
all-in-one package, like Jifty, or would it leverage lots of sub
projects? How does the Scala/Java ecosystem handle dependencies?
Well, initially it all seemed very easy. Mac OSX comes with maven
pre-installed, which meant I didn't even need to download or install
*anything* to try out Lift.
This confused me, and I spent a while trying to find out what to
download, sure that I needed to *do* something.
Eventually just ran the command from the tutorial, and presto, it went
off and downloaded a bunch of stuff for me. Ah.
Still, that's easier to get up and running than Catalyst. (which is
"cpanp i Catalyst::Devel .... wait a long time .... catalyst.pl
MyApp")
I then went to run the app immediately, thinking, ah, that was quick.
But it was at *this* point that it decided to automatically check and
update every dependency.
Hah! It had to happen eventually.. what felt like an age passed as
half of scala-tools.org was downloaded, and eventually the app
launched.
The thing that I found interesting was this choice for Lift to
auto-update your dependencies. I don't know how often it does it, I
know it isn't every time you subsequently run it.
How would that work in the Perl ecosystem?
I mean, imagine if Catalyst updated every single CPAN module on your
system, once a day?
I think we'd laugh at the concept.. It would be plagued by
incompatible updates hurting each other, or by one duff update
screwing the rest, or by circular dependencies getting stuck.
(As someone who has genuinely attempted to use cpanplus to auto-update
*every* installed module, regularly, I know it just doesn't work. It's
not hard to script it, but it's hard for it to not break your system
constantly.)
But apparently this is acceptable behaviour elsewhere. I'm curious
though.. does it suffer from the instability issues, or does it Just
Work?
If the Perl behaviour was changed to always-auto-update, would there
be a short period of pain, while we fixed stuff, but then a golden age
of reliability? Or is there something inherent in Perl's community
and/or release structure, that causes the pain?
Just musing..
Toby