[Moscow.pm] Встреча Moscow.pm

Андрей П. Ковбович akovbovich на gmail.com
Вт Мар 18 22:36:21 PDT 2014


Что касается поддержки mop здесь все написано -
https://metacpan.org/pod/Moo#MOO-AND-MOOSE
Мне кажется в этом преимущество, когда есть выбор обойтись простыми
средствами или подключить расширенный функционал.

> А что помешает запретить?
Вот такая конструкция $obj->{something} = anything.

> Вкратце: везде, где нужно в рантайме оперировать классами - изменять
методы, модификаторы методов, присваивать роли, получать информацию
обо всем этом и т.д.

В этом суть meta object protocol, вот на практике кто этим пользуется и в
какого рода приложениях, в этом мой вопрос. Если это только разработчикам
фреймворков надо, или еще каких-то нишевых вещах, то спрашивается зачем это
в общей практике нужно? Поэтому, считаю, в Moo (Mo, Mouse) есть скорее все
что нужно, нежели "нет вообще ничерта".

> Мы у себя в проекте вполне успешно используем типы, предоставляемые
Moose, созданные на их основе, да и просто вручную.

Было бы хорошо, если бы поделились успешным опытом. В чем профит?

19 марта 2014 г., 2:30 пользователь Ilya Chesnokov
<chesnokov.ilya на gmail.com<javascript:_e(%7B%7D,'cvml','chesnokov.ilya на gmail.com');>
> написал:

> 18 марта 2014 г., 23:28 пользователь Андрей П. Ковбович
> <akovbovich на gmail.com<javascript:_e(%7B%7D,'cvml','akovbovich на gmail.com');>>
> написал:
> > Глянул что нового в Moo появилось: оказывается MOP там тоже есть, правда
> > средствами class::mop.
>
> === README:
>     There is no meta object. If you need this level of complexity you
> wanted
>     Moose - Moo succeeds at being small because it explicitly does not
>     provide a metaprotocol. However, if you load Moose, then
>       Class::MOP::class_of($moo_class_or_role)
>     will return an appropriate metaclass pre-populated by Moo.
> ===
>
> Т.е. Class::MOP используется только если Moose уже загружен (это и по
> коду видно - вызовы только вида if ($INC{"Moose.pm"} &&
> Class::MOP::class_of(...))).
>
> > Аксессоры генерятся через class::xsaccessor, если он
> > доступен.
>
> Круто :)
>
> > Ну а библиотека типов (MooseX::Types?)
>
> А также Moose::Util::TypeConstraints.
>
> > это круто конечно, только
> > мы же про Перл говорим. А в контексте перла никакая библиотека типов не
> > запретит заткнуть круглое квадратным.
>
> А что помешает запретить?
> Мы у себя в проекте вполне успешно используем типы, предоставляемые
> Moose, созданные на их основе, да и просто вручную. Туда, где тип
> данных круглый, никакое квадратное не влезет.
>
> > Поэтому считаю Moo крайне практичным
> > инструментом.
>
> Никто и не спорит. Весьма практичный в своей области.
>
> > От себя еще пожелание к докладчикам: может про MOP кто-нибудь расскажет,
> где
> > на практике получить от него выигрышь?
>
> Вкратце: везде, где нужно в рантайме оперировать классами - изменять
> методы, модификаторы методов, присваивать роли, получать информацию
> обо всем этом и т.д.
> Простейший пример:
>
> https://github.com/ichesnokov/Yandex-Direct-API-JSON/blob/master/lib/Yandex/Direct/API/JSON.pm#L193
>
> В качестве более интересного примера можно посмотреть код
> Test::Class::Moose.
>
> В целом это действительно хорошая тема для доклада.
>
> >
> > вторник, 18 марта 2014 г. пользователь Ilya Chesnokov написал:
> >>
> >> 18 марта 2014 г., 21:24 пользователь Андрей П. Ковбович
> >>
> >> <akovbovich на gmail.com<javascript:_e(%7B%7D,'cvml','akovbovich на gmail.com');>>
> написал:
> >> > Почему не use Moo? Если нет зависимостей от moose, то вполне себе
> >> > отличная
> >> > альтернатива для ОО.
> >>
> >> Потому что в Moo нет вообще ни черта - ни библиотеки типов, ни MOP :)
> >> Только аксессоры + роли - впрочем, поэтому он и достаточно легковесный.
> >> Плюс его аксессоры медленнее, чем XS-ный Mouse (не смог найти запись
> >> того доклада с YAPC, про который говорил выше - но насколько помню,
> >> XS-решения, и в частности Mouse, рвали всех на бенчмарках).
> >>
> >> К счастью, есть еще такой проект как mop, который, возможно, окажется
> >> в ядре через пару лет: https://github.com/stevan/p5-mop-redux.
> >> Тогда все, начинающееся на Mo* можно будет переписывать )
> >>
> >> Кстати, довольно забавно - появился Moose для Ruby:
> >> https://github.com/peczenyj/MooseX
> >> --
> >> Best regards,
> >> Ilya Chesnokov
> >> --
> >> Moscow.pm mailing list
> >> moscow-pm на pm.org <javascript:_e(%7B%7D,'cvml','moscow-pm на pm.org');> |
> http://moscow.pm.org
> >
> >
> > --
> > Moscow.pm mailing list
> > moscow-pm на pm.org <javascript:_e(%7B%7D,'cvml','moscow-pm на pm.org');> |
> http://moscow.pm.org
> >
>
>
>
> --
> Best regards,
> Ilya Chesnokov
> --
> Moscow.pm mailing list
> moscow-pm на pm.org <javascript:_e(%7B%7D,'cvml','moscow-pm на pm.org');> |
> http://moscow.pm.org
>
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20140319/166cde91/attachment.html>


Подробная информация о списке рассылки Moscow-pm