From: Rick N. <nae...@gm...> - 2011-04-04 14:20:27
|
First of all, the overhead from Moose is not anything like that of Java. Moose doesn't replace any core parts of Perl. Anything Moose provides you could do without Moose. It just greatly simplifies making objects in Perl. Not all Perl projects need objects, and I'm sure not all of them need Moose. I think the basic idea is take Perl 6 objects and port them to Perl 5 as a module. "We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil". -Knuth A well written event driven home automation program should be much more efficient than the pure perl event loop of Misterhouse. Especially if we use a high performance C event library like libev (through AnyEvent and the EV module). I can't prove this, but I aim to try! If using Moose means cleaner code and a tighter implementation it could mean a net gain in performance. Otherwise, we can profile the program and work on it until it is fast. I am running my home automation on a 10 year old machine and I expect old machines are typical. On to your question... I can't point you towards any large Moose project. But I would start with Randal Schwartz column on Moose and try his examples: http://www.stonehenge.com/merlyn/LinuxMag/col94.html. The main complaint about moose performance is in startup time. It takes maybe an extra second or two to startup a moose program. This makes sense, you are basically doing some meta-programming and the compiler is perl code rather than c code. For command line programs that is really irritating and this probably explains the complaints about being bloated and sluggish. For an event driven framework that will be running for days, completely irrelevant. Once it is running the hit is pretty minor, although Moose does add some extra checks that slow down object access slightly. If you are looping through a hundred thousand objects you will see a slight hit. Evidently there is also a small memory hit. There is a Moose replacement called Mouse that can be used when the startup and memory hit of Moose is inappropriate, and a newer project called Moo that does the same thing. I don't know much about these but I would not use them personally unless my program was running too slow with Moose (again, premature optimization, Moose is better tested). The Moose developers have also been working hard to remove these performance penalties. Personally I don't use POE. I encourage you to try it, but I really like the AnyEvent route - it is a wrapper around all the other perl event loops (POE and EV for example) that I found a little easier to use than POE. However, a lot of people really like POE. People complain about too many choices on CPAN but I love competition! Rick |