The current version of
AnyEvent::Mojo is failing some tests. The
Mojo API that I was using changed yet again and I don't have the tuits to fix it right now. I'll explain how we got here, what are the next steps, and finally I'll comment on lessons learned.
A long, long time ago…
When I wrote AE::M, I was looking for a way to do long-polling in Perl, with decent performance and cool stuff like epoll/kqueue support. At the time, the only solution might have been
POE, but I have other problems with that module, so I decided I wanted a
I went looking for a HTTP-stack that I could extend and found Mojo. The code was working and ready in a afternoon, and I was happy.
But then we had the famous 0.991250 release. A lot of backwards incompatible changes, and AE::M broke. I was caught at a bad time and could not update my own module for some weeks. In the Changes file, Sebastian explained why he broke backwards compatibility and that it would be the last time before 1.0; so I finally found the time and updated my code.
CPAN Testers was giving me green lights once more, and I was happy.
Until 2 months later that is, when we got the new
Mojo::IOLoop code. AE::M broke again, and its broken since then. The place where I was using AE::M needed some fixes, and the work to adjust my code to the new
Mojo is not as simple as it was the first time around.
So I took the dirty way out: included the last pre-
Mojo::IOLoop code with my project, implemented the new features, and shipped. Not pretty. At all.
Meanwhile, in a distant planet, miyagawa was busy changing the Perl landscape with regards to HTTP integration. He wrote the
PSGI spec, and the
Plack toolkit. It is a wonderful piece of work, and the Perl Web Server of choice.
And after some API work, with the help of nothingmuch, it included a very decent support for asynchronous HTTP servers, including all the bits to make long-pooling work right.
Then in December, we got
Mojo::Server::PSGI, native support for
Right now, I'm waiting for the next release of Mojo, and then I'll immediately release a new version of AnyEvent::Mojo, deprecating it.
With the native support for
PSGI, there is no reason to maintain the AE::M interface, just use the
AnyEvent::HTTPD::PSGI when miyagawa finishes the cleanup he talked about).
But I will update the AE::M one last time to make it compatible with
Mojo::IOLoop, as soon as I have the time. I don't want to leave it broken.
In the meantime, if you are using AE::M, I suggest that you bundle an earlier version of
Mojo. I'll run a
git-bisect to figure out which version is best and update this post.
Not sure. On one hand, it is a version below 1.0 so we can expect some breakage.
On the other hand, the Changes file mentions that no more backwards incompatible changes would be made to
Mojo before 1.0.
I still like the
Mojolicious MVC framework and the dispatcher behind it, but I fear the
Mojo stack and deprecation policy of the project now.
For now, all my async work is moving to
Plack. I still need a asynchronous MVC framework, but I can wait a bit, or even write a very simple one if need be. Maybe steal code that I like from the others.
But I'm back to
Catalyst (and I plan to talk about my feelings about the attribute-based dispatcher soon) because I feel safer. A lot safer. I know that there are other people out there that depend on
Catalyst every day and in with big sites, much bigger than mine. And I trust the Cat developers not to break my code.
I do hope to see
Mojo 1.0 soon, and I hope it goes well for all the gang at
#mojo, but I will also look for some form of backwards compatibility policy before I even mention
Mojo ever again in my presentations about Perl.