It appears I accidentally kicked off the next round of the Moose performance flamewars. And this time it's dragged Padre in as well.
It's funny how in any significantly large battle of words, it's the zealots on the outside that make the most noise. The people who actually run the projects involved and how the most knowledge about the situation are generally the most calm about the situation.
Stevan did bring up one good point I hadn't noticed before though, and that is that Moose is rather "OH MY GOD MY RAM!!!" large in size.
Last time I looked at Moose, it was more like 3-4meg in size. That's fairly big, but falls into the same size range as CGI.pm, CSS.pm, DateTime, Template Toolkit, and a number of other packages that comprehensively solve a fairly complex topic (and mostly avoid getting too bloated). These are also the kinds of modules that make the best targets for ::Tiny modules. But I digress.
Moose has changed over time, mostly improving, and in startup terms at least keeping to a reasonable budget as it grows in size.
The last time I took more than a cursory look at it, in November 2007", is was bloaty, slowish, slow to start, but very correct and convenient for writing big persistent applications if you didn't mind the speed hit.
As mst asks me to remind people, my previous assessment is now wrong. Moose isn't slow, although the rest are still true. But the Moose team have got their priorities absolutely in the right place.
You absolutely have to prioritise important improvements for your core demographic first. And since the core demographic for Moose is big, complex, persistent applications, it absolutely makes sense to get Moose fast first.
If I rerun the my old Object::Tiny vs Moose::Tiny benchmarks, I get the following for a simple 5-accessor class.
# Object::Tiny vs Object::Tiny::XS vs Moose::Tiny # Note that I had to do __PACKAGE__->meta->make_immutable to # the Moose::Tiny class, because it doesn't to so itself.
# Based on the following Object::Tiny class. use Object::Tiny qw{ one two three four five };
D:\DOCUME~1\ADAM~1.KEN\Desktop>perl moosemark.pl Rate moose_all xs_all tiny_all moose_none tiny_none xs_none moose_all 82795/s -- -54% -54% -72% -90% -92% xs_all 178763/s 116% -- -1% -39% -79% -83% tiny_all 179759/s 117% 1% -- -39% -79% -83% moose_none 294985/s 256% 65% 64% -- -65% -72% tiny_none 842460/s 918% 371% 369% 186% -- -21% xs_none 1066098/s 1188% 496% 493% 261% 27% -- (warning: too few iterations for a reliable count) Rate moose_get tiny_get xs_get moose_get 1730104/s -- -11% -32% tiny_get 1937984/s 12% -- -24% xs_get 2557545/s 48% 32% --
Just STFU
brian_d_foy on 2009-09-03T21:34:25
A considerable portion? Really? Most people I run into using Perl don't even know there's a CPAN.
And, isn't this the same tired argument about why we should be using whatever the hot new technolgy is? I've lost count how many times I've been told this about some Perl module or framework. Indeed, if that's really what you believe, why do you even use Perl? You should be using Java, since even more of the world uses that. And Windows too. And
..., and ..., and ... Why do you care what Adam decides to use or not, or how he spends his time? At least he has a coherent argument. You merely whine like a fanboi without responding to any of the actual issues Adam raises and that Moose people acknowledge. Moose might be a great project, but the fucking fanbois like you are enough to keep me away (despite how cool the core Moose people are).
The important thing here is that Adam is making an actual economic analysis of what he gives up for what he gets, and making a reasoned decision based on it. His economic inputs might be different from yours, but that doesn't mean he's wrong (or that you are right).
Zealotry is bad Mmm'kay?
perigrin on 2009-09-04T02:05:24
You merely whine like a fanboi without responding to any of the actual issues Adam raises and that Moose people acknowledge. Moose might be a great project, but the fucking fanbois like you are enough to keep me away (despite how cool the core Moose people are).
This is just sadly ironic. You're saying you are letting the community decide for you what you should and shouldn't explore technically without taking the project itself into account. We have all had our fanboi moments. But, as a Moose developer, I will freely admit that telling someone "it doesn't matter what you think" isn't helpful, Even when people like stevan or I do it in jest.
It seems however that this whole thread has been a series of people telling other people that what they can and cannot do in a public forum. You shouldn't let over zealous comments keep you away from what I consider to be a wonderful project, just as Dave shouldn't let over zealous downstream developers decide what he can and cannot do for his own modules, and Adam and the Padre team should not let over zealous developers tell him how to run his project.
Re:Zealotry is bad Mmm'kay?
brian_d_foy on 2009-09-04T05:56:33
I think you don't understand irony. I'm not letting anyone choose for me. I'm big enough to make my own decisions.
Re:Zealotry is bad Mmm'kay?
perigrin on 2009-09-06T06:30:10
Irony (from the Ancient Greek εἰρωνεία eirōneía, meaning hypocrisy, deception, or feigned ignorance) is a literary or rhetorical device, in which there is an incongruity or discordance between what one says or does and what one means or what is generally understood.
The incongruity between what you said:
the fucking fanbois like you are enough to keep me away
and what you mean
I'm not letting anyone choose for me. I'm big enough to make my own decisions.
Seemed ironic. Especially in the context of a thread kicked off by Someone (Adam) telling someone else (Dave) what to do, and in response to someone (Hobbs) telling someone else that their opinion won't matter in the long run (Adam).
You and I have talked about Moose in the past, and discussed it's faults, I think you had valuable input. I'd hate to have people intentionally or unintentionally drive you away from Moose for reasons other than it's technical merits. Which was the entire point of my comments before, there was no offense intended.
Re:Zealotry is bad Mmm'kay?
zby on 2009-09-04T08:04:53
"It seems however that this whole thread has been a series of people telling other people that what they can and cannot do in a public forum" - that is a good characterisation of the circumstances - but I think we need to go a bit deeper here and explain why it is now that people started to do that (http://en.wikipedia.org/wiki/5_Whys - anyone?). Yes - CPAN contributors should be free to choose any way they want to code their own modules - but on the other hand those that add these modules as dependencies to their code should be secure that a new version of these dependencies will not render their code unusable. This situation is pretty much the same as with API deprecations and calls for a similar measure - explicite declarations from the module authors.Re:The important thing here
sigzero on 2009-09-04T00:05:53
I wonder if something like the Badger framework (Andy Wardley) would give most of what you want with Moose but with better numbers. I have never seen them compared. The benefit I see is that Badger doesn't have outside dependencies so would be easier to "ship" with Padre.
Just a thought...
Re:The important thing here
perigrin on 2009-09-04T01:54:00
Last I looked at it Badger had a totally different set of goals than Moose. Badger was the distillation of what Andy Wardley had been using for building Perl applications while Moose is specifically about building a good MOP based Object Framework for Perl.
And playing devil's advocate for a second, what is the difference between adding one up stream module, and adding 12 that install relatively cleanly (both according to deps.cpantesters.com have a > 90% chance of installing clean on 5.10.0)? In both cases you've handed control over to an external developer, so the horses are already out fo the barn.
Re:The important thing here
chromatic on 2009-09-04T03:39:02
Modules you install for yourself are necessary and sufficient and good examples of code reuse.
Modules your dependencies install for you are bloat.
I'm not sure what happens if modules your dependencies need are modules 1) you already have installed for yourself or 2) modules you've written and distributed, but it's a good first approximation of a definition.
Re:The important thing here
Hercynium on 2009-09-04T22:48:02
Personally, I take a couple of things into account when I decide whether or not extra modules constitute "bloat".
First, how likely are these modules to fail to install on the target platform(s)? If they are going to make my code harder for the sysadmin (often myself) to move, port, and maintain in the future they may not be worth pulling in to my dependency chain.
Second, how does this module perform given how I will be using it in my code? How does it perform compared to it's alternatives?
Third, do I need any of these dependencies for anything else in the app? Are they good enough that I would use them instead of *their* alternatives? That's usually not a problem for me, but I *do* think about it.
I'm the type of programmer who will spend an extra hour or two writing code several ways, then selecting the one that I believe best reflects my overall needs. Yes, I throw out *lots* of code. I don't care.
The CPAN already provides me with excellent tools to gauge how using dist/module will affect my program's portability and to some extent maintainability. CPANTS also lets me get at a glance some useful info on kwalitee and that factors in as well.
The only thing not already handed on a silver platter to Perl developers are benchmarks - and I don't expect that to change any time soon! (would be nice for CP6AN though *hint hint*)