Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Кто нибудь использует на продакшене Moose


Автор: DaemonSuw 19.5.2009, 16:04
Заинтересовался модулем под названием http://search.cpan.org/~drolsky/Moose-0.79/lib/Moose.pm
http://habrahabr.ru/blogs/perl/59512/ - небольшой блог на русском
А кто нибудь из тут присутствующих использует его в своих проектах (тест, продакшен), на первый взгляд - вещь то стоящая - полноценное ООП на перл ;)...
и ваше мнение? стоит юзать?
скорость тут:
http://pichis-blog.blogspot.com/2009/02/how-fast-or-slow-is-moose.html

Автор: xoma 20.5.2009, 09:10
Сейчас ставил последнюю версию Catalyst (с ним пока не работал), так вот, в качестве одной из зависимостей он тянет как раз Moose. Так что наверное каталист уже использует или планирует в ближайшее время перейти на Moose.

Автор: KSURi 20.5.2009, 11:15
Для проектов "с нуля" использовать можно, возможно, даже нужно.
По идее, таким же образом можно "обернуть" legacy-код, чтобы придать ему свежести) Но что-то мне подсказывает, что себе дороже получится.

Автор: DaemonSuw 20.5.2009, 12:24
xoma, да вы правы новая версия каталиста заточена под Moose... я думаю не спроста)))

delta list ;)
Цитата

Consequences of the Moose back end

    * Components are fully compatible with Moose, and all Moose features, such as method modifiers, attributes, roles, BUILD and BUILDARGS methods are fully supported and may be used in components and applications.
    * Many reusable extensions which would previously have been plugins or base classes are better implemented as Moose roles.
    * MooseX::MethodAttributes::Inheritable is used to contain action attributes. This means that attributes are represented in the MOP, and decouples action creation from attributes.
    * There is a reasonable API in Catalyst::Controller for working with and registering actions, allowing a controller sub-class to replace subroutine attributes for action declarations with an alternate syntax.
    * Refactored capturing of $app from Catalyst::Controller into Catalyst::Component::ApplicationAttribute for easier reuse in other components.
    * Your application class is forced to become immutable at the end of compilation.



KSURi, опыта большого нету, но рискну спросить, - а что мешает продолжать писать уже с помощью Moose ;0)... ведь обратная совместимость есть, то есть все методы мы отнаследуем, а дальше юзать и писать по полной ооп парадигме... и потихоньку рефакторить тяжелое наследство системы... Конечно у системы появится 2 стиля кодирования так сказать до и после)... но это ведь в конце пропадет, если заставлять себя рефакторить старые классы...

Автор: gcc 29.7.2009, 03:05
тоже интересно, а в чем приемущество?

что не хвататет в обычном ООП + Ассессоры и т.д. чтобы его использовать? 
там есть еще много други модулей и mooseX, но оно как-то на обычный php похоже, только по другому сделано...

Автор: chorny 29.7.2009, 03:17
Цитата(gcc @ 29.7.2009,  03:05)
тоже интересно, а в чем приемущество?

Преимущество в простоте и читабильности. Также Class::MOP даёт возможность полноценной интроспекции.

Я использовал в работе упрощённый вариант - Mouse.

Кстати роли есть ещё только в Perl 6 и Smalltalk.

Автор: gcc 29.7.2009, 04:18
понятно, а есть ли где-то реальная программа с moose чтобы ее скачать и посмотреть исходники?


Автор: KSURi 29.7.2009, 13:06
gcc, тонны кода есть в блогах учавствующих в Iron Man.

chorny, роли - это ведь по сути mixin. Так что можно сказать, что и в они Python есть, и в Ruby.

Автор: gcc 21.9.2009, 21:42
KSURi

http://www.google.com.ua/#hl=uk&source=hp&q=iron+man+%D0%B8%D0%B3%D1%80%D0%B0&meta=&aq=&oq=Iron+Man&fp=bf607cbc1d1ce7ba
1) где это? дайте ссылку? хотел исходники посмотреть

2) и кто видел на каталисте среднюю или большую программу? я нашел только одну...

3) еще хотел спросить где есть дискусии англоязычные там где много народа, никто не участвует в таких?

Автор: chorny 21.9.2009, 22:00
Цитата(KSURi @ 29.7.2009,  13:06)
chorny, роли - это ведь по сути mixin. Так что можно сказать, что и в они Python есть, и в Ruby.

А mixin по сути - это множественное наследование. Но разный подход: роли позволяют делать более строгую проверку и переименование. Кроме того их можно применять динамически.

Автор: KSURi 21.9.2009, 22:43
Цитата(gcc @  21.9.2009,  21:42 Найти цитируемый пост)
1) где это? дайте ссылку? хотел исходники посмотреть

гуглить на iron man challenge+perl

Цитата(gcc @  21.9.2009,  21:42 Найти цитируемый пост)
2) и кто видел на каталисте среднюю или большую программу? я нашел только одну...

http://dev.catalystframework.org/wiki/catalystpoweredsoftware

Цитата(gcc @  21.9.2009,  21:42 Найти цитируемый пост)
3) еще хотел спросить где есть дискусии англоязычные там где много народа, никто не участвует в таких?

практически у любого крупного проекта есть список рассылки, адрес обычно можно найти на оф. сайте или в документации

Автор: chorny 21.9.2009, 22:48
Цитата(gcc @  21.9.2009,  21:42 Найти цитируемый пост)
еще хотел спросить где есть дискусии англоязычные там где много народа, никто не участвует в таких?


perlmonks, stackoverflow, use.perl.org, irc://irc.perl.org , irc://irc.freenode.net/#perl , списки рассылки модулей и проектов CPAN и др., news://nntp.perl.org и много других мест

Автор: gcc 21.9.2009, 23:26
Цитата(KSURi @ 21.9.2009,  22:43)
гуглить на iron man challenge+perl

понятно по гуглил нашел блоги, я имел ввиду средние или большие программы на moose....

на catalyst нашел несколько, но мало, несколько ссылок не работают

Добавлено через 45 секунд
chorny, я не люблю это IRC или рассылки, обычных форумов нету?

Автор: mvsgt 21.9.2009, 23:40
У меня довольно ответственная система в продакшне на Moose (кроме автогенерируемых файлов - 82 .pm, >400 килобайт кода с комментариями). Но я не очень им доволен, хотя если сравнить голый перл и Moose - это земля и небо.

DBIx::Class на Moose, кстати. И некоторые другие на него переходят.

Потери в производительности посчитать трудно, так как многим вещам аналогов при обычном подходе нет. Например, проверка параметров функций - Param::Validate превратился в гораздо более мощный инструмент

Код

sub updateRate {
    my $self = shift;
    my ($imonum) = pos_validated_list( \@_, { isa => 'IMOnum_Type', optional => 0, }, );
...
}


Плюс контроль за переменными класса - кто знает, сколько из-за его отсутствия остаётся спящих ошибок. А вообще вся предесть Moose проявится только в MooseX : : Declare и подобных модулях, но они, скорее всего, никогда в продакшн не выйдут.

Автор: gcc 21.9.2009, 23:55
да надо попробовать... я только что посмтрел программу на moose, но ничего особенного там не увидел...

интересно бы на реальных примерах увидеть преимущество...


Автор: mvsgt 21.9.2009, 23:58
Цитата(gcc @  21.9.2009,  23:55 Найти цитируемый пост)
не могли бы вы перечислить коротко что там особенного?


Посмотрите на habrahabr.ru - там есть пара статей. И в документации можно всё увидеть, в примерах к Moose например. 

Автор: gcc 22.9.2009, 04:14
может кто-то обяснить про Role в moose?
http://search.cpan.org/~drolsky/Moose-0.91/lib/Moose/Cookbook/Roles/Recipe1.pod

или я не понял что-то или я не понял зачем это надо, как буд-то какой-то бессмысленный набор слов в документации...

http://www.gossamer-threads.com/lists/catalyst/

Автор: KSURi 22.9.2009, 09:52
Цитата(mvsgt @  21.9.2009,  23:40 Найти цитируемый пост)
Плюс контроль за переменными класса - кто знает, сколько из-за его отсутствия остаётся спящих ошибок. А вообще вся предесть Moose проявится только в MooseX : : Declare и подобных модулях, но они, скорее всего, никогда в продакшн не выйдут.

У меня есть в одном месте MX::Declare с мульти-методами (не самая важная часть) в продакшене. В принципе не жалуюсь (только одно нарекание - почему-то часто варнинги пишет в логи, пока не разобрался как убрать). Секундная задержка видна при старте сервера, в остальном различий не заметил.

Автор: gcc 23.9.2009, 17:37
подскажите какая отладка есть для moose??

Data::Dumper НЕ смотрит объект, там используется "делегирование" между классами
Код


use Data::Dumper;
print Dumper($c->request->header);



в google не нашел

http://www.google.com.ua/#hl=uk&ei=kjG6StiNFIWqsAbZl52RBA&sa=X&oi=spell&resnum=0&ct=result&cd=1&q=%D0%BE%D1%82%D0%BB%D0%B0%D0%B4%D0%BA%D0%B0+moose&spell=1&fp=818c551f15cdb9b3

есть только для ролей 
http://search.cpan.org/~fayland/MooseX-Dumper-0.02/lib/MooseX/Dumper.pm

Автор: ginnie 23.9.2009, 17:43
gcc, а что Вам 

Код

print Dumper($c->request->header);


должен показать? Объект-то ведь $c->request. Попробуйте

Код

print Dumper($c->request); 

Автор: gcc 23.9.2009, 18:02
ginnie
но не видно                                      }, 'HTTP::Headers' ),

Код

$VAR1 = bless( {
                 'protocol' => 'HTTP/1.0',
                 'headers' => bless( {
                                       'user-agent' => 'Mozilla/5.0 (X11; U; FreeBSD i386; en-US; rv:1.9.0.11) Gecko/2009070320 Firefox/3.0.11',
                                       'connection' => 'keep-alive',
                                       'keep-alive' => '300',
                                       'cache-control' => 'max-age=0',
                                       'accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
                                       'accept-language' => 'en-us,en;q=0.5',
                                       'accept-encoding' => 'gzip,deflate',
                                       'content-length' => '45',
                                       'host' => 'localhost:3000',
                                       'accept-charset' => 'ISO-8859-1,utf-8;q=0.7,*;q=0.7',
                                       'content-type' => 'application/x-www-form-urlencoded',
                                       'referer' => 'http://localhost:3000/'
                                     }, 'HTTP::Headers' ),
                 '_context' => bless( {
                                        'request' => $VAR1,
                                        'stash' => {



Код

    use Data::Dumper;
     print Dumper($c->Headers); 


Код

"Can't locate object method "Headers" via package "MyApp" 


тоже самое
Код

    
    use Data::Dumper;
     print Dumper($self->Headers); 


Автор: ginnie 23.9.2009, 18:06
gcc, как это не видно HTTP::Headers? А это что?

Код

'headers' => bless( {
                                       'user-agent' => 'Mozilla/5.0 (X11; U; FreeBSD i386; en-US; rv:1.9.0.11) Gecko/2009070320 Firefox/3.0.11',
                                       'connection' => 'keep-alive',
                                       'keep-alive' => '300',
                                       'cache-control' => 'max-age=0',
                                       'accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
                                       'accept-language' => 'en-us,en;q=0.5',
                                       'accept-encoding' => 'gzip,deflate',
                                       'content-length' => '45',
                                       'host' => 'localhost:3000',
                                       'accept-charset' => 'ISO-8859-1,utf-8;q=0.7,*;q=0.7',
                                       'content-type' => 'application/x-www-form-urlencoded',
                                       'referer' => 'http://localhost:3000/'
                                     }, 'HTTP::Headers' ),

Автор: gcc 23.9.2009, 18:24
ginnie, это вывод отладки после print Dumper($c->request); 

там надо наверное как-то по другому в дампер передать....

в исходниках каталиста сложно разобратся, я не вижу объект класса HTTP::Headers

я думал в что $c или $self, но не видно... там метода Headers

Автор: ginnie 23.9.2009, 18:32
gcc, я, вероятно, как-то непонятно объясняю. Класс HTTP::Request отнаследован от HTTP::Message. У HTTP::Message есть свойство headers, значением которого является объект класса HTTP::Headers. Метода, возвращающего этот объект в классе HTTP::Message нет. Поэтому единственный способ его отдельно посмотреть дампером

Код

print Dumper($c->request->{headers});


Что я теперь непонятно объяснил?

Автор: gcc 23.9.2009, 18:37
gcc, извините, просто не могу разобратся... я забыл написать что хочу увидеть X-Forwarded-For все остальное с ним... (может там что-то другое есть или по другому называется!!)

(я посмотрел исходники $c->request->address он просто определяется по-моиму когда прокси, то определяется айпи из Forwarded)

$c->request->header('X-Forwarded-For')

Код

    use Data::Dumper;
print Dumper($c->request->{headers});


Код

$VAR1 = bless( {
                 'user-agent' => 'Mozilla/5.0 (X11; U; FreeBSD i386; en-US; rv:1.9.0.11) Gecko/2009070320 Firefox/3.0.11',
                 'connection' => 'keep-alive',
                 'keep-alive' => '300',
                 'cache-control' => 'max-age=0',
                 'accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
                 'accept-language' => 'en-us,en;q=0.5',
                 'accept-encoding' => 'gzip,deflate',
                 'content-length' => '45',
                 'host' => 'localhost:3000',
                 'accept-charset' => 'ISO-8859-1,utf-8;q=0.7,*;q=0.7',
                 'content-type' => 'application/x-www-form-urlencoded',
                 'referer' => 'http://localhost:3000/'
               }, 'HTTP::Headers' );



почему в отладке не видно X-Forwarded-For, ip и host ?

Добавлено @ 18:42
ginnie, спасибо, может там убрано из класса это (X-Forwarded-For, ip и host) скорее всего 
посмотрю еще исходники....

Автор: ginnie 23.9.2009, 19:45
gcc, X-Forwarded-For не видно потому, что он Вашим клиентом не передается. Он передается иногда при работе через proxy-сервер (хотя по идее, proxy должен ставить заголовок Via).
IP в заголовках тоже быть не должно, т.к. он определяется из соединения:
Код

$r->connection->remote_ip();

Автор: mvsgt 24.9.2009, 15:06
Цитата(KSURi @  22.9.2009,  09:52 Найти цитируемый пост)
У меня есть в одном месте MX:smile с мульти-методами (не самая важная часть) в продакшене. 


Я начал с него, но столкнулся с полным неприятием кода на MX:smile Eclips'ом и PerlTidy. Плюс с отладчиками дополнительные проблемы, так что я забил на Declare.

Автор: KSURi 24.9.2009, 16:54
Цитата(mvsgt @  24.9.2009,  15:06 Найти цитируемый пост)
Я начал с него, но столкнулся с полным неприятием кода на MX:smile Eclips'ом и PerlTidy. Плюс с отладчиками дополнительные проблемы, так что я забил на Declare. 

У vim с этим проблем нет) Perltidy не пользуюсь.
Вот проблемы с отладкой, это да - большой минус. Причем это касается и просто Moose, без Declare.

Автор: mvsgt 24.9.2009, 19:38
А у меня стиль набора текста - набирать как придётся, потом нажимать Control-F и всё приводится к стандартному виду. Без этого не получается.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)