I've been hankering to learn a new language recently. The only problem is which one to learn.
To learn a new language you need to have problem to solve in it otherwise you're just spinning your wheels and there's no motivation. This sort of rules out Lisp and SmallTalk for me.
I really don't have that much use for Ruby since I don't do web stuff, I've already done at least one large project in Python (and I didn't really find it to my taste although I realise that's a personal thing. Part of it, however, might have been that it wasn't sufficiently better/different from Perl to make it worth giving up all those years of knowledge and CPAN).
I embraced the strange beauty of Miranda and Haskell over a decade ago and the even stranger beauty of Prolog about a year later.
I've been aching to have a go at D for a while but haven't had a project to do in it - although I've been pondering either redoing my SWF dissertation and Gravel stuff or, alternatively, writing a compositor, possibly with Shake plugin compatability (this would especially useful since the fucking Apple fucks decided to End Of Line it because no-one used it on their hardware despite them dropping the price to $499 for OSX and keeping it at ~$5000 a seat on Linux. Assholes).
However one of those is retreading old ground and the other's kind of an overly ambitious project.
I thought about C# as well - maybe implementing this stuff that I wrote about 2 and a bit years ago but, well, it's not really that different from Java is it?
A few people have been talking about CouchDB - a transactional, non relational DB type affair written in Erlang.
Erlang is pretty cool - a concurrent, distributed, functional programming language based around message passing with a bunch of nifty features designed to be fast, fault tolerant and with high availability in minds (code can be replaced without restarting the system) and which, because its functional, can be reasoned about.
I've also been using ActiveMQ a fair bit recently. I hate it. It sucks (for me at least, maybe I'm just unlucky) and seems to introduce new regressions at every point.
Thinking about it most of the features you want from a PubSub system - HA, guaranteed delivery, distributed, concurrent - you get for free in Erlang. Throw in CouchDB for the transactional stuff and half the hard work is done for you.
It's not an unprecedented idea either - ejabberd, the XMPP server used to run jabber.org is written in Erlang.
Feature set wise I'm thinking fairly basic - multiple master-master brokers with fail over, queues (i.e only one subscribed consumer out of many will get a message), topics (multiple subscribers all get a copy of the message), optional guaranteed delivery and then maybe later point-to-point communication.
Something akin to Rendezvous's globbed subjects or JMS's Message Selectors would be cool too.
The only issue is how other languages would use the system - a simple network protocol or HTTP would work but it would be nice if it could emulate JMS or STOMP as well.